Dada uma permutação de 0..N-1, determine o índice dessa permutação na ordem lexicográfica de todas as permutações de 0..N-1, em tempo linear


7

Existem várias ou soluções piores, mas estou procurando uma que seja executada em ou uma prova de que não existe.O(nregistron)O(n)

Respostas:


9

O artigo de 2007, ranking de permutações em tempo linear, fornece um algoritmo de classificação em tempo linear para a ordem lexicográfica, assumindo que a aritmética nos números de comprimento O(nregistron) leva tempo constante.


O artigo de 2001, Ranking e permutações de desagregação no tempo linear, apresenta um algoritmo de classificação linear no tempo que não exige aritmética rápida em grandes números, mas não para a ordem lexicográfica. Quanto a este último, afirma

Todo o problema de classificar permutações em ordem lexicográfica parece inextricavelmente entrelaçado com o problema de calcular o número de inversões em uma permutação, e parece que será necessário um grande avanço para fazer essa computação em tempo linear, se é que é possível .

Por outro lado, menciona um algoritmo para classificar permutações em ordem lexicográfica devido a Dietz.O(nregistron/registroregistron)


0

que a resposta está sendo boa, adicionarei outra referência (mais recente) aqui:

Um novo método para gerar permutações em ordem lexicográfica, por TING KUO (2009)

propõe um método para gerar, classificar e liberar permutações em ordem lexicográfica, além de alguns novos recursos, como gerar uma permutação que está a uma determinada distância de outra permutação.

A complexidade é novamente do ordemO(neugn)


11
Não entendo como isso responde à pergunta. A pergunta diz que o OP já conheceO(nlgn) algoritmos de tempo e está perguntando sobre O(n)algoritmos. Então, mencionando umO(nlgn)algoritmo de tempo não está respondendo à pergunta.
DW

@ DW, a resposta responde exatamente o seu comentário. é adicionado como referência extra (e mais recente). Além disso, a resposta já votada também fornece a solução O (nlgn) para pedidos lexicográficos . não há algoritmo conhecido para pedidos lexicográficos de tempo linear (pelo menos até o momento). Portanto, o OP pode ter acesso a aproximações e abordagens mais recentes, espero que ele próprio possa desenvolver esse algoritmo. Por favor, remova o downvote favor
Nikos M.

Ainda não vejo como ele responde ao meu comentário. Suponha que a outra resposta não existisse (pois é irrelevante para esses propósitos). Como sua resposta responde à pergunta que foi feita? Dê uma olhada na pergunta novamente e depois na sua resposta. A pergunta diz especificamente que não deseja umO(nlgn) algoritmo de tempo (o autor já conhece O(nlgn) algoritmos de tempo), então como dizer ao OP sobre um O(nlgn)algoritmo de tempo responder à pergunta?
DW

@DW, que pena, parece que sua reputação é desperdiçada com você, já respondida, em qualquer caso, deixe OP decidir. Novamente, um anser semelhante foi dado e foi votado várias vezes. Não algoritmo conhecido para ordenação lexicográfica de tempo linear. Essas são aproximações (sob certas condições) que o OP pode usar ou até ajudá-la a derivar seu próprio algoritmo. Isso é ciência, afinal todas as boas aproximações podem ser muito úteis e referências a essas soluções. eu espero que você me conceda esse direito
Nikos M.

Afirmar que "Não existe um algoritmo de tempo linear conhecido" seria uma resposta ... mas isso não está presente em nenhum lugar da sua resposta. Só se pode julgar sua resposta com base no que está escrito nela. (Dito isto, eu reconheço que este pedido já está feita em resposta de Yuval, portanto, não é claro que isso contribuiria muito para adicionar outro re-afirmação de que.)
DW
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.