Heim > Backend-Entwicklung > Python-Tutorial > Eine poetische Herausforderung!?

Eine poetische Herausforderung!?

DDD
Freigeben: 2024-09-18 17:41:29
Original
760 Leute haben es durchsucht

6. September 2024: Bevor wir mit der Diskussion des Problems selbst beginnen, werfen wir einen Blick auf die Hintergrundgeschichte. Eine Herausforderung, eine offene Mathematik-Herausforderung in einem Buch.
Ein altes Buch aus dem Jahr 1984 in der Bibliothek, dessen Namen ich vergessen habe, aber im Abschnitt „Mehr zu lesen …“ habe ich ein Bild von einem sehr faszinierenden Problem erhalten.
Ein, äh, poetisches Rätsel ... Ja, Sie haben es richtig gehört, ein Problem der Mathematik, das in Form eines altenglischen Gedichts geschrieben ist.
Seit meiner High School bin ich überhaupt kein Fan von Gedichten mehr, aber dieses hier hat meine Aufmerksamkeit erregt. Als ich es las, hatte ich das Gefühl, etwas verstanden zu haben, aber ich habe es nicht vollständig verstanden. Mehr als sechs Stunden damit verbringen, ein Rätsel aus einer Fabel zu verstehen, von Drachen und was auch immer. Aber eines ist mir aufgefallen: die Edelsteine. Damit Sie es vollständig verstehen, finden Sie hier das Gedicht:

**In den endlosen, wundersamen Ländern von Zopraria, wo die Sterne gelassen summen,

Und uralte Drachen bewachen den Himmel, wo Zeit und Gezeiten eins sind,

Ein weiser alter Weiser lebte ruhig, dessen Wissen alle Zeiten umspannte,

Dessen Hände könnten durch die Fäden der Magie weben, wie Dichter Reime basteln.

Eines Tages, aus den höchsten Höhen des Himmels, auf Flügeln aus Feuer und Gold,

Ein Geschenk, das dem Weisen zuteil wurde, wie Mythen und Legenden erzählen:

Ein riesiger Schatz – strahlende Edelsteine, wie Fragmente der Sterne,

Dennoch an die eigene Prophezeiung des Schicksals gebunden, mit Regeln, die so alt wie der Mars sind.

Der Himmel flüsterte zu ihm herab, eine sanfte, aber klare Botschaft:

„Teilen Sie diese leuchtenden Edelsteine ​​mit sorgfältigem Herz und Gehör in zwei Teile.

Lassen Sie beide von Ihnen gefertigten Gefäße ein nahezu gemeinsames Gewicht tragen,

Diese Harmonie zwischen ihnen herrscht in einem hellen und gerechten Gleichgewicht.

Aber höre uns, Weiser, wenn die makellose Übereinstimmung außerhalb deines Wissens verloren geht,

Verzweifeln Sie nicht bei Ihrer Suche, denn Ihre Reise soll noch nicht enden.

Denn selbst wenn das Gleichgewicht kippt, kann die Verschiebung doch geringfügig sein,

Der Himmel wird immer noch zu dir lächeln und der Segen wird dir freien Lauf lassen.“

Der Weise begann mit mutigem und weisem Herzen seine heilige Prüfung

Gefäße herzustellen, die dem gleichen ähneln, und den Sternen sein Bestes zu geben.

Die Drachen kreisten hoch oben, während die Engel im Flug innehielten,

Denn in dieser Aufgabe des Gleichgewichts liegt eine Wahrheit, so rein wie Licht.

Die Edelsteine, wie Geheimnisse aus der Vergangenheit, bevor sich der Weise wandte,

Mit jeder Entscheidung nahm das Schicksal Gestalt an und die Herzen begannen zu brennen.

Obwohl die vor uns liegende Arbeit entmutigend war, bewunderten die Stars sie trotzdem

Der Weise, der mit ruhiger Hand versuchte, das kosmische Feuer auszugleichen.

Und wie die Geschichte unter diesem endlosen Himmel ihr Ende erreichte

Ist nur denen bekannt, die suchen und es wagen, den Blick zu heben.

In den grenzenlosen Reichen von Zopraria, wo die Geschichten der alten Zeit noch existieren,

Manche sagen, der Weise denke immer noch darüber nach, sein Herz und sein Geist seien rein.

Denn in den stillen Himmeln liegt ein feines und seltenes Gleichgewicht,

