In der Ehe erlernte logische Symbole (und Implementierungsbeispiele in Python)

Demütige Teilnehmer

Sie arbeiten hart, um zu heiraten. Das jährliche Einkommen, das Sie von der anderen Partei erwarten, beträgt über 8 Millionen Yen. Ich würde gerne an einer Hochzeitsfeier teilnehmen, aber ich halte es nicht für sinnvoll, daran teilzunehmen, es sei denn, ** mindestens einer der Teilnehmer ** hat ein Jahreseinkommen von 8 Millionen Yen oder mehr. Beantworten Sie angesichts einer Liste der Teilnehmer und ihres Jahresgehalts nicht, ob eine Teilnahme sinnvoll ist.

Logisches Symbol

Nehmen wir an, die Teilnehmerzahl beträgt $ M $ und das jährliche Einkommen beträgt $ Y $ 10.000. Die obige Bedingung verwendet logische Symbole.

\exists M[Y\geq800]

Kann ausgedrückt werden als. $ \ existiert $ bedeutet "es gibt". Der Punkt ist ** "Wenn auch nur eine Person ein Jahreseinkommen von 8 Millionen oder mehr hat, ist es sofort in Ordnung" **.

Programmbeispiel

def main1(M):
    for Y in M:
        if Y >= 800:
            return "Teilnahme"
    return "Nicht teilnehmen"

print(main1([800,900,1000,1100]))#Teilnahme
print(main1([500,600,700,800]))#Teilnahme
print(main1([400,500,600,700]))#Nicht teilnehmen

Sie können die Teilnehmer der Reihe nach ansehen und wenn Sie eine Person von 8 Millionen Yen finden, können Sie die Suche dort stoppen. Es ist das gleiche, egal wie viele Leute nach einem sind.

Gierige Teilnehmer

Nach vielen Erfahrungen mit der Eheparty werden Sie immer bullischer. Ich bin zu dem Schluss gekommen, dass es keinen Sinn macht, daran teilzunehmen, wenn nicht alle Teilnehmer ** ein Jahreseinkommen von 8 Millionen Yen oder mehr haben.

Logisches Symbol

In diesem Fall,

\forall M[Y\geq800]

Kann ausgedrückt werden als. $ \ Forall $ bedeutet "über alles". Wenn Sie jedoch versuchen, dies im Programm so zu implementieren, wie es ist, wird es ein wenig mühsam sein, so dass wir eine kleine logische Konvertierung durchführen werden. Der obige Satz ist

\lnot(\lnot \forall M[Y\geq800])

Ist der gleiche Wert wie. $ \ Lnot $ steht für Negation. Bei einer Zwei-Wahl-Frage entspricht ** "not'not A '" ** ** "" A ". ** $ \ lnot $ kann durch Tauschen von $ \ forall $ nach rechts verschoben werden und $ \ existiert $ **

\lnot(\lnot \forall M[Y\geq800])\\
\Leftrightarrow \lnot(\exists M\lnot[Y\geq800])\\
\Leftrightarrow \lnot(\exists M[Y<800])

Die Konvertierung wird hergestellt. Der Punkt ist ** "Wenn sogar eine Person ein Jahreseinkommen von weniger als 800 hat, wird sie sofort ausfallen" **.

Programmbeispiel

def main2(M):
    for Y in M:
        if Y < 800 :
            return "Nicht teilnehmen"
    return "Teilnahme"

print(main2([800,900,1000,1100]))#Teilnahme
print(main2([500,600,700,800]))#Nicht teilnehmen
print(main2([400,500,600,700]))#Nicht teilnehmen

Die Beurteilung der Teilnahme wird ebenfalls strenger.

Unmotivierter Planer

Sie, die zu oft an der Hochzeitsfeier teilgenommen haben, haben sich der Planungsseite zugewandt, bevor Sie es wussten. Wir haben uns entschlossen, mehrere Gruppen zu organisieren, um den Bedürfnissen der Teilnehmer gerecht zu werden. Sie sind jedoch nicht motiviert, daher dachte ich, es wäre gut, wenn es ** mindestens eine ** Gruppe mit ** mindestens einem ** Teilnehmer mit einem Jahreseinkommen von 8 Millionen Yen oder mehr gäbe. Im schlimmsten Fall reicht nur eine Person! Was für ein unmotivierter Planer! Teilnehmer sind keine Sammlung.

