Bestimmen Sie bei einer Permutation von 0..N-1 den Index dieser Permutation in der lexikografischen Reihenfolge aller Permutationen von 0..N-1 in linearer Zeit

7

Es gibt verschiedene O(nlogn) oder schlechtere Lösungen, aber ich suche nach einer, die läuft O(n)oder ein Beweis, dass es keine gibt.

DG
quelle

Antworten:

9

Die Arbeit Linear-Time Ranking of Permutations aus dem Jahr 2007 liefert einen linearen Time Ranking-Algorithmus für die lexikografische Reihenfolge unter der Annahme einer Arithmetik für LängenzahlenO(nlogn) braucht konstante Zeit.


Die 2001 erschienene Arbeit Ranking and Unranking Permutations in linearer Zeit präsentiert einen linearen Time Ranking-Algorithmus, der keine schnelle Arithmetik für große Zahlen erfordert, jedoch nicht für die lexikografische Reihenfolge. Zu letzterem heißt es

Das gesamte Problem der Rangfolge von Permutationen in lexikografischer Reihenfolge scheint untrennbar mit dem Problem der Berechnung der Anzahl von Inversionen in einer Permutation verbunden zu sein, und es scheint, dass ein großer Durchbruch erforderlich sein wird, um diese Berechnung in linearer Zeit durchzuführen, wenn dies überhaupt möglich ist .

Auf der anderen Seite erwähnt es eine O(nlogn/loglogn) Algorithmus zur Einstufung von Permutationen in lexikographischer Reihenfolge aufgrund von Dietz.

Yuval Filmus
quelle
0

Da die Antwort bereits gut ist, werde ich hier eine weitere (neuere) Referenz hinzufügen:

Eine neue Methode zur Erzeugung von Permutationen in lexikografischer Reihenfolge von TING KUO (2009)

schlägt eine Methode vor, um Permutationen in lexikografischer Reihenfolge zu generieren, zu ordnen und zu entfernen, sowie einige neue Funktionen wie das Generieren einer Permutation, die einen bestimmten Abstand von einer anderen Permutation entfernt ist.

Komplexität ist wieder von der O(nlgn) Auftrag

Nikos M.
quelle
1
Ich verstehe nicht, wie dies die Frage beantwortet. Die Frage besagt, dass das OP bereits davon weißO(nlgn) Zeitalgorithmen und fragt nach O(n)Algorithmen. Also, einO(nlgn)Der Zeitalgorithmus beantwortet die Frage nicht.
DW
@ DW, die Antwort beantwortet genau Ihren Kommentar. Es wird als zusätzliche (und neuere) Referenz hinzugefügt. Außerdem bietet die bereits positiv bewertete Antwort eine O (nlgn) -Lösung für die lexikografische Reihenfolge. Es ist kein Algorithmus für die lineare zeitlexikografische Reihenfolge bekannt (zumindest bis jetzt). Das OP kann also auf Annäherungen und neuere Ansätze zugreifen, hoffentlich kann Jim selbst einen solchen Algorithmus entwickeln. Bitte entfernen Sie die Abstimmung bitte
Nikos M.
Ich sehe immer noch nicht, wie es meinen Kommentar beantwortet. Angenommen, die andere Antwort existiert nicht (da sie für diese Zwecke irrelevant ist). Wie beantwortet Ihre Antwort die gestellte Frage? Schauen Sie sich die Frage noch einmal an und dann Ihre Antwort. Die Frage sagt ausdrücklich, dass es keine willO(nlgn) Zeitalgorithmus (der Autor kennt ihn bereits O(nlgn) Zeitalgorithmen), also wie erzählt man dem OP von einem O(nlgn)Zeitalgorithmus die Frage beantworten?
DW
@ DW, schade, es scheint, Ihr Ruf ist an Sie verschwendet, bereits beantwortet, auf jeden Fall lassen Sie OP entscheiden. Wieder wurde ein ähnlicher Anser gegeben und wird mehrmals positiv bewertet. Es ist kein Algorithmus für die lineare zeitlexikografische Reihenfolge bekannt. Dies sind Annäherungen (unter bestimmten Bedingungen), die das OP möglicherweise verwendet oder ihr sogar dabei hilft, ihren eigenen Algorithmus abzuleiten. Dies ist Wissenschaft, schließlich können auch gute Annäherungen sehr hilfreich sein und Verweise auf diese Lösungen. Ich hoffe, Sie gewähren mir das Recht
Nikos M.
Die Aussage "Es ist kein linearer Zeitalgorithmus bekannt" wäre eine Antwort ... aber das ist in Ihrer Antwort nirgends vorhanden. Man kann Ihre Antwort nur danach beurteilen, was darin geschrieben steht. (Das heißt, ich erkenne, dass diese Behauptung bereits in Yuvals Antwort gemacht wurde, daher ist es nicht klar, dass es viel dazu beitragen würde, eine weitere Neuaussage davon hinzuzufügen.)
DW