Al día siguiente, vinieron las mismas tres personas. Esta vez, tu amigo está en el medio. Decidiste servirle primero, por delante de la persona que vino primero, luego la tercera persona, y finalmente, la primera persona. Entonces, esta vez, según el robot, la posición 2 tiene la mayor prioridad, seguida de la posición 3.
Al tercer día, tu amigo es el primero y lo haces por primera vez. La conclusión de cualquier persona, y el robot, es que la prioridad depende de quién está preocupado y por la posición de cada persona. NOTA: En la vida real, la prioridad no siempre depende de la primera costumbre.
En la programación, una cola de prioridad binaria es donde el primer elemento tiene la mayor prioridad. El tercer elemento puede tener la mayor prioridad, y el segundo elemento, la tercera prioridad. Las colas prioritarias son de naturaleza binaria. Nota: El primer elemento es siempre la mayor prioridad en una cola de prioridad. También puede suceder que el segundo elemento tenga una mayor prioridad y el tercer elemento tiene la tercera prioridad. En la definición de la cola prioritaria, las prioridades del segundo y tercer ítems pueden no estar en orden descendente. Esta diferencia continúa por la cola hasta el último elemento, que puede no ser el elemento de menor prioridad. Sin embargo, estará entre los de la prioridad más baja. Esta clasificación parcial también se conoce como orden parcial. Entonces, una cola de prioridad es una cola de pedidos parciales, donde la prioridad no es de primer momento, aunque esa es la regla general.
Al tratar con la matriz, First-COME_FIRST Served es First-In_First-Out, escrito como FIFO. En la computación, la cola es FIFO, mientras que la cola prioritaria es un FIFO parcial porque a medida que la cola desciende, algunos elementos tienen prioridades mayores que sus predecesores cercanos. A medida que la cola prioritaria desciende aún más, aumenta la distancia entre tales predecesores y las prioridades más altas.
Una cola prioritaria se implementa como una estructura de datos de montón. La siguiente pregunta es, ¿qué es un montón?? Existe el montón máximo y el montón mínimo, que se discutirá en detalle a continuación.
Contenido del artículo
Estructura de datos de montón
Hay max-heap, y hay mín. Con Max-Heap, el primer elemento es el mayor valor. A medida que la cola desciende, los valores continúan disminuyendo, aumentando y generalmente disminuyendo. Con min-heap, el primer elemento es el valor más pequeño. A medida que la cola desciende, los valores continúan aumentando y disminuyendo y generalmente aumentan. Los valores de un montón se pueden mantener en una matriz.
Un montón binario es donde un nodo (artículo) tiene dos hijos. El primer hijo es el niño izquierdo y el segundo hijo es el niño derecho. El valor de cualquier nodo se llama clave.
Montón
La siguiente lista es un máximo de montón que ya está parcialmente ordenado y no necesita más pedidos:
89, 85, 87, 84, 82, 79, 73, 80, 81 ,, 65, 6989 es el primer valor en el índice 0. Es el nodo raíz (padre raíz). Es el mayor valor entre todos los valores. Su primer hijo (85) está en el índice 1, cuyo índice es igual a 2 (0) + 1, donde 0 es el índice del padre. Su segundo hijo (87) está en el índice 2, que es igual a 2 (0) + 2, donde 0 es el índice del padre.
85 está en el índice 1. Es un padre. Su primer hijo (84) está en el índice 3, que es igual a 2 (1) + 1, donde 1 es el índice del padre. Su segundo hijo (82) está en el índice 4, que es igual a 2 (1) + 2, donde 1 es el índice del padre.
87 está en el índice 2. Es un padre. Su primer hijo (79) está en el índice 5, que es igual a 2 (2) + 1, donde 2 es el índice del padre. Su segundo hijo (73) está en el índice 6, que es igual a 2 (2) + 2, donde 2 es el índice del padre.
En general, a medida que el recuento de índice comienza a partir de 0, que represente el índice de un padre de la matriz; Y así, la izquierda (primero) hijo de un padre en el índice I está en el índice 2i + 1; y su niño (segundo) niño, está en el índice 2i + 2. Algunas celdas hacia el final de la matriz pueden estar vacías; No deben tener valores.
La lista anterior es un buen ejemplo del contenido de una cola prioritaria después de que se complete la inclusión de elementos. Si se elimina el primer elemento, el resto se reorganiza para que la configuración de los valores, formando una nueva cola de prioridad. De esa manera, la eliminación de todos los elementos de la parte superior aparecería como si todos los elementos estuvieran ordenados correctamente. Los elementos aún se pueden obtener como están, en un orden parcial, sin eliminar ningún elemento.
Mínimo
Min-Heap es el reverso de Max-Heap.
Cola prioritaria en Java Proper
Java tiene una clase llamada priorityqueue, para la cola de prioridad. Tiene muchos constructores y métodos. Solo se explican a continuación tres constructores y los métodos más apropiados:
Construcción de Java de una cola prioritaria
Public PriorityQueue ()
Esto crea una cola prioritaria sin ningún elemento. La clase, priorityqueue, está en la java.utilizar.* Paquete, que debe importarse. El siguiente segmento de código crea una priorityqueue vacía y luego agrega valores sin clasificar (ni siquiera parcialmente ordenados) a la cola:
PrioridadEstos números son todos enteros. Son de la lista parcialmente ordenada proporcionada anteriormente, pero actualmente, están completamente sin clasificar a medida que se ingresan. Los elementos en PQ ahora se clasifican parcialmente de acuerdo con la definición de la cola prioritaria en Java.
Priorityqueue público (priorityqueue c)
Esto crea una prioridad de otro priorityqueue. El siguiente segmento de código ilustra esto:
PrioridadPQ1 ha sido creado a partir de PQ. Actualmente tiene el mismo orden parcial y PQ.
El tercer método de constructor se ilustra a continuación.
Métodos de Java de una cola prioritaria
Public int size ()
Esto devuelve el tamaño de la lista y no incluye celdas vacías, como se ilustra en el siguiente código:
PrioridadLa salida es 11.
Public Void foreach (acción del consumidor)
Este método debe usarse de manera especial para copiar todos los valores en la cola de prioridad en el formulario parcialmente ordenado. El siguiente programa ilustra esto:
PrioridadTenga en cuenta la forma en que se ha realizado el código dentro de los paréntesis del método foreach. El elemento es una variable ficticia que representa cada elemento en la cola. Tenga en cuenta el uso del operador de flecha. La salida es:
65 69 84 79 73 87 89 80 81 82 85La salida es correcta, en un orden parcial, pero en un orden ascendente. Este no es necesariamente el orden inverso dado anteriormente debido a la forma en que los valores se incluyeron en la lista. Es decir, el método foreach devuelve la lista como un mínimo-montón. Para devolver la lista en orden descendente, use el siguiente constructor:
Public PriorityQueue (comparador de comparación)
Este es un constructor. El siguiente código muestra cómo usarlo:
PrioridadLas x, y son variables ficticias que representan los valores menores y menos menos. Tenga en cuenta que en los primeros paréntesis para X e Y, X viene antes de Y. En la segunda paréntesis, Y viene antes de x. La salida es:
89 85 87 80 82 69 84 65 79 73 81ADD PÚBLICO BOOLEAN (E E)
El número de elementos en una cola prioritaria se puede aumentar uno por uno. Este método devuelve verdadero si se produjo un cambio; y falso de lo contrario. El siguiente código agrega el duodécimo valor práctico a la cola:
PrioridadEl valor agregado avanzaría en la cola para que se ajuste a su posición apropiada, lo que lleva a un reajuste de las posiciones de los elementos. La salida es:
89 85 87 80 82 70 84 65 79 73 81 69PUBLIC E POLL ()
Este método recupera y elimina la cabeza de la cola; o devuelve nulo, si esta cola está vacía. Cada vez que se retira la cabeza, la cola prioritaria se reajusta para tener una nueva cabeza legítima. Si la cabeza se continúa eliminando, los valores devueltos estarán en orden ordenado completo. El siguiente código ilustra esto:
PrioridadLa salida de la computadora del autor es:
89 87 85 84 82 81 80 79 73 70 69 65 Excepción en el hilo "principal" Java.utilizar.ConcurrenteModificationExceptionTenga en cuenta que la salida es de orden ordenado completo. Este código en particular no pudo detectar la excepción lanzada. Este problema se deja como un ejercicio de investigación para el lector.
Conclusión
Una cola prioritaria en Java es una cola en la que los elementos tienen prioridad más que FIFO. Una cola prioritaria es típicamente un montón, que puede ser un montón o un montón mínimo. Los valores deben ser del mismo tipo. Se almacenan en la cola en formato de montón (pedido parcial). Esperamos que hayas encontrado este artículo útil. Echa un vistazo a los otros artículos de Sugerencia de Linux para obtener consejos y tutoriales.