[Kenchon-Buch zu Python] -Kapitel 3- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!

Einführung

Dieser Artikel ist Kenchons Buch, das viele Erklärungen zur wettbewerbsfähigen Programmierung enthält. ** Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen(けんちょんさん本)**について、掲載コードをPythonに翻訳したものを、備忘のためまとめたものです。

Auf dieser Seite stellen wir den Inhalt von Kapitel 3 vor! Bitte vergib mir, wenn es irgendwelche Fehler gibt.

Auf den folgenden Seiten finden Sie Links zu anderen Kapiteln. [Inhaltsverzeichnis] https://qiita.com/KevinST/items/002676619a583754bf76

code3.1 Lineare Suchmethode

Es ist derjenige, der "die Reihenfolge von vorne überprüfen"!

code3-1.py


#Eingaben empfangen
N, v = map(int, input().split())
a = list(map(int, input().split()))

#Lineare Suche
exist = False
for i in range(N):
    if a[i] == v:
        exist = True

#Ergebnisausgabe
if exist:
    print("Yes")
else:
    print("No")

[Eingabebeispiel] 5 1 2 3 4 1 11 [Ausgabebeispiel] Yes

code3.2 Ruft den "Index" ab, der ein bestimmtes Element enthält

Jetzt ist es Zeit, den Index zu erhalten.

code3-2.py


#Eingaben empfangen
N, v = map(int, input().split())
a = list(map(int, input().split()))


##Lineare Suche##
found_id = -1
for i in range(N):
    if a[i] == v:
        found_id = i
        break
print(found_id)

[Eingabebeispiel] 4 2 0 2 -1 11 [Ausgabebeispiel] 1

Für die Nummer "2" a[0]: 0 a[1]: 2 ... Ich werde es suchen. Diesmal ist a [1] = 2, und die Zahl, nach der Sie hier gesucht haben, entspricht a [i]. Hier brechen und ausgeben.

code3.3 Finden Sie den Mindestwert

code3-3.py


#Eingaben empfangen
N = int(input())
a = list(map(int, input().split()))


##Lineare Suche##
#Setzen Sie den Anfangswert des Minimalwerts auf "unendlich".
min_value = float("inf")
for i in range(N):
    if a[i] < min_value:
        min_value = a[i]
print(min_value)

[Eingabebeispiel] 4 0 2 -1 11 [Ausgabebeispiel] -1

Ich konnte den kleinsten Wert "-1" finden. Der Berechnungsbetrag beträgt $ O (N) $.

code3.4 Ermitteln Sie den Mindestwert der Paarsumme (Bereich von K oder mehr).

Wählen Sie ein Element aus Array a und ein Element aus Array b aus und fügen Sie sie hinzu, um eine Zahl zu erstellen. Wählen Sie unter diesen die mit K oder mehr und die kleinste.

code3-4.py


#Eingaben empfangen
N, K = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

#Lineare Suche
min_value = float("inf")
for i in range(N):
    for j in range(N):
        #Wenn die Summe kleiner als K ist, verwerfen Sie sie
        if a[i] + b[j] < K:
            continue
        #Update mindestens
        if a[i] + b[j] < min_value:
            min_value = a[i] + b[j]
print(min_value)

[Eingabebeispiel] 4 10 1 2 5 6 7 12 16 22 [Ausgabebeispiel] 12

code3.5 Bestimmt, ob das i-te Element in der durch das ganzzahlige Bit dargestellten Teilmenge enthalten ist

Es ist eine Vorbereitung für die sogenannte Bit-Vollsuche. Ich habe auch Ein- und Ausgänge hinzugefügt, um den Betrieb zu überprüfen.

code3-5.py


#Eingaben empfangen
i = int(input())
bit = int(input(), 2)

#Überprüfen Sie, ob die durch Bit dargestellte Teilmenge das i-te Element enthält
if bit & (1 << i):
    print("Yes")
else:
    print("No")

[Eingabebeispiel] 1 1010 [Ausgabebeispiel] Yes

Die vollständige Bit-Suche ist eine der vollständigen Suchmethoden und kann alle EIN / AUS-Muster auflisten. Einzelheiten finden Sie in Kencho-sans Buch und im Online-Kommentar.

Für diejenigen, die "Bi, Bit ... Nein, es ist schwierig> <" sagen, können Sie die Python-Funktion verwenden, um alle zu suchen, ohne über Bit nachzudenken. (Siehe "3.6 Ergänzung")

code3.6 Vollständige Suchmethode unter Verwendung von Bits für das Teilsummenproblem

