← strona głównaProgramowanie (Програмування)

Czym jest NP-trudność?

NP-trudność – to klasa zadań, w której znalezienie rozwiązania jest niezwykle trudne, ale sprawdzenie gotowej odpowiedzi można szybko. Przykłady: problem komiwojażera, optymalny harmonogram, kryptografia. Takie zadani...

Ta treść została automatycznie przetłumaczona z ukraińskiego.
NP-trudność - to klasa problemów, dla których bardzo trudno znaleźć rozwiązanie, ale łatwo sprawdzić poprawność już gotowego. Innymi słowy, jeśli zgadłeś odpowiedź, to można ją szybko zweryfikować, ale sam proces poszukiwania zajmuje niezwykle dużo czasu.
Przykłady problemów NP-trudnych:
  • Problem komiwojażera - jak znaleźć najkrótszą trasę, która przechodzi przez wszystkie miasta.
  • Plan zajęć - stworzyć optymalny plan tak, aby wszyscy nauczyciele, sale i studenci zgrali się bez konfliktów.
  • Podział na podzbiory - podzielić zbiór liczb na grupy o równej sumie.
Gdzie to jest ważne w życiu codziennym:
  • Logistyka i trasy dostaw.
  • Planowanie produkcji i harmonogramów.
  • Kryptografia i bezpieczeństwo danych.
Prosty przykład w Ruby do demonstrowania idei pełnego przeszukiwania (na przykładzie podzbiorów):
# NP-trudny problem: wyszukiwanie podzbioru o wymaganej sumie
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 "Znalezione rozwiązania:"
solutions.each { |s| p s }
Wynik:
Znalezione rozwiązania:
[9, 11]
Widać tutaj od razu kilka wariantów. A jeśli zwiększyć tablicę do 20–25 liczb, liczba sprawdzeń gwałtownie wzrośnie - tak właśnie wygląda wybuch kombinatoryczny, przez który podobne problemy NP-trudne stają się praktycznie nierozwiązywalne przez przeszukiwanie.

🔥 Więcej postów

Wszystkie wpisy
Co to jest przepełnienie całkowite?
Programowanie (Програмування)15 sie '25 08:28

Co to jest przepełnienie całkowite?

Przepełnienie całkowite — to sytuacja, gdy wartość przekracza granicę typu zmiennej. Dla 32-bitow...

Co to jest plik HAR (HTTP Archive)?
Programowanie (Програмування)25 sie '25 18:23

Co to jest plik HAR (HTTP Archive)?

Plik HAR (HTTP Archive) — to format .har, który przechowuje dziennik pracy przeglądarki z siecią....

Czym jest złożoność faktorialna?
Programowanie (Програмування)16 wrz '25 19:03

Czym jest złożoność faktorialna?

Złożoność faktorialna to szybki wzrost liczby wariantów, gdy dla n elementów możliwych permutacji...

Czym jest ivar w Ruby / Rails?
Programowanie (Програмування)19 paź '25 20:12

Czym jest ivar w Ruby / Rails?

ivar w Ruby to zmienna instancji (instance variable), która jest oznaczana @. W Rails przekazuje ...

Czym różni się OAuth 1 od OAuth 2
Programowanie (Програмування)19 paź '25 20:34

Czym różni się OAuth 1 od OAuth 2

Post opisuje OAuth 1 i OAuth 2: ich historię, przeznaczenie, różnice, cechy bezpieczeństwa oraz z...

Czym jest ORM i po co jest potrzebny?
Programowanie (Програмування)26 paź '25 14:00

Czym jest ORM i po co jest potrzebny?

ORM - to technologia, która pozwala na pracę z bazami danych za pomocą obiektów kodu, upraszczają...