Intentemos atravesar su montón en orden creciente. Primero, miramos la raíz. A continuación, observamos el hijo menor de la raíz. ¿Pero qué nodo miramos desde aquí? ¡El próximo más pequeño podría ser otro de los hijos de la raíz, o podría ser un nieto de la raíz!
Entonces hagamos lo siguiente. Llamemos a nuestro montón mínimo original [math] H_1 [/ math], e introduzcamos otro montón mínimo [math] H_2 [/ math]. Cada vez que visitamos un nodo [matemática] x [/ matemática] en [matemática] H_1 [/ matemática], empujemos un par [matemática] (v, p) [/ matemática] para cada hijo de [matemática] c [/ matemática ] de [matemática] x [/ matemática] a [matemática] H_2 [/ matemática], donde [matemática] v [/ matemática] es el valor en el hijo [matemática] c [/ matemática], y [matemática] p [ / math] es un puntero a esa [math] c [/ math]. Para averiguar qué nodo visitar a continuación en [math] H_1 [/ math], saquemos un par [math] (v, p) [/ math] de [math] H_2 [/ math] y visitemos [math ] H_1 [/ math] nodo señalado por [math] p [/ math]. El nodo [matemático] k [/ matemático] que sacamos de [matemático] H_2 [/ matemático] mantendrá el valor del nodo más pequeño [matemático] k [/ matemático] en [matemático] H_1 [/ matemático].
¿Cuánto tiempo se tarda? Bueno, suponiendo que [math] H_1 [/ math] es un montón binario, haremos a lo sumo [math] 2k [/ math] inserciones en [math] H_2 [/ math], así que diremos que el tamaño de [math] H_2 [/ math] es [math] \ mathcal {O} (k) [/ math]. Esto significa que cada inserción es [math] \ mathcal {O} (\ log k) [/ math], y cada extracto-min también es [math] \ mathcal {O} (\ log k) [/ math], suponiendo nuevamente estamos usando un montón binario para [math] H_2 [/ math].
- Cómo prepararse para una entrevista de trabajo de ingeniería de software en muy poco tiempo (tal vez 1 mes)
- ¿Vale la pena tomarse un pequeño descanso en la carrera para prepararse bien para entrevistas para trabajos aún mejores?
- ¿Cuáles son las posibles preguntas formuladas en una entrevista (más reciente) si ha mencionado Java en su currículum?
- Cracking the Coding Interview (libro de 2011) sugiere que clasifiquemos la lista de lenguajes de programación en nuestro currículum con nuestro nivel de experiencia. Dado esto, ¿cuándo se puede considerar a un "experto" en un lenguaje de programación?
- ¿Qué debo preparar para una entrevista técnica si la entrevista es dentro de unos días?
El tiempo total es [math] \ mathcal {O} (k \ log k) [/ math], según lo deseado.