Es ist eine etwas vollständige Suche.

code3-6.py


#Eingaben empfangen
N, W = map(int, input().split())
a = list(map(int, input().split()))

#Bit ist 2^Bewegt sich durch n verschiedene Teilmengen
exist = False
for bit in range(2**N):
    #Die Summe der in der Teilmenge enthaltenen Elemente
    sum_val = 0
    for i in range(N):
        #i-tes Element a[i]Ist in der Teilmenge enthalten
        if bit & (1 << i):
            sum_val += a[i]

    #sum_Ob val mit W übereinstimmt
    if sum_val == W:
        exist = True

if exist:
    print("Yes")
else:
    pritn("No")

[Eingabebeispiel] 4 10 1 9 100 200 [Ausgabebeispiel] Yes

Betrachten Sie die Teilmenge (1,9). Seine Summe ist 10, also passt es zu W. Die Antwort lautet also "Ja".

code3.6 Ergänzung: Alle Aufzählungen mit itertools.combinations

bisschen ist es schwer! Für diejenigen, die sagen, haben wir eine andere Version vorbereitet. Als Prozedur

    1. Entscheiden Sie, wie viele Teile aus der Sequenz entfernt werden sollen (0 bis N Teile).
  1. Beachten Sie, dass die durch 1 bestimmte Zahl aus dem Array von N Elementen entnommen wird. Listen Sie alle zu extrahierenden Muster auf 0: [] 1 Stück: [a0], [a1], [a2] ... 2 Stücke: [a0, a1], [a0, a2], ..., [aN-1, aN] ** * Verwenden Sie die Kombinationsfunktion in den praktischen Python-Bibliotheks-Itertools **

Python ist gut! (Werbung)

code3-6-another_ver.py


from itertools import combinations
N, W = map(int, input().split())
a = list(map(int, input().split()))

exist = False

#Bestimmen Sie die Anzahl der abzurufenden Elemente (num_of_a): 0 bis N.
for num_of_a in range(N+1):
    #Von a, alle num_of_Extrahieren Sie Elemente mit einer Extraktionsmethode und speichern Sie sie im variablen Muster
    for pattern in combinations(a, num_of_a):
        #Summe berechnen
        sum_val = sum(list(pattern))
        #sum_Ob val mit W übereinstimmt
        if sum_val == W:
            exist = True

if exist:
    print("Yes")
else:
    pritn("No")

[Eingabebeispiel] 4 10 1 9 100 200 [Ausgabebeispiel] Yes

Wenn Sie mehr über itertools erfahren möchten, kann die folgende Seite hilfreich sein. Wenn Sie es lesen, werden Sie von der Bequemlichkeit der Python-Standardbibliothek beeindruckt sein! Wow, itertools

Klicken Sie hier für Kapitel 4 https://qiita.com/KevinST/items/f846d57e56242c6e1293

Recommended Posts

[Kenchon-Buch zu Python] -Kapitel 3- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
[Kenchon-Buch zu Python] -Kapitel 2- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
[Kenchon-Buch zu Python] -Kapitel 4- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
[Kenchon-Buch zu Python] "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben! -Inhaltsverzeichnis-
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --1.3 URLify
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel - 2,6-mal
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --2.4 Aufteilen der Liste
Beispiel für die Beantwortung von Python-Code-Antworten --2.7 Schnittknoten
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel - 1,8 "0" -Matrix
Beispiel für eine Python-Codelösung --1.6 Komprimierung von Zeichenketten
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --3.1 Drei Stapel
Python-Code Lösungsbeispiel --1.7 Matrixrotation
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --1.4 Satzfolge
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Beispiel für eine Python-Codelösung --2.8 Schleifenerkennung
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --- Elemente zwischen 2.3 entfernt
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --2.1 Entfernen Sie doppelte Elemente
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --1.9 Drehung der Zeichenkette
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code Lösungsbeispiel --1.1 Doppelte Zeichenfolge
Beispiel für die Antwort auf den Python-Code --2.2 Geben Sie Kth von hinten zurück
Beispiel für die Antwort auf den Python-Code --1.2 Zählen Sie die Anzahl der gleichen Zeichen
Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --2.5 Summe zweier in der Liste angezeigter Zahlen
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich möchte den EDINET-Code und die Wertpapiernummer zuordnen
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Ich habe versucht, den unter "Abrufen von Bildern von der Flickr-API mit Python" (Teil 2) veröffentlichten Vorlagencode zu überarbeiten.