Die Menge der Gruppen sei $ G $

\exists G \exists M[Y\geq800]

Es wird sein. Diese Implementierung ist einfach und es ändert sich nichts daran zu sagen, dass selbst eine Person ein Jahreseinkommen von 8 Millionen oder mehr haben sollte.

def main3(G):
    for M in G:
        for Y in M:
            if Y >= 800:
                return "Bestehen"
    return "Fehler"   

print(main3([[400,500,600,700],[500,600,700,800]]))#Bestehen
print(main3([[400,500,600,800],[500,600,700,800]]))#Bestehen
print(main3([[300,400,500,600],[800,900,1000,1100]]))#Bestehen
print(main3([[800,900,1000,1100],[900,1000,1100,1200]]))#Bestehen

Perfekter Planer

Nachdem Sie Beschwerden über zu viel Text erhalten hatten, haben Sie sich entschlossen, dieses Mal eine perfekte Aufstellung vorzubereiten. ** Alle Teilnehmer aller Gruppen verdienen mehr als 8 Millionen Yen pro Jahr **.

\forall G \forall M[Y \geq 800]\\
\Leftrightarrow \lnot(\lnot \forall G \forall M[Y \geq 800])\\
\Leftrightarrow \lnot(\exists G \lnot(\forall M[Y \geq 800]))\\
\Leftrightarrow \lnot(\exists G \exists M[Y < 800])\\

Wenn auch nur eine Person ein Jahreseinkommen von weniger als 800 hat, wird es sofort ausfallen. Die Implementierung ist genauso einfach.

def main4(G):
    for M in G:
        for Y in M:
            if Y < 800:
                return "Fehler"
    return "Bestehen"   

print(main4([[400,500,600,700],[500,600,700,800]]))#Fehler
print(main4([[400,500,600,800],[500,600,700,800]]))#Fehler
print(main4([[300,400,500,600],[800,900,1000,1100]]))#Fehler
print(main4([[800,900,1000,1100],[900,1000,1100,1200]]))#Bestehen

Realistischer Planer Teil 1

Die perfekte Aufstellung wurde gut aufgenommen, aber es war zu schwierig, Leute zusammenzubringen und stieß bald an ihre Grenzen. Diesmal habe ich über einen solchen Plan nachgedacht.

"Es gibt mindestens ein ** Traumteam ** in der Gruppe, in dem alle Mitglieder mehr als 8 Millionen pro Jahr verdienen."

\exists G \forall M[Y \geq 800]\\
\Leftrightarrow \exists G \lnot(\lnot \forall M[Y \geq 800])\\
\Leftrightarrow \exists G \lnot(\exists M[Y < 800])\\

Es ist schwierig, dies in einer Schleife zu implementieren, wie es früher war, aber es kann einfach durch Aufteilen der Funktion implementiert werden.

def main5(M):
    for Y in M:
        if Y < 800:
            return False
    return True

def main6(G):
    for M in G:
        if main5(M):
            return "Bestehen"
    return "Fehler"

print(main6([[400,500,600,700],[500,600,700,800]]))#Fehler
print(main6([[400,500,600,800],[500,600,700,800]]))#Fehler
print(main6([[300,400,500,600],[800,900,1000,1100]]))#Bestehen
print(main6([[800,900,1000,1100],[900,1000,1100,1200]]))#Bestehen

Realistischer Planer Teil 2

Mit diesem Traumteamplan begannen sich die Teilnehmer, die von Baba angezogen wurden, selbstverständlich zu beschweren. Sie haben sich also den nächsten Plan ausgedacht.

"Wir garantieren, dass jedes Team mindestens eine Person mit einem Jahreseinkommen von 8 Millionen oder mehr hat."

\forall G \exists M[Y \geq 800]\\
\Leftrightarrow \lnot ( \lnot \forall G \exists M[Y \geq 800])\\
\Leftrightarrow \lnot (\exists G \lnot(\exists M[Y \geq 800]))\\
def main7(M):
    for Y in M:
        if Y >= 800:
            return False
    return True

