¿Cuáles son los mejores ejemplos de implementación completa de estructuras de datos prominentes usando C (no C ++)?

Hay una estructura de datos llamada árbol Fenwick o árbol indexado binario . Se puede implementar sobre una simple matriz de enteros y puede admitir 2 operaciones que se ejecutan en tiempo [math] O (\ log_2 n) [/ math]:

  • Agregar (pos, val): agrega un valor entero arbitrariamente val (podría ser negativo) al elemento de la matriz en la posición pos .
  • Suma (izquierda, derecha) : calcula la suma de todos los elementos de la matriz dentro del intervalo [izquierda, derecha] .

La idea detrás de esas dos operaciones es bastante clara y puede llevarle un tiempo comprenderla, pero una vez que la obtiene, la implementación puede ser bastante sencilla. Puedes echar un vistazo a esta bonita explicación aquí.

En C, la implementación de estas dos operaciones anteriores podría verse así:

  Agregar vacío (int * a, int n, int pos, int val)
 {
     para (pos ++; pos  0; pos & = pos - 1)
         res + = a [pos];
     volver res;
 }

 int Sum (int * a, int n, int left, int right)
 {
     devuelve Sum0 (a, n, derecha) - Sum0 (a, n, izquierda - 1);
 }

Además del hecho de que esta implementación no parece complicada en absoluto, en realidad es una estructura de datos muy poderosa, que se puede combinar con otros algoritmos (por ejemplo, búsqueda binaria) para crear estructuras de datos aún más poderosas.

Además, es posible extender la operación Agregar para realizar una actualización de intervalo en lugar de una actualización puntual, conservando exactamente el mismo tiempo de ejecución (es decir, [math] O (\ log_2 n) [/ math]). Puedes leer más sobre esto aquí.

More Interesting

¿Cómo podemos encontrar si una matriz, arr [], tiene dos índices distintos, i y j, donde abs (a [j] - a [i]) <= L y abs (j - i) <= K en O ( N) tiempo y O (K) espacio?

¿Hay algún instituto que lo capacite para descifrar entrevistas tecnológicas difíciles como Google / Amazon / Microsoft?

¿Se solicitan estructuras de datos y algoritmos en entrevistas con gigantes tecnológicos como Microsoft, etc. para candidatos que tienen muchos años de experiencia en el campo de TI que no requirieron algoritmos y DS en absoluto en su trabajo anterior?

¿Cuál es la forma más rápida de encontrar todos los posibles pares primos en una matriz determinada?

¿Qué tan útil es el libro "Cracking the Coding Interview" mientras aparece para entrevistas técnicas de compañías como Google, Facebook, Amazon, etc.?

Cómo dividir dos números, utilizando solo operaciones de bits, en Java

¿Cuáles son algunas de las preguntas del rompecabezas formuladas en las entrevistas?

¿Qué debo hacer cuando me quedo atrapado en una entrevista de codificación?

Escriba un programa para verificar si un elemento dado está en una matriz ordenada. ¿Cuál es su complejidad temporal?

¿En qué se diferencian las preguntas de la entrevista de programación de los problemas en Codeforces, CodeChef, TopCoder, etc.? Para una entrevista, ¿ayudaría resolver los problemas de estos sitios o debería uno centrarse en las diversas preguntas de la entrevista disponibles?

Siendo un estudiante de ingeniería mecánica, ¿cómo me preparo para la entrevista TCS?

¿Cuál es la pregunta de codificación más difícil que enfrentó en una entrevista?

Además de la búsqueda binaria, ¿hay otros ejemplos de código que tengan un tiempo de ejecución de O (log n)?

¿Construir un sitio web de comercio electrónico decente (back-end + front-end) es lo suficientemente impresionante como para incluir un currículum / CV para una pasantía en una empresa de alta tecnología?

¿Qué debo aprender para las entrevistas de programación Java? ¿Qué se necesita para obtener una entrevista?