Cantor-Erweiterung und die umgekehrte Operation der Cantor-Erweiterung

Das achtstellige Problem erfordert keine Cantor-Erweiterung und wird 8 Sekunden lang wiederholt, und die Cantor-Erweiterung wird 30 MS lang verwendet. Die größte und offensichtlichste Rolle der Cantor-Erweiterung besteht darin, zu bestimmen, ob der Zustand wiederholt wird. Es handelt sich tatsächlich um eine Hashing-Technik.

1. Cantor-Erweiterung

[Problemhintergrund] Für eine Menge {1,2,3,4,...,n} mit n verschiedenen Elementen wird die Gesamtanordnung von klein nach groß sortiert (dasselbe gilt von groß nach klein). Offensichtlich hat sie n ! Artikel. Wenn n=4, dann sind es 4! =4×3×2×1=24 Artikel.

Mit den natürlichen Zahlen 1, 2, 3, 4, -----n! Eins-zu-eins-Korrespondenz. Beispielsweise sieht die vollständige Anordnung der vier Zahlen 1 bis 4 in Wörterbuchreihenfolge wie folgt aus:

1234: 1.
1243: 2.
1324: 3.
1342: 4.
1423: 5.
1432: 6
2134: Der 7.
2143: Der 8.
2314: Der 9.
2341: Der 10.
2413: Der 11.
2431: Der 12
3124: Der 13.
3142: Der 14.
3214: Der 15.
3241: Der 16.
3412: Der 17.
3421: Der 18
4123: Der 19.
4132: Der 20.
4213: Der 21.
4231: Der 22.
4312: Der 23.
4321: Der 24

【Hauptproblem】

Beispiel 1: Wie ist die Reihenfolge von 4132? Wenn Sie sich das oben Gesagte ansehen, werden Sie wissen, dass die Antwort lautet: 20. Wie wird es also berechnet?

Lösung: Es gibt insgesamt 4 Zahlen, also n=4.ans:=0;

Die erste Zahl ist 4. Es gibt drei Zahlen, die kleiner als 4 sind und noch nie vorgekommen sind: 1, 2 und 3. Dann ans:=ans+ 3*(n-1)!

Also ans:= ans+ 3* 3*2*1 =18

Die zweite Zahl ist 1, und die Zahl, die kleiner als 1 ist und noch nie vorgekommen ist, ist 0. Dann ans:=ans+ 0 * (n-2)!, dann bleibt ans unverändert.

Die dritte Zahl ist 3. Die Zahl, die kleiner als 3 ist und noch nie vorgekommen ist, ist 1:2. Dann ans:=ans+ 1* (n-3)!, dann ans:=18+1* 1=19

Die vierte Zahl ist 2. Die Zahl, die kleiner als 2 ist und noch nie vorgekommen ist, ist 0. Dann bleibt ans unverändert. Tatsächlich müssen wir uns nicht mit dem letzten befassen. Alle größeren und kleineren sind schon einmal aufgetaucht. Warum ist ans am Ende gleich 19? ? Das bedeutet, dass davor 19 Permutationen stehen, dann ist 4132 selbst die 20. Zahl (letzte ans:=ans+1)

Beispiel 2: Welche Reihenfolge hat 45231?

        4 5 2 3 1 

Antwort:= 3*4! + 3*3! + 1*2! + 1*1! + 0*0! + 1 =94

üben

Frage 1: Finden Sie die Position von 35142 in der Reihenfolge 1 bis 5 vom kleinsten zum größten?

Frage 2: Finden Sie die Position von 64827315 in der Anordnung von klein nach groß von 1 bis 8?

Frage 3: Finden Sie die Position von 35142 in der Reihenfolge von groß nach klein von 1 bis 5?

Frage 4: Finden Sie die Position von 64827315 in der Anordnung von groß nach klein von 1 bis 8?

2. Inverse Operation der Cantor-Entwicklung

Ich habe das vorherige div in / geändert. div ist das arithmetische Symbol der Pascal-Sprache und / ist C++. Die Bedeutung ist dieselbe, nämlich den Quotienten zweier Ganzzahlen nach der Division zu ermitteln (wobei der Rest ignoriert wird).

Beispiel 3: Finden Sie die 96. Permutation unter allen Anordnungen von 1 bis 5 vom kleinsten zum größten?