Eine Harmonie, die nur diejenigen mit ruhigen Händen teilen können.**

Das ist das Gedicht, es scheint seltsam, oder? Und was macht es in einem Mathematikbuch? Dies ist kein neues Puzzle, ein Puzzle aus dem alten 17. Jahrhundert, geschrieben irgendwo im heutigen Westminster.
Nichtsdestotrotz ist die KI unser guter Freund, richtig, ich habe sie gefragt, was sie geantwortet hat, war seltsam und sieht aus, als würde selbst sie überhaupt nichts verstehen.

A Poetic Challenge !?
Es dachte, ich hätte es geschaffen, was aber nicht der Fall war. Aber was ist mit GPT-4? Lasst uns fragen, ob es einen Scheiß weiß. Es wurde mein Englischlehrer.

A Poetic Challenge !?

A Poetic Challenge !?

Okay, ich muss es selbst entschlüsseln. Lass es uns versuchen.

9. September 2024: „Teilen Sie diese leuchtenden Edelsteine ​​mit sorgfältigem Herz und Gehör in zwei Teile.

Lassen Sie beide von Ihnen gefertigten Gefäße ein nahezu gemeinsames Gewicht tragen,

Diese Harmonie zwischen ihnen herrscht in einem hellen und gerechten Gleichgewicht.

Aber höre uns, Weiser, wenn die makellose Übereinstimmung außerhalb deines Wissens verloren geht,

Verzweifeln Sie nicht bei Ihrer Suche, denn Ihre Reise soll noch nicht enden.

Denn selbst wenn das Gleichgewicht kippt, kann die Verschiebung doch geringfügig sein,

Der Himmel wird immer noch zu dir lächeln und der Segen wird dir freien Lauf lassen.“

Das ist der Hauptteil der Geschichte und lasst uns ihn entschlüsseln.
Nach einigem Brainstorming, sorry, nachdem ich mich mehr als drei Tage am Stück gequält habe, bekam ich eine Ahnung.
Edelsteine ​​können Zahlen sein, wie es heißt „mit sorgfältigem Herz und aufmerksamem Ohr“.
Gefäße mögen Mengen sein, aber das Konzept der Mengen wurde bis dahin noch nicht entdeckt, also kann es sein, dass ich mich irre.
Der obige Auszug könnte bedeuten, dass es sich um zwei Mengen gleicher Anzahl von Elementen handelt oder dass die Summe der Zahlen in der Menge gleich ist. Und wenn die Summe nicht gleich ist, wird möglicherweise die nächstgelegene angezeigt.

15. September 2024: Nach einigen komplexeren Überlegungen und der Veröffentlichung vieler ergänzender Artikel. Ich denke schon, vielleicht habe ich in diesem Gedicht den besten Gedanken von mir gefunden.
Obwohl dieses Gedicht so alt ist, konnte ich keine andere Lösung für dieses Gedicht finden. Aber ich habe die Fragen so formuliert, dass jeder sie verstehen kann, auch ich.

Die Herausforderung

Aus der Perspektive von C.S. würde ich das zuerst in Form von C.S. und später in Mathematik machen.

Wir erhalten eine Liste mit ganzen Zahlen. Unsere Aufgabe besteht darin, die Liste so in zwei Unterlisten aufzuteilen, dass die absolute Differenz ihrer Summen minimiert wird. Wenn eine perfekte Aufteilung vorliegt, müssen wir die beiden Listen zurückgeben. Andernfalls werden die beiden Listen zurückgegeben, bei denen die Summendifferenz am kleinstmöglichen ist.

Beispiel:

Input: [3, 1, 4, 2, 2]
Output: ([2, 4], [3, 1, 2])

Nach dem Login kopieren

In diesem Beispiel ergibt die Aufteilung der Liste in [3, 4] und [1, 2, 2] Summen von 7 und 5, und die absolute Differenz wird auf 2 minimiert.

Codierung

Also fangen wir mit dem Codieren an.
16. September 2024:

from itertools import combinations

