Pergunta

Outro dia, decidi escrever uma implementação de Radix Sort em java. O tipo Radix deve ser O (k*n), mas o meu acabou sendo O (k^2*n) por causa do processo de quebrar cada dígito em um número. Eu quebrei cada dígito moding (%) os dígitos anteriores e dividindo por dez para eliminar os dígitos seguintes. Perguntei ao meu professor se haveria uma maneira mais eficiente de fazer isso e ele disse para usar operadores de bits. Agora, para minhas perguntas: qual método seria o mais rápido em quebrar cada número em Java, 1) método mencionado acima. 2) Converta o número em string e use substrings. 3) Use operações de bits.

Se 3) então como isso funcionaria?

Foi útil?

Solução

Como dica, tente usar um radix diferente de 10, pois os computadores lidam com a aritmética binária melhor que a decimal.

  • x >>> n é equivalente a x / 2n
  • X & (2n - 1) é equivalente a x % 2n

A propósito, o Java's >> executa a extensão de sinal, o que provavelmente não é o que você deseja neste caso. Use >>> em vez disso.

Outras dicas

[http://en.literateprograms.org/Radix_sort_(Java)](http://en.literateprograms.org/radix_sort_(java))

A linha de código que faz isso;

 int key = (a[p] & mask) >> rshift;

é a parte de manipulação de bits.

& é o operador a fazer um pouco e >> é um turno direito.

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