Uma matriz de comprimento n pode conter valores 1,2,3… n^2. É possível classificar no tempo O (n)?

StackOverflow https://stackoverflow.com/questions/4238460

  •  26-09-2019
  •  | 
  •  

Pergunta

Dada uma matriz de comprimento N. Ele pode conter valores de variando de 1 a n^2 (n quadrado) Ambos inclusivos, os valores são integrantes. É possível classificar essa matriz no tempo O (n)? Se possível, como?

EDIT: Este não é um dever de casa.

Foi útil?

Solução

Escreva cada número inteiro na base n, ou seja, cada x pode ser representado como (x1, x2) com x = 1 + x1 + x2*n. Agora você pode classificá -lo duas vezes com a contagem, uma vez no X1 e uma vez no X2, resultando na matriz classificada.

Outras dicas

Sim, você pode usar Radix Sort com N baldes e dois passes. Basicamente, você trata os números como tendo 2 dígitos na base N.

É possível classificar qualquer variedade de números inteiros com um valor máximo bem definido em O(n) tempo usando um Radix Sort. É provavelmente o caso de qualquer lista de números inteiros que você encontrar. Por exemplo, se você estivesse classificando uma lista de números inteiros de precisão arbitrária, não seria verdade. Mas todos os tipos integrais C têm faixas fixas bem definidas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top