O tempo de Han Han , espaço linear, algoritmo de classificação inteira

38

Alguém está familiarizado com o algoritmo Yijie Han , espaço linear e classificação de número inteiro? Esse resultado aparece em um artigo bastante curto ( classificação determinística no tempo e no espaço linear . J. Alg. 50: 96-105, 2004), que basicamente reúne vários resultados anteriores, com adaptações. Meu problema é que ele foi escrito de uma maneira bastante ondulante, sem aprofundar-se em nenhum detalhe. Baseia-se fortemente em trabalhos anteriores, destacando-se outro artigo de Han (Classificação rápida rápida de números inteiros aprimorada no espaço linearO ( n log log n )O(nloglogn)O(nloglogn). Information and Computation 170 (1): 81–94) escritas no mesmo estilo. Estou tendo dificuldades significativas para entender esses dois trabalhos, principalmente a maneira como eles se adaptam e usam resultados anteriores. Eu apreciaria qualquer ajuda.

É claro que isso é muito amplo e vago para ser considerado uma pergunta adequada, mas espero desenvolver uma discussão sobre várias perguntas e respostas bem definidas e focadas.

Para começar, aqui está minha primeira pergunta específica. No lema 2 das informações. Comp. Neste trabalho, existe um algoritmo de tempo recursivo para encontrar o mésimo menor número inteiro em um conjunto de números inteiros pequenos agrupados cada em palavras de RAM. A descrição do algoritmo não menciona como o caso base é tratado. Nesse caso, é necessário fazer a seleção no tempo . Como isso pode ser feito?n k k = O ( n ) O ( log k )O(n/klogk)nkk=O(n)O(logk)

Ari
fonte
13
Seria perfeitamente apropriado escrever para ele: [email protected].
Joseph O'Rourke
Sim. Já discutimos essa questão geral e a maneira correta de resolver isso é enviar um email ao autor.
Suresh Venkat
17
Isso inclui uma pergunta específica sobre um trabalho de 7 anos e que já passou pelo processo de revisão por pares. Embora Ari possa enviar um e-mail ao autor, essa parece ser a pergunta ideal para este site. Eu não entendo a deflexão.
Huck Bennett
18
Claro que a primeira coisa que fiz foi escrever Han. Sem resposta. Então, entrei em contato com alguém que fez uma pesquisa de classificação por número inteiro, e ele disse que, após a leitura, havia achado os papéis muito bagunçados para merecer mais investimentos de seu tempo. Foi quando eu vim aqui. Se houver alguém por aí que conhece Han e possa chamar sua atenção em meu nome, isso seria ótimo também.
Ari
4
A classificação geral não possui um limite inferior . Muito pelo contrário - a classificação é restrita a comparações que têm esse limite. A questão aqui não está restringindo a entrada, mas melhorando o modelo computacional. Meu modelo computacional é um dos tipos de RAM de custo unitário e permitirei suposições razoáveis ​​(como a disponibilidade de constantes que dependem do tamanho da palavra). Ω(nlogn)
Ari

Respostas:

18

Eu estava pensando a mesma coisa.

Felizmente, consegui encontrar um artigo de jornal publicado em 2011 que explica exatamente isso; além do mais, você não precisa de uma assinatura para visualizá-la: Implementação e análise de desempenho da classificação exponencial de árvore

Eu recomendo a leitura do artigo inteiro para aprender como ele pode ser implementado e entender melhor sua teoria subjacente. Também mostra como as árvores exponenciais se comparam às árvores binárias e de classificação rápida. Aqui está o trecho relevante relacionado ao algoritmo de tempo, espaço linear e algoritmo de classificação de HanO(nloglogn) :

Yijie Han deu uma idéia que reduz a complexidade ao tempo esperado no espaço linear. [6] A técnica usada por ele é a passagem coordenada de números inteiros na árvore de pesquisa exponencial de Andersson [8] e o tempo linear que se divide em vários bits dos números inteiros. Em vez de inserir um número inteiro de cada vez na árvore de pesquisa exponencial, ele transmitiu todos os números inteiros, um nível da árvore de pesquisa exponencial de cada vez. Essa transmissão coordenada fornece a chance de realizar multi-divisões em tempo linear e, portanto, acelerar o algoritmo. Essa ideia pode acelerar, mas na implementação prática é muito difícil manipular números inteiros em lotes.

[6] Y. Han, classificação determinística em O (n log log n) tempo e espaço linear, 34ª STOC, 2002.

[8] A. Andersson, Classificação determinística rápida e pesquisa no espaço linear, IEEE Symposium on Foundations of Computer Science, 1996.