def main8(G):
    for M in G:
        if main7(M):
            return "Fehler"
    return "Bestehen"

print(main8([[400,500,600,700],[500,600,700,800]]))#Fehler
print(main8([[400,500,600,800],[500,600,700,800]]))#Bestehen
print(main8([[300,400,500,600],[800,900,1000,1100]]))#Fehler
print(main8([[800,900,1000,1100],[900,1000,1100,1200]]))#Bestehen

Damit war endlich ein stabiler Betrieb möglich. Ich bin glücklich.

Bonus

Wenn Sie die beiden letztgenannten Fälle in einer Funktion ausführen möchten, müssen Sie eine separate Bool-Variable für das Flag vorbereiten.

\exists G \forall M[Y \geq 800]\\
\Leftrightarrow \exists G \lnot(\lnot \forall M[Y \geq 800])\\
\Leftrightarrow \exists G \lnot(\exists M[Y < 800])\\
def main9(G):
    for M in G:
        fail_at_least = 0
        for Y in M:
            if Y < 800:
                fail_at_least = 1
        if not fail_at_least:
            return "Bestehen"
    return "Fehler" 
\forall G \exists M[Y \geq 800]\\
\Leftrightarrow \lnot ( \lnot \forall G \exists M[Y \geq 800])\\
\Leftrightarrow \lnot (\exists G \lnot ( \exists M[Y \geq 800]))\\
def main10(G):
    for M in G:
        success_at_least = 0
        for Y in M:
            if Y >= 800:
                success_at_least = 1
        if not success_at_least:
            return "Fehler"
    return "Bestehen" 

Da die Flag-Bedingungen leicht zu verwechseln sind, versuche ich persönlich, Variablennamen wie "fail_at_least" (mindestens einmal fehlgeschlagen) anzugeben, auch wenn der Name lang ist.

Recommended Posts

In der Ehe erlernte logische Symbole (und Implementierungsbeispiele in Python)
Sortieralgorithmus und Implementierung in Python
Warteschlangen- und Python-Implementierungsmodul "deque"
Deep Learning von Grund auf neu - Kapitel 4 Tipps für die in Python erlernte Theorie und Implementierung von Deep Learning
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
RNN-Implementierung in Python
ValueObject-Implementierung in Python
SVM-Implementierung in Python
Führen Sie die Sortierimplementierung / Berechnungsmengenanalyse zusammen und experimentieren Sie in Python
Mit Python erlerntes Refactoring (Basic)
Python-Kurs zum Lernen mit Chemoinfomatik
Stapel und Warteschlange in Python
Implementierung eines neuronalen Netzwerks in Python
Unittest und CI in Python
Maxout Beschreibung und Implementierung (Python)
Implementierung der schnellen Sortierung in Python
Was ich in Python gelernt habe
In Python gelernter Zeichencode
Python-Funktionen mit Chemoinfomatik gelernt
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Implementierung der HMM-Parameterschätzung in Python
Implementierung einer gemischten Normalverteilung in Python
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Implementierung eines Lebensspiels in Python
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Ich habe versucht, den Prozess mit Python zu studieren
Funktionssynthese und Anwendung in Python
Grundlegende ITK-Verwendung mit Python gelernt
Exportieren und Ausgeben von Dateien in Python
Implementierung der ursprünglichen Sortierung in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Erstellen und lesen Sie Messagepacks in Python
Implementierung des Partikelfilters durch Python und Anwendung auf das Zustandsraummodell
Überlappende reguläre Ausdrücke in Python und Java
Unterschied in der Authentizität zwischen Python und JavaScript
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
AM-Modulation und Demodulation mit Python Part 2
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Implementieren Sie den FIR-Filter in Python und C.
Unterschiede zwischen Python- und Java-Syntax
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Suchen und spielen Sie YouTube-Videos mit Python
Unterschied zwischen @classmethod und @staticmethod in Python
Python-Datenstruktur und interne Implementierung ~ Liste ~
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Schreiben Sie die O_SYNC-Datei in C und Python
Umgang mit "Jahren und Monaten" in Python