Este no es el trabajo de casa de mi escuela. Este es mi propio trabajo a domicilio y soy algoritmo de autoaprendizaje.- Ordene una matriz con elementos distintos de LogLogN
En Algorithm Design Manual, existe una especial tal
4-25 Suponga que la matriz A [1..n] solamente tiene números de {1,. . . , n^2} pero que como mucho log log n de estos números aparece alguna vez. Diseñe un algoritmo que clasifique A en sustancialmente menos que O (n log n).
Tengo dos enfoques:
El primer enfoque:
Básicamente quiero hacer recuento de clasificación para este problema. Primero puedo escanear toda la matriz (O (N)) y poner todos los números distintos en una matriz de tamaño loglogN (int [] K).
Luego aplique el tipo de conteo. Sin embargo, cuando configuro la matriz de conteo (int [] C), no necesito establecer su tamaño como N^2, en su lugar, configuré el tamaño como loglogN también.
Pero de esta manera, al contar las frecuencias de cada número distinto, I tiene que escanear matriz K para obtener el índice de ese elemento (O (NloglogN) y luego actualizar matriz C.
El segundo enfoque :
una vez más, tengo que escanear toda la matriz para obtener una matriz número distinto K con el tamaño loglogN
Entonces acabo de hacer una especie de clasificación rápida como, pero la partición se basa en la mediana de la matriz K (. es decir, cada vez que el pivote es un elemento de la matriz K), recurre sively
Creo que este enfoque será el mejor, con O (NlogloglogN).
Am I right? o hay mejores soluciones? Existen
impuestos especiales similares en el Manual de diseño de algoritmos, tales como
4-22 Mostrar que los enteros positivos n en el rango de 1 a k se pueden clasificar en O (n log k) tiempo. El caso interesante es cuando k < < n.
4-23 Buscamos ordenar una secuencia S de n enteros con muchas duplicaciones, de modo que el número de enteros distintos en S sea O (log n). Proporcione un algoritmo de tiempo del caso más desfavorable O (n log log n) para ordenar tales secuencias.
Pero básicamente para todos estos impuestos especiales, mi intuitivo siempre estaba pensando en contar, ya que podemos conocer el rango de los elementos y el rango es lo suficientemente corto en comparación con la longitud de toda la matriz. Pero después de pensar más profundamente, supongo que lo que están buscando los impuestos especiales es el segundo enfoque, ¿verdad?
Gracias
Podríamos utilizar la estructura de BST de registro de n elementos qué tamaño del registro - queremos clasificar en elementos menores para conseguir más pequeño tiempo de ejecución (no estoy considerando contando especie, ya que se va a tomar wayyyy demasiado mucho espacio que mi matriz original) Podemos mantener el contador en cada nodo para manejar los duplicados T (n) = O (número de elementos * altura del bst) = O (n * log log log n) ¿Cómo estás? tomando recuento ordenar matriz de tamaño log log n en lugar de n^2 – Sandy