AT
fonte
Por que o voto negativo?
precisa
1
Acabei de adicionar este link de artigo de jornal à página da Wikipedia da árvore exponencial . FYI: Este artigo pode ter sido publicado depois que a pergunta foi feita.
AT
@AT, você poderia expandir um pouco sua resposta e explicar como ela responde à pergunta. No momento, a única coisa que dá é um link para um artigo em alguma revista.
Kaveh
1
Bem, eu já desisti do trabalho de Han, então estou feliz que você tenha sido capaz de fornecer essa ajuda. Eu realmente não esperava ver nada quando voltei aqui hoje. Obrigado! Vou ler este novo artigo e ver se isso me ajuda a progredir no artigo de Han.
Ari #
2
Bem, eu já li e permitirei que, possivelmente, eu tenha entendido completamente errado, mas, exceto por isso, parece haver um pequeno problema. Os autores afirmam que sua árvore tem altura O , mas se a árvore tem altura , então temsai e, portanto, menos denós no total. Vamos assumir generosamente que cada nó contém chaves. Então a árvore contém menos dechaves. Se então . De qualquer forma, mesmo que os autores estejam corretos, eles não conseguem a classificação O , nem explicam Han, portanto não são úteis.(loglogn)h(h+1)!2(h+1)!h+22(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)
Ari #
1

Não tenho certeza sobre a resposta (não passei pelo papel), mas acho que isso deve ajudar. Os números são compactados em uma única palavra; portanto, as operações em uma única palavra levam tempo O (1). Se houver, digamos, k números de h bits cada, o tamanho da palavra depende de k, h que por sua vez também depende do intervalo de números. Portanto, usamos técnicas de redução de intervalo que podem reduzir o intervalo de números para que muitos números possam caber em uma única palavra. Criando máscaras de bits apropriadas, podemos encontrar números inteiros maiores separados dos menores, considerando duas palavras por vez. Isso pode ser feito no tempo O (1). (Ontuition: para isso, cada número armazenado na palavra tem um bit de flag associado a ele e, em seguida, subtraímos duas palavras ... se o bit da flag for disparado, será um número menor).

Da mesma forma, usando acima, também podemos classificar qualquer palavra que contenha k números no tempo O (log k) (classificação bitônica).

Edit: Algoritmo para classificar 2k números no intervalo de 0 a m-1 compactados em uma palavra em que cada número tem o tamanho L de = log (m + k) +2.

K1 seja 1: 000000 1: 000000 1: 000000 1: 000000 ........ onde o bit anterior ao cólon também é chamado de bit de flag e cada sequência tem L bits de comprimento e é repetida 2k vezes na palavra K_1. (Dois pontos é apenas para a compreensão)

K2 é (2k-1) (2k-2) .... 1 escrito em binário. Esboço do algoritmo:

Repita para t = log k para 0.

Parte 1 - separe a palavra original Z em duas palavras A e B.

  1. Seja T obtido deslocando , (posições L-1-t) para a esquerda e ANDing o resultado com . Seja M = T- (T mudou L-1 para lugares).K2K1

  2. E Z com M e mude o resultado ( ) para a direita. Isso dá A.2tL

  3. B = Z- (Z&M).

Parte 2

  1. M = ((A OR ) -B) &K 1K1K1

  2. M = M- (M mudou para a esquerda L-1 lugares).

  3. MIN = (P&B) OU (A- (A&M))

  4. MÁX = (A&M) OU (B- (B&M))

  5. MAX é deslocado em lugares.2tL

  6. Finalmente, ORing MAX e MIN, retornamos Z.

Eu dei o esboço, espero que você possa preencher os detalhes necessários.

singhsumit
fonte
Não sei ao certo o que você está sugerindo. A suposição é que os números inteiros já são pequenos ek deles já estão compactados em uma única palavra. Você está propondo reduzir ainda mais seu tamanho? Se sim, o que você faz então? Além disso, sei como classificar uma sequência bitônica compactada em uma única palavra no tempo O (log k) ou como classificar uma sequência geral (não bitônica) no tempo O (log ^ 2 k). Se você conhece um algoritmo que classifica uma sequência geral no tempo O (log k), poderia descrevê-lo com mais detalhes? (Tal algoritmo seria, naturalmente, resolver o problema de seleção.)
Ari
Não estou reduzindo ainda mais o tamanho, sugeri como reduzir o tamanho que não era necessário em sua resposta. Desculpe pela confusão.
Singshumit
A menos que eu tenha entendido errado, isso parece o algoritmo para classificar seqüências bitônicas. Não classifica seqüências gerais. Por exemplo, ele classifica a sequência 3,0,2,0, onde o 3 está no campo mais à esquerda (mais significativo)?
Ari #
3 0 2 0 é separado n, obtemos A = 3 2 e B = 0 0, em seguida, MAX se torna 3 2 e MIN é 0 0. Então, temos um novo Z como 3 2 0 0. Qualquer sequência geral possui uma sequência bitônica do tamanho 2. com cada iteração, esses tamanhos ficam dobrados e, finalmente, em tempo de log k, temos nossa resposta.
singhsumit 24/05
Não. Os números não são compactados, apenas diminuídos. Na primeira iteração, dividimos pares de números que diferem no bit mais alto de sua posição, para obter A = 0 3 0 2 e B = 0 0 0 0, então MIN = 0 0 0 0, MAX = 0 3 0 2 e Z = 3 0 2 0. Na segunda iteração, dividimos os pares que diferem no bit mais baixo de sua posição, então novamente obtemos A = 0 3 0 2, B = 0 0 0 0 0 e novamente Z permanece inalterado.
Ari