Essa pergunta e essa pergunta me fizeram pensar um pouco. Para classificar uma matriz de comprimento com elementos únicos em , precisamos ser capazes de armazenar contagens de valores na matriz. Existem algumas sugestões, mas estou procurando uma maneira de fazer isso no pior dos casos, no tempo linear. Mais especificamente:
Dada uma lista dos elementos com elementos distintos, determinar uma lista de tuplos de todos os elementos exclusivos, tal que é a contagem de elemento em .
Aqui estão algumas idéias (com falha) que tive e foram sugeridas:
- Árvore de Pesquisa Binária Balanceada - Com isso, será necessário para inserir na árvore e aumentar os valores. Após as inserções, poderíamos fazer uma travessia de árvore em . Assim, o tempo total sai para que é muito lento.
- Hash Map - Com isso, podemos obter inserções esperadas e, portanto, tempo esperado . No entanto, este ainda não é pior caso.
- Espaço vazio Mapeamento - Encontrar o elemento mínimo e máximo em . Aloque (mas não inicialize) memória suficiente para cobrir esse intervalo. Use essa memória basicamente como um mapa de hash e inclua um hash aleatório para que não tentemos acessar a memória corrompida. Essa estratégia apresenta problemas. (1) É probabilístico com muito, muito, muito baixa probabilidade de falhar, mas ainda não é garantido. Usar memória como essa nos limita a restrições de ponto flutuante ou inteiro.
- Matrizes associativas - Existem muitas outras matrizes associativas que podem ser usadas, semelhantes aos mapas de hash e BSTs, mas não estou encontrando nenhuma que corresponda a essas restrições.
Talvez esteja faltando algum método óbvio, mas também acho que poderia não ser possível. Quais são seus pensamentos?