← StartseiteProgrammierung (Програмування)

Was ist NP-Komplexität?

NP-Schwierigkeit - ist eine Klasse von Aufgaben, für die es sehr schwierig ist, eine Lösung zu finden, aber einfach, die Richtigkeit einer bereits gefundenen zu überprüfen. Mit anderen Worten, wenn Sie die Antwort err...

Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
NP-Schwierigkeit - ist eine Klasse von Aufgaben, für die es sehr schwierig ist, eine Lösung zu finden, aber einfach, die Richtigkeit einer bereits gefundenen zu überprüfen. Mit anderen Worten, wenn Sie die Antwort erraten haben, können Sie sie schnell überprüfen, aber der Prozess der Suche selbst dauert extrem lange.
Beispiele für NP-schwierige Aufgaben:
  • Das Handelsreisendenproblem - wie man die kürzeste Route findet, die durch alle Städte führt.
  • Stundenplan - einen optimalen Stundenplan erstellen, sodass alle Dozenten, Räume und Studenten ohne Konflikte zusammenpassen.
  • Teilmenge - eine Menge von Zahlen in Gruppen mit der gleichen Summe aufteilen.
Wo das im echten Leben wichtig ist:
  • Logistik und Lieferwege.
  • Produktions- und Zeitplanungsplanung.
  • Kryptografie und Datensicherheit.
Ein einfaches Ruby-Beispiel zur Demonstration der Idee der vollständigen Durchsuchung (am Beispiel von Teilmengen):
# NP-schwierige Aufgabe: Suche nach einer Teilmenge mit der gewünschten Summe
numbers = [3, 7, 9, 11, 15]
target = 20

solutions = []

(1..numbers.size).each do |k|
  numbers.combination(k).each do |subset|
    solutions << subset if subset.sum == target
  end
end

puts "Gefundene Lösungen:"
solutions.each { |s| p s }
Ergebnis:
Gefundene Lösungen:
[9, 11]
Hier sind sofort mehrere Varianten sichtbar. Und wenn man das Array auf 20–25 Zahlen erhöht, steigt die Anzahl der Überprüfungen sprunghaft an - so sieht der kombinatorische Explosion aus, durch die solche NP-schwierigen Aufgaben durch vollständige Durchsuchung praktisch unlösbar werden.

🔥 Weitere Beiträge

Alle Beiträge
Was ist ein Integer-Overflow?
Programmierung (Програмування)15. Aug '25, 08:28 Uhr

Was ist ein Integer-Overflow?

Sie haben einen Zähler, der nur bis zu einer bestimmten Zahl zählen kann. Zum Beispiel ein Tasche...

Was ist eine HAR-Datei (HTTP-Archiv)?
Programmierung (Програмування)25. Aug '25, 18:23 Uhr

Was ist eine HAR-Datei (HTTP-Archiv)?

HAR-Datei (HTTArchiv) - ist ein spezielles Dateiformat .har, in dem das Protokoll der Interaktion...

Was ist faktoriale Komplexität?
Programmierung (Програмування)16. Sep '25, 19:03 Uhr

Was ist faktoriale Komplexität?

Fakultative Komplexität - ist eine Situation, in der die Anzahl der Varianten oder Kombinationen ...

Was ist ivar in Ruby / Rails?
Programmierung (Програмування)19. Okt '25, 20:12 Uhr

Was ist ivar in Ruby / Rails?

ivar - ist eine Abkürzung für instance variable (Instanzvariable). In Ruby wird sie mit @ vor dem...

Was unterscheidet OAuth 1 von OAuth 2
Programmierung (Програмування)19. Okt '25, 20:34 Uhr

Was unterscheidet OAuth 1 von OAuth 2

OAuth 1 OAuth 1 wurde Anfang der 2000er Jahre als Methode zur sicheren Zugriffsgewährung für Drit...

Was ist ORM und wozu wird es benötigt?
Programmierung (Програмування)26. Okt '25, 14:00 Uhr

Was ist ORM und wozu wird es benötigt?

Wenn wir mit Datenbanken arbeiten, müssen wir normalerweise SQL-Abfragen schreiben - Abfragen, Ei...