def minimize_difference(lst):
    total_sum = sum(lst)
    n = len(lst)

    # Generate all possible subsets
    best_diff = float('inf')
    best_split = ([], [])

    for i in range(1, n//2 + 1):
        for subset in combinations(lst, i):
            subset_sum = sum(subset)
            other_sum = total_sum - subset_sum

            diff = abs(subset_sum - other_sum)

            if diff < best_diff:
                best_diff = diff
                best_split = (list(subset), [x for x in lst if x not in subset])

    return best_split

# Example usage
lst = [3, 1, 4, 2, 2]
result = minimize_difference(lst)
print("Split lists:", result)

Nach dem Login kopieren

Die Tatsache, dass der Code besser funktioniert als mein Gehirn, ist einfach erstaunlich.

Code-Erklärung

Das Problem, eine Liste so in zwei Unterlisten aufzuteilen, dass die absolute Differenz zwischen ihren Summen minimiert wird, ergibt sich aus einer faszinierenden mathematischen Herausforderung. Lassen Sie uns aufschlüsseln, wie der bereitgestellte Python-Code dieses Problem behebt.

  1. Das Problem verstehen:
    Das Ziel besteht darin, aus der gegebenen Liste zwei Unterlisten zu finden, deren Summe möglichst nahe beieinander liegt. Wenn eine perfekte Aufteilung vorliegt (wobei die Summen beider Unterlisten gleich sind), geben wir die beiden Unterlisten zurück. Andernfalls geben wir die Aufteilung zurück, bei der die Differenz zwischen den beiden Summen am kleinsten ist.

  2. Codestruktur:

Der Kern des Codes besteht darin, alle möglichen Kombinationen von Elementen aus der Liste zu generieren, um eine der Unterlisten zu bilden. Sobald eine Unterliste ausgewählt ist, wird die andere Unterliste automatisch aus den verbleibenden Elementen gebildet. Dann vergleichen wir ihre Summen, um die bestmögliche Aufteilung mit der minimalen Differenz zu finden.

  1. Schlüsselfunktionen und Konzepte:
  • combinations(lst, i): Dadurch werden alle möglichen Kombinationen der Länge i aus der Liste generiert. Für jede Teilmenge simuliert es eine der Unterlisten, während die übrigen Elemente die andere Unterliste bilden.

  • total_sum = sum(lst): Dies berechnet die Gesamtsumme der Liste. Es wird verwendet, um die Summe der anderen Unterliste einfach zu ermitteln, indem die Summe der aktuellen Unterliste von der Gesamtsumme subtrahiert wird.

  • best_diff = float('inf'): Wir initialisieren die Variable best_diff mit einer großen Zahl (unendlich), um den kleinsten bisher gefundenen Unterschied im Auge zu behalten. Während wir jede mögliche Aufteilung durchgehen, aktualisieren wir diesen Wert, wenn wir einen kleineren Unterschied feststellen.

  • Die beste Aufteilung finden: Für jede generierte Teilmenge berechnet der Code die Differenz zwischen den Summen der beiden Teillisten. Wenn die aktuelle Differenz kleiner als best_diff ist, wird die Aufteilung aktualisiert.

  1. Leistungsaspekte:
    Der Code verwendet die Kombinationsfunktion aus der itertools-Bibliothek, um Teilmengen unterschiedlicher Länge zu untersuchen. Während dieser Ansatz für relativ kleine Listen gut funktioniert, ist er für größere Listen aufgrund des exponentiellen Wachstums möglicher Teilmengen möglicherweise nicht optimal. Für größere Eingaben könnten effizientere Algorithmen wie dynamische Programmierung in Betracht gezogen werden.

  2. Beispielausgabe:

Im bereitgestellten Beispiel:

   lst = [3, 1, 4, 2, 2]
   result = minimize_difference(lst)
   print("Split lists:", result)
Nach dem Login kopieren

Die Funktion teilt die Liste in [2, 4] und [3, 1, 2] auf, was zu Summen von 6 bzw. 6 und einer minimalen Differenz von 0 führt, was in diesem Fall die optimale Lösung ist.

  1. Warum es gut funktioniert: Durch die Untersuchung aller möglichen Teilmengen und die Berechnung ihrer jeweiligen Differenzen stellt der Algorithmus sicher, dass wir die Aufteilung mit der kleinstmöglichen Summendifferenz finden. Dieser Brute-Force-Ansatz ist intuitiv und effektiv für mittelgroße Listen und bietet eine klare und einfache Lösung für dieses alte Rätsel.

Das, was Sie oben gesehen haben, ist ein Auszug aus meinem Tagebuch, 100 % wahr. Aber über ihre Storified-Version derselben ist eine „storifiziertere“ Version verfügbar

Das obige ist der detaillierte Inhalt vonEine poetische Herausforderung!?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage