Niedawno przeszedłem przez bolesną zabawę polegającą na nieformalnym wyjaśnianiu koncepcji złożoności obliczeniowej młodemu utalentowanemu samoukiem, programistowi, który nigdy wcześniej nie odbył formalnego kursu algorytmów ani złożoności. Nic dziwnego, że wiele pojęć początkowo wydawało się dziwnych, ale miało sens w niektórych przykładach (PTIME, trudność, niezliczalność) , podczas gdy inne wydają się bardziej naturalne (klasyfikacja problemów poprzez redukcje, czas i przestrzeń jako zasoby, analiza asymptotyczna) . Wszystko szło świetnie, dopóki przypadkiem nie przyznałem, że SATmożna rozwiązać skutecznie * w praktyce ... I właśnie tak, zgubiłem je. Nie miało znaczenia, jak przekonywująco próbowałem argumentować za teorią, dzieciak był przekonany, że to nie wszystko, na czym polega sztuczna bzdura . Dobrze...
¯ \ _ (ツ) _ / ¯
Nie, nie miałem złamanego serca ani nie przejmowałem się tym, co myślał, nie o to chodzi w tym pytaniu. Nasza rozmowa sprawiła, że pomyślałem o innym pytaniu,
Ile naprawdę wiem o problemach, które są teoretycznie nierozwiązywalne (złożoność czasu wielobiegunowego), ale praktycznie możliwe do rozwiązania (za pomocą heurystyki, aproksymacji, rozwiązywaczy SAT itp.)?
Zrozumiałem, niewiele. Wiem, że istnieje kilka bardzo wydajnych rozwiązań SAT, które skutecznie rozwiązują ogromne przypadki, że Simplex działa świetnie w praktyce, a może jeszcze kilka problemów lub algorytmów. Czy możesz mi pomóc namalować pełniejszy obraz? Jakie dobrze znane problemy, a nawet klasy problemów należą do tej kategorii?
TL; DR: Jakie są problemy, które w praktyce można przeciwdziałać intuicyjnie? Czy istnieje (zaktualizowany) zasób, aby przeczytać więcej? Czy mamy dla nich charakterystykę? I wreszcie, jako ogólne pytanie do dyskusji, czyż nie powinniśmy?
EDYCJA 1: Próbując odpowiedzieć na moje ostatnie pytanie w dyskusji na temat takiej charakterystyki , zapoznałem się z płynną analizą algorytmów, koncepcją wprowadzoną przez Daniela Spielmana i Shang-Hua Tenga w [1], która nieustannie interpoluje między najgorszym przypadkiem a analizy algorytmów w średnich przypadkach. Nie jest to dokładnie opisana powyżej charakterystyka, ale zawiera tę samą koncepcję i uważam ją za interesującą.
[1] Spielman, Daniel A. i Shang-Hua Teng. „Płynniejsza analiza algorytmów: dlaczego algorytm simpleks zwykle zajmuje czas wielomianowy”. Dziennik ACM (JACM) 51, nr. 3 (2004): 385–463.