Cómo encontrar el valor mínimo en una lista vinculada (individual / doblemente) en la menor cantidad de tiempo

Antes de responder a la pregunta, supongo que sabes qué es la complejidad del tiempo, porque es una matriz que se utiliza para comparar y medir el tiempo que tarda cualquier proceso en algoritmos. Si no sabes, aprende aquí.

La búsqueda binaria proporciona una complejidad de tiempo mínima (es decir, O (lg n)) buscando un elemento en un conjunto dado de elementos, pero la lista de enlaces no puede beneficiarse de ella ya que la lista de enlaces individualmente no puede atravesar, lo cual es uno de los requisitos de la búsqueda binaria. Aunque puede hacerse posible con algo modificado, la lista de enlaces debe ordenarse.

Entonces, en general, la lista de enlaces (ya sea individual o doblemente) toma una complejidad de tiempo lineal (es decir, O (n)) para buscar el elemento del conjunto.

Aquí está el pseudocódigo para ello. Es mejor implementarlo por su cuenta (requiere conocimiento de punteros en C).

1) Inicialice su puntero al encabezado de la lista. corriente = cabeza

2) Mientras la lista no finaliza, es decir, mientras está actual! = Nulo

2.1) Compare current con el elemento de la lista, si se encuentra coincidencia, devuelva true if (current == key)

2.2) De lo contrario, mueva el puntero actual al siguiente nodo. actual = actual-> siguiente.

3) Si la lista finaliza y la coincidencia no se encuentra, devuelva falso.

Espero que esto ayude.

my_variable = first_element_from_the_list

iterator_head = apuntando al segundo elemento de la lista

while (iterator_head -> next! = null) {

if (iterator_head-> data

my_variable = iterator_head -> datos;

iterator_head = iterator_head-> enlace;

}

}

Este método toma O (n) tiempo para encontrar el elemento mínimo.

Si necesita una explicación sobre qué es O (n), aprenda qué es la notación asintótica.

Ahora construya su propia lógica para la lista doblemente vinculada.

No olvide hacerse esta pregunta tan pronto como obtenga una solución que funcione para todos los casos.

“¿PUEDO HACERLO MEJOR?”

Editar:

Hay casos extremos para manejar en esta lógica. Se lo dejo a quien hizo la pregunta para que su proceso de pensamiento mejore.

Una vez que este caso límite sea lógico, no se podrá inicializar el iterator_head cuando no haya un segundo nodo en la lista.

Gracias.

Tomará una complejidad de O (n). Simplemente recorra la lista y compare los elementos.

More Interesting

¿Cuál es la diferencia entre el árbol de búsqueda binario y la búsqueda binaria?

¿Cuál es la diferencia entre la mochila y los problemas de Cutting the Rod usando programación dinámica?

Cómo escribir un algoritmo que diseña guiones

Dadas las coordenadas de 3 puntos, cómo encontrar el centro del círculo formado por estos puntos con alta precisión. Para lograr una alta precisión, debe haber algún proceso de división. ¿Hay alguna forma de hacerlo?

¿Cuál es el mejor libro para aprender algoritmos y estructuras de datos en Java para principiantes?

¿Cuál es la diferencia entre array estático y automático?

¿Puedo construir un algoritmo de negociación basado en una estrategia de tendencia y usarlo para comerciar divisas durante diez años, por ejemplo?

Como resolver esto

Cómo crear un árbol binario de búsqueda binaria para los datos: 10, 8, 15, 7, 3, 6, 12, 5, 9,17

¿En cuánto tiempo puedo ser un profesional en la resolución de problemas en algoritmos y estructuras de datos si empiezo hoy sin ningún conocimiento previo?

¿Qué tan difícil es el algoritmo de verificación de traducción de Duolingo? ¿Existen otras herramientas de código abierto similares por ahí?

¿Cuándo se debe comenzar a resolver los problemas del Proyecto Euler en HackerRank? He resuelto alrededor de 50 en SPOJ, entonces, ¿es el momento adecuado para comenzar?

¿Cuáles son las ventajas de las pilas en la estructura de datos?

Cómo encontrar el segundo número más pequeño de 3 entradas sin usar la matriz

Cómo contar el número de enteros palindrómicos dentro de un rango [A, B] donde A y B pueden ser de hasta 10 ^ 17