c++ - que - diferencia entre clasificar y ordenar documentos
¿Cuál es la diferencia entre ordenar y clasificar? (9)
Clasificación: una comparación para la disposición parcial determinada de un conjunto; colisión es posible
rank1 = max({foo1.bar, foo2.bar})
rank2 = min({foo2.kite, foo2.kite})
Pedido: composición de clasificaciones ponderadas que permiten que un conjunto esté completo y exclusivo, sin colisiones latentes; el orden de inserción suele ser una resolución de reserva cuando la clasificación explícita sola es inadecuada para un subconjunto
order = {
ordering1 = (foo1.bar != foo2.bar) ? rank1(foo1, foo2) : ordering2(foo1, foo2)
ordering2 = (foo1.kite != foo2.kite) ? rank2(foo1, foo2) : fallback(foo1, foo2)
}
Clasificación: la disposición de un conjunto por un orden que utiliza una estrategia particular de acceso y partición
sort1 = strand(foo, order)
sort2 = bubble(foo, order)
Ordenado: el estado binario de la disposición de un conjunto de acuerdo con un orden (verdadero o falso)
is_sorted = {
for (each foo)
(is_ordered(foo(n), foo(n-1)) ? continue : return false;
return true;
}
No, no es una pregunta de una clase, estoy estudiando árboles y montones (árbol binario parcialmente clasificado) por mí mismo y me preguntaba cómo definir correctamente estas 2 propiedades / acciones en relación con una estructura de datos genérica.
Como palabras, son casi sinónimos en el contexto del código de la computadora. Por ejemplo:
- SQL tiene una cláusula
order by
, por lo que sus filas de datos están ordenadas. - Java tiene una interfaz
SortedSet
ySortedMap
, un métodoCollections.sort()
para la interfazList
y un métodoArrays.sort()
para matrices.
Si iba a especificar una diferencia, entonces diría que una matriz o java.util.List está ordenada pero no ordenada .
Cuando coloca objetos en una array
o List
, retienen el orden en el que se colocaron allí, y puede acceder a ellos por índice, pero no están ordenados, porque el orden es arbitrario .
Con un java.util.SortedSet , puede colocar objetos, en el orden que desee, ya que los clasificará, ya sea por natural ordering
o por la fórmula en java.util.Comparator . Sin embargo, no puede acceder a los elementos por índice. Esto los haría ordenados pero no ordenados .
Creo que ayuda pensar en esto en términos o algoritmos de clasificación. Algunos algoritmos de clasificación conservan el orden mientras que otros no. Por ejemplo, considere los dos ingeniosos algoritmos de clasificación ineficaces sort sort y selection sort. Se garantiza que la ordenación de burbuja conservará el orden y la ordenación de selección no. Preservar órdenes significa que los elementos que son idénticos no se intercambian.
Conservar el orden es importante, especialmente cuando los elementos contienen otros datos que no se ordenan. Por ejemplo, si estuviera ordenando la edad de las personas, podrían tener la misma edad pero diferentes nombres y es posible que desee conservar el orden original.
Vea los algoritmos de clasificación en wiki que dan la complejidad del tiempo y su estabilidad. Estable significa que se conserva el orden original.
https://en.wikipedia.org/wiki/Sorting_algorithm
En términos generales, un orden especifica qué elementos se deben ordenar antes de qué otros elementos en una secuencia. La clasificación es el proceso de poner una colección de tales elementos en el orden especificado por un pedido.
(Ligeramente confuso, también es posible hablar de "ordenar" una secuencia de elementos, lo que significa lo mismo que ordenarlos en un orden especificado por un pedido).
ACTUALIZAR:
En términos de implementación, un buen ejemplo serían los contenedores estándar (por ejemplo, mapa, http://en.cppreference.com/w/cpp/container/map ), que toman un parámetro de plantilla adicional que suministra el pedido. Esto predeterminado es std::less<Key>
en el caso del mapa. Si quiere su propio pedido, utiliza un tipo de comparador diferente al crear el mapa y se usa en su lugar. Una forma común de proporcionar su propio comparador es implementar una estructura pequeña que tenga un bool operator()(const Key& lhs, const Key& rhs) const
.
Mi puñalada a esto ... Ordenar es definido por el usuario. Por ejemplo, puede pedir un conjunto de cadenas basadas en las más accedidas, más populares, etc. La clasificación "generalmente" proviene de un conjunto de métodos de sistema operativo existentes. Los ejemplos incluyen ordenar un conjunto de cadenas alfabéticamente en función de la configuración regional de la cadena.
La forma en que lo veo es la siguiente. Si ordeno una colección, estoy especificando un predicado que determina en qué lugar de una colección existirá un artículo. Si selecciono una colección, lo hago generalmente porque quiero una búsqueda rápida. La clasificación generalmente da como resultado tiempos de búsqueda rápidos para un artículo determinado de una colección. Esto se aplica a los gustos de cadenas, enteros, etc.
Al mirar mi respuesta, creo que ordenar y ordenar son casi intercambiables. Sin embargo, aún diría que ordenar es definido por el usuario, la clasificación es un concepto conocido. Por ejemplo, todos sabemos que ordenar una lista de nombres resulta en orden alfabético. Si quiero ordenar una lista de nombres por mi propio algoritmo, por ejemplo, según la popularidad, le presento mi propio algoritmo de ordenamiento que ordena las cadenas como mejor me parezca. Por lo tanto, diría que si introduce un algoritmo que ordena, pero ordena el orden según sus propios requisitos, entonces está ordenando.
Una colección ordenada implica el concepto de una dirección o posición no volátil, visible y reproducible de sus elementos relativos entre sí. La clasificación , entonces, es la ubicación real de los elementos por algún criterio arbitrario.
Una relación de orden es transitiva. Una relación de clasificación no lo es.
Puedes ordenar una secuencia de enteros. Solo puedes ordenar un conjunto que contenga plátanos, manzanas, bayas ...
IBM hace una distinción entre conjuntos ordenados y ordenados :
Los conjuntos pueden ordenarse u ordenarse:
Un conjunto ordenado es un conjunto cuyos elementos están dispuestos en el orden en que se agregaron al conjunto. Tenga en cuenta que así es como se crean los conjuntos por defecto. Por ejemplo:
{int} S1 = {3,2,5};
y
ordered {int} S1 = {3,2,5};
son equivalentes.
Un conjunto ordenado es un conjunto en el que los elementos se organizan en su orden natural ascendente (o descendente). Para cuerdas, el orden natural es el orden lexicográfico. El orden natural también depende de la configuración regional del sistema. Por ejemplo:
sorted {int} sortedS = {3,2,5};
y
ordered {int} orderedS = {2,3,5};
son equivalentes, y iterar sobre sortedS o orderedS tendrá el mismo comportamiento. Para especificar el orden descendente, agrega la palabra clave invertida.
Además, la Asociación Nacional de Garantía de la Información propuso una interpretación de los términos al Instituto Nacional de Estándares y Tecnología en 2002:
PROBLEMA:
¿Cuál es la distinción entre los términos "ordenar" y "ordenar"? Algunas veces las palabras se usan indistintamente.
DECLARACIÓN
Aunque los términos "ordenar" y "ordenar" a veces se usan indistintamente en las discusiones del sistema de TI, tienen significados algo diferentes. Cuando uno ordena, uno separa los artículos en diferentes tipos o clases; cuando uno ordena, uno arregla los artículos en un orden particular.
Un " pedido " es básicamente un conjunto de reglas que determinan qué elementos vienen antes o después de qué otros artículos. IE: los elementos de orden relativa aparecerían en si se clasificaron. Para las colecciones que imponen un orden, ese orden generalmente se especifica en términos de operadores de comparación (particularmente
<
), interfaces (aComparable<T>
JavaComparable<T>
), o callbacks de comparación u objetos de función (como el estándar de C ++).También hay colecciones descritas como " colecciones ordenadas ". Ligeramente diferente uso de la palabra, pero significado relacionado. Lo que eso significa es que la colección representa una secuencia de elementos, y por lo tanto tiene algún concepto incorporado de orden. (Contraste con, por ejemplo, tablas hash. Agregue algo a una tabla hash, no tiene idea de dónde aparecerá si alguna vez itera sobre los contenidos. Con una colección ordenada, ya sabe). Listas, vectores, matrices, etc. son las colecciones ordenadas por excelencia. Sin embargo, para un ejemplo que no sea de lista, el tipo de "matriz" de PHP es en realidad un "mapa ordenado", un tipo de diccionario donde se conserva el orden de las claves. Las teclas aparecen en el orden en que se insertaron por primera vez (o el orden en que las
ksort()
última vez con unksort()
o similar) cuando iteras sobre la matriz." Ordenar " es el proceso de organizar realmente una secuencia de elementos de acuerdo con un orden determinado. Por lo general, solo se realiza con colecciones ordenadas ... ya que no tiene mucho sentido colocar un elemento antes que otro en un contenedor que no tiene el concepto de "antes" o no le permite reorganizar los artículos en primer lugar. (Estructuras como conjuntos y montones también pueden usar un orden, y agregar y eliminar entradas altera el árbol subyacente según el orden. Se podría argumentar que están "clasificando" poco a poco. Pero la palabra se usa generalmente para representar una operación que hace la reorganización de una vez).