teologico religioso politico libertad indeterminismo ejemplos determinismo biologico java deterministic

java - religioso - determinismo y libertad



¿Qué significa determinista? (11)

Determinista significa que el resultado es predecible / previsible.

Estoy leyendo la documentación de Java Hashmap pero no entiendo esta oración.

Tenga en cuenta que el orden de iteración para HashMap no es determinista. Si quieres iteración determinística, usa LinkedHashMap.

¿Qué significa determinista?


En términos más simples: cuando llama a keys (), values ​​() o entrySet () obtiene una colección, sobre la cual puede iterar. Esa línea dice que no puede esperar que el orden en que el iterador devuelve objetos sea de un orden particular. Especialmente, puede ser diferente tanto del orden de inserción como del orden natural por valores clave.

Si desea que el iterador funcione en orden de inserción, use un LinkedHashMap. Si desea iterar por valor clave, use un TreeMap. Tenga en cuenta que ambos tienen un rendimiento un poco peor que un HashMap simple, ya que ambos tienen que hacer un trabajo extra para realizar un seguimiento del pedido.


En un orden que puede ser "determinado" por adelantado.

Debido a la forma en que funciona el hashing, los elementos del mapa se "mezclan" en ubicaciones arbitrarias. Las posiciones de aleatorización no se pueden determinar fácilmente de antemano, no son determinables, no se conoce el orden resultante.


Es un algoritmo que cuando se le da una entrada particular producirá la misma salida.

Un buen ejemplo que encontré:

Considere una lista de compras: una lista de artículos para comprar.

Puede ser interpretado de dos maneras:

* The instruction to buy all of those items, in any order. This is a nondeterministic algorithm. * The instruction to buy all of those items, in the order given. This is a deterministic algorithm.


Esta es la propiedad de HashMap donde los elementos no se repiten en el mismo orden en el que se insertaron, ya que HashMap no inserta elementos en orden. Por lo tanto, la línea en la documentación


Estrictamente hablando, el orden de iteración de HashMap casi seguro no es no determinista. Al igual que la gran mayoría de los procesos computacionales, si se realiza exactamente de la misma manera, los resultados serán exactamente los mismos. Un sistema verdaderamente no determinista incorporaría algún elemento aleatorio externo, que es muy poco probable que sea el caso aquí. Al menos en la mayoría de los casos.

Lo que realmente significan, creo, es que solo porque el mapa contiene un conjunto particular de elementos, no debe esperar que cuando itere sobre ellos aparecerán en un orden particular. Eso no significa que el orden de iteración sea aleatorio , solo significa que como desarrollador no debe confiar en saber de qué se trata.

En la mayoría de los casos, la razón para esto es que habrá cierta dependencia de algunos detalles de implementación que pueden variar de una plataforma a otra y / o de un orden de acceso. Y este último a su vez puede ser determinado por la programación del hilo y el tiempo del evento, que son innatamente impredecibles.

En la mayoría de los casos, en cualquier plataforma individual y con el modelo de subprocesamiento más común, una sola aplicación de subprocesos, si siempre inserta y elimina un conjunto particular de elementos en la secuencia X, siempre los sacará en secuencia Y. Es solo que Y dependerá exactamente de X, y en la plataforma, que no tiene sentido ni siquiera pensar en lo que va a ser.

Básicamente, aunque no sea aleatorio, también podría serlo.


HashMap no mantiene el orden de lo que agrega, si desea que su resultado sea el orden de lo que agrega, debe usar LinkedHashMap, por lo que deterministic significa que ordena de forma ordenada lo que agrega.

Aquí está el ejemplo: 1. no determinista

HashMap<String, Integer> map = new HashMap<String,Integer>(); map.put("a",5); map.put("b",16); map.put("c",46); System.out.println(map); //ouptput:{a=5, c=46, b=16}

2. determinista

HashMap<String, Integer> map = new LinkedHashMap<String,Integer>(); map.put("a",5); map.put("b",16); map.put("c",46); System.out.println(map); //output:{a=5, b=16, c=46}


La definición más simple:

Dadas las mismas entradas, siempre obtienes los mismos resultados.

Más arriba, está diciendo que iterar a través del mismo HashMap puede dar resultados diferentes en momentos diferentes, incluso cuando no ha cambiado nada. Por lo general, eso no importa, pero si lo hace, debe usar un LinkedHashMap.


No determinista significa que no hay un comportamiento bien definido.

En el caso de HashMap, dependiendo de cómo haya insertado elementos, puede tener uno u otro orden de iteración.


determinista: se puede determinar
no determinista: no se puede determinar


No determinista significa que no hay un solo resultado que pueda resolver de antemano. Una expresión aritmética, como 1 + 2 o log e, es determinista. Hay exactamente una respuesta correcta y puedes averiguarlo por adelantado. Lanzar un puñado de arena en el aire, y donde cada grano caerá es efectivamente no determinista para un mayor grado de precisión.

Probablemente esto no sea exactamente correcto, ya que podría ver el código fuente de la biblioteca subyacente y la implementación de JVM, y probablemente habría alguna forma de determinar el orden que resultaría. Podría ser más correcto para ellos decir: "No se garantiza ninguna orden en particular", o algo por el estilo.

Lo relevante en este caso es que no puede confiar en el pedido.