Lösung: Nehmen wir zunächst an, dass x1x2x3x4x5 (x1 ist gleich? Weiß nicht) 96-1 verwenden, um 95 zu erhalten, was bedeutet, dass vor x1x2x3x4x5 95 Sequenzen vorhanden sind.

Die erste Zahl x1, vorausgesetzt, dass x1 derzeit k Zahlen hat, die kleiner als x1 sind und noch nie zuvor aufgetreten sind

k:= 95 / (n-1)! = 95 / 24=3, das heißt, es gibt 3 Zahlen, die kleiner als x1 sind und noch nie zuvor aufgetreten sind, dann ist x1=4.

Aus 95 wird 95-3×24=23

Die zweite Zahl x2, vorausgesetzt, dass x2 derzeit k Zahlen hat, die kleiner als x2 sind und noch nie zuvor aufgetreten sind

k:= 23 / (n-2)! = 23 / 6 = 3, das heißt, es gibt 3 Zahlen kleiner als x2, die vorher noch nicht erschienen sind, dann ist x2=5. (Es gibt 3 Zahlen kleiner als x2, das heißt 4 , aber 4 kam schon vorher vor, also ist es 5)

Aus 23 wird 23 – 3 * 6 = 5

Teilen Sie 2 durch 5 für die dritte Zahl! Sie erhalten 2 mit einem Rest von 1. Dann ist die dritte Zahl die drittkleinste Zahl 3, die noch nicht erschienen ist (5 wird zu 1)

Teilen Sie 1 durch 1 für die vierte Zahl! Sie erhalten 1 mit einem Rest von 0. Dann ist die vierte Zahl die zweitkleinste Zahl 2, die noch nicht erschienen ist.

Die fünfte Zahl ist diejenige, die am Ende nicht aufgetaucht ist.

Die Nummer ist also 45321

üben:

Frage 5: Sortieren Sie die 8 Zahlen von klein nach groß. Finden Sie die 28017. Anordnung?

Lösung: Angenommen, x1x2x3x4x5x6x7x8 (x1 ist gleich? Weiß nicht), verwenden Sie 28017-1, um 28016 zu erhalten, was bedeutet, dass vor x1x2x3x4x5x6x7x8 28016 Sequenzen vorhanden sind.

Die erste Zahl x1, vorausgesetzt, dass x1 derzeit k Zahlen hat, die kleiner als x1 sind und noch nie zuvor aufgetreten sind, dann ist k= 28016 / (8-1)! = 28016 / 5040=5 (28016 dividiert durch 5040 ist gleich 5, nicht logischer Rest), das heißt, es gibt 5 Zahlen, die kleiner als x1 sind und noch nie zuvor aufgetreten sind, dann wird x1=6,28016 zu 28016 - 5040*5=2816

Die zweite Zahl x2, vorausgesetzt, dass x2 derzeit k Zahlen hat, die kleiner als x2 sind und noch nie zuvor aufgetreten sind, dann ist k = 2816/ (n-2)! = 2816 / 720 = 3, das heißt, es gibt 3 kleinere Zahlen als x2 Und es gibt keine Zahl, die zuvor aufgetreten ist, dann wird aus x2=4,2816 2816– 3 * 720 = 656

Der Schlüssel liegt darin, die dritte Zahl zu verstehen und zu verstehen, warum sie 8 ist.

Die dritte Zahl x3, vorausgesetzt, dass x3 derzeit k Zahlen hat, die kleiner als x3 sind und noch nie zuvor aufgetreten sind, dann ist k = 656/ (n-2)! = 656 / 120 = 5, das heißt, es gibt 5 kleinere Zahlen als x3 Und es gibt keine Zahl, die zuvor aufgetreten ist, dann x3=? .

1 (ist noch nicht erschienen)

2 (ist noch nicht erschienen)

3 (ist noch nicht erschienen)

4 (aufgetreten)

5 (ist noch nicht erschienen)

6 (erschien)

7 (ist noch nicht erschienen)

8 (ist noch nicht erschienen)

1, 2, 3, 5, 7 (diese fünf sind noch nicht erschienen), also lautet die Antwort x3=8

von scy

Supongo que te gusta

Origin blog.csdn.net/aliyonghang/article/details/128261637
Recomendado
Clasificación