Inhaltsverzeichnis
Beispiel
Methode 1
Algorithmus
Ausgabe
Heim Backend-Entwicklung C++ Python-Programm zum Generieren von Lyndon-Wörtern der Länge n

Python-Programm zum Generieren von Lyndon-Wörtern der Länge n

Aug 31, 2023 pm 09:29 PM
python 生成 长度

Python-Programm zum Generieren von Lyndon-Wörtern der Länge n

In dieser Frage finden wir alle Lyndon-Wörter mithilfe einer Reihe alphanumerischer Zeichen.

Bevor wir beginnen, wollen wir zunächst die Definition des Wortes Lyndon verstehen.

  • Alle Wörter sind Lyndon-Wörter, streng lexikographisch kleiner als alle ihre Zyklen.

Hier sind Beispiele für Lyndon-Wörter.

  • ab – „ab“ ist streng lexikographisch kleiner als alle seine Permutationen „ba“.

  • 89 – Die Rotation von „89“ ist „98“, was streng lexikographisch größer als „89“ ist.

  • abc – Die Rotationen von „abc“ sind „bca“ und „cab“, die unbedingt größer als „abc“ sind.

Das Folgende sind Beispiele für Nicht-Lyndon-Wörter.

  • aaa – aaa ist ein Nicht-Linden-Wort, da alle Drehungen von „aaa“ gleich sind.

  • bca – „bca“ ist ein Nicht-Linden-Wort, da „abc“ eine kleinere Rotation hat als es,

Problemstellung- Wir erhalten ein Zeichenarray der Länge K, das alphanumerische Zeichen enthält. Zusätzlich erhalten wir n mit positiven ganzen Zahlen. Die Aufgabe besteht darin, dass wir mithilfe der im Array angegebenen alphanumerischen Zeichen alle Lyndon-Wörter der Länge n finden müssen.

Beispiel

Eintreten

chars = ['1', '3', '2'], n = 3
Nach dem Login kopieren

Ausgabe

112, 113, 122, 123, 132, 133, 223, 233
Nach dem Login kopieren

Erklärung – Es generiert alle Lydon-Wörter der Länge 3 mithilfe von Array-Zeichen.

Eintreten

 n = 2, chars = ['1', '0']
Nach dem Login kopieren

Ausgabe

01
Nach dem Login kopieren

Erklärung- „01“ ist das einzige Lyndon-Wort, das wir aus Nullen und Einsen bilden können.

Eintreten

 n = 2, chars = ['c', 'a', 'd']
Nach dem Login kopieren

Ausgabe

ac, ad, cd
Nach dem Login kopieren

Erklärung – Es werden Lyndon-Wörter der Länge 2 mit den Zeichen a, c und d generiert.

Methode 1

Wir haben einen speziellen Algorithmus zur Generierung von Linden-Wörtern, den Duval-Algorithmus.

Algorithmus

Schritt 1 – Definieren Sie den „n“-Wert, der die Länge des Lyndon-Worts darstellt, und das chars-Array, das die Zeichen enthält, die beim Erstellen des Lyndon-Worts verwendet werden sollen.

Schritt 2 – Sortieren Sie die Liste.

Schritt 3 − Initialisieren Sie die „Index“-Liste mit −1.

Schritt 4 – Iterieren Sie, bis die Indexliste nicht leer ist.

Schritt 5- Erhöhen Sie das letzte Element der „Index“-Liste um 1.

Schritt 6− Wenn list_size gleich n ist, drucken Sie den Listenwert.

Schritt 7 – Hängen Sie den Index so an die Liste an, dass seine Länge gleich n ist.

Schritt 8 – Wenn das letzte Element der Liste dem letzten Index des Arrays entspricht, entfernen Sie es aus der Liste.

Beispiel

Lassen Sie uns das Beispiel anhand der Beispieleingabe verstehen.

  • Die sortierte Liste ist ['a', 'c', 'd'].

  • Die Indexliste wird bei der ersten Iteration von [−1] auf [0] aktualisiert. Danach beträgt die Länge des Index 2 und wird zu [0, 0].

  • In der zweiten Iteration wird die Liste auf [0, 1] aktualisiert und wir finden das erste Lyndon-Wort „ac“.

  • In der dritten Iteration wird die Liste zu [0, 2] und das zweite Lyndon-Wort ist „ad“. Außerdem wird das letzte Element aus der Liste entfernt, da es gleich array_len -1 ist.

  • In der vierten Iteration wird die Liste zu [1]. [1, 1] wird später aktualisiert.

  • Bei der nächsten Iteration wird die Liste zu [1, 2] und wir finden das dritte Lyndon-Wort, „cd“.

# Input
n = 2
chars = ['c', 'a', 'd']

# sort the list
initial_size = len(chars)
chars.sort()

# Initializing the list
indexes = [-1]

print("The Lyndon words of length {} is".format(n))

# Making iterations
while indexes:
    # Add 1 to the last element of the list
    indexes[-1] += 1
    list_size = len(indexes)

# If the list contains n characters, it means we found a Lyndon word
    if list_size == n:
        print(''.join(chars[p] for p in indexes))

    # Make the list size equal to n by adding characters
    while len(indexes) < n:
        indexes.append(indexes[-list_size])

    while indexes and indexes[-1] == initial_size - 1:
        indexes.pop()

Nach dem Login kopieren

Ausgabe

The Lyndon words of length 2 is
ac
ad
cd
Nach dem Login kopieren

Zeitkomplexität− O(nlogn), da wir zuerst die „Zeichen“-Liste sortieren müssen.

Raumkomplexität− O(n), da wir n Indizes in der Liste speichern.

Der Duval-Algorithmus ist der effizienteste Weg, Lyndon-Wörter der Länge n zu generieren. Wir haben die Methode jedoch so angepasst, dass nur Array-Zeichen verwendet werden.

Das obige ist der detaillierte Inhalt vonPython-Programm zum Generieren von Lyndon-Wörtern der Länge n. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Können Python -Parameteranmerkungen Zeichenfolgen verwenden? Können Python -Parameteranmerkungen Zeichenfolgen verwenden? Apr 01, 2025 pm 08:39 PM

Alternative Verwendung von Python -Parameteranmerkungen in der Python -Programmierung, Parameteranmerkungen sind eine sehr nützliche Funktion, die den Entwicklern helfen kann, Funktionen besser zu verstehen und zu verwenden ...

Wie lösten Python -Skripte an einem bestimmten Ort die Ausgabe in Cursorposition? Wie lösten Python -Skripte an einem bestimmten Ort die Ausgabe in Cursorposition? Apr 01, 2025 pm 11:30 PM

Wie lösten Python -Skripte an einem bestimmten Ort die Ausgabe in Cursorposition? Beim Schreiben von Python -Skripten ist es üblich, die vorherige Ausgabe an die Cursorposition zu löschen ...

Wie kann ich die Python- und OCR -Technologie verwenden, um zu versuchen, komplexe Überprüfungscodes zu knacken? Wie kann ich die Python- und OCR -Technologie verwenden, um zu versuchen, komplexe Überprüfungscodes zu knacken? Apr 01, 2025 pm 10:18 PM

Die Untersuchung von Rissverifizierungscodes unter Verwendung von Python in täglichen Netzwerkinteraktionen sind ein häufiger Sicherheitsmechanismus, um eine schädliche Manipulation automatisierter Programme zu verhindern ...

Bieten Google und AWS öffentliche PYPI -Bildquellen an? Bieten Google und AWS öffentliche PYPI -Bildquellen an? Apr 01, 2025 pm 05:15 PM

Viele Entwickler verlassen sich auf PYPI (PythonpackageIndex) ...

Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Apr 01, 2025 pm 05:24 PM

Auswahl der Python-plattformübergreifenden Desktop-Anwendungsentwicklungsbibliothek Viele Python-Entwickler möchten Desktop-Anwendungen entwickeln, die sowohl auf Windows- als auch auf Linux-Systemen ausgeführt werden können ...

Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Apr 01, 2025 pm 06:27 PM

Erste Schritte mit Python: Hourglas -Grafikzeichnung und Eingabeüberprüfung In diesem Artikel wird das Problem der Variablendefinition gelöst, das von einem Python -Anfänger im Hourglass -Grafikzeichnungsprogramm auftritt. Code...

See all articles