Jak pokonać króla po 66 latach? Matematyczny przewrót w teorii najkrótszej ścieżki

Za każdym razem, gdy uruchamiasz Google Maps, by znaleźć trasę do nowej kawiarni, Twój telefon wykonuje matematyczny taniec, którego kroki opracowano w 1959 roku.

Przez ponad sześć dekad algorytm Dijkstry był niekwestionowanym władcą dróg, światłowodów i rezerwacji lotniczych. Aż do teraz, kiedy grupa naukowców z Chin udowodniła, że przez wiele lat wszyscy zadawaliśmy złe pytanie.

Certyfikat nietykalności

Algorytm Dijkstry to fundament informatyki. Jest tak dobry, że jeszcze w 2024 roku Robert Tarjan (legenda teorii grafów, laureat Nagrody Turinga w 1986 roku) wraz ze współpracownikami zdobył prestiżową nagrodę na konferencji FOCS za udowodnienie, że Dijkstra jest optymalny. Oznaczało to, że matematycznie nie da się znaleźć najkrótszej ścieżki szybciej. Wydawało się, że temat jest zamknięty.

Jednak zaledwie osiem miesięcy później zespół z Uniwersytetu Tsinghua pod kierownictwem Rana Duana opublikował artykuł, który zburzył ten mur. To praca z 2025 roku, ale uznaliśmy, że temat ciekawy, w sam raz na weekend.

Pułapka definicji: co właściwie liczymy?

Jak to możliwe, że ktoś pobił algorytm uznany za „najlepszy z możliwych”? Okazało się, że Tarjan i cała reszta świata wpadli w pułapkę definicji.

Dowód na optymalność Dijkstry zakładał, że algorytm musi nie tylko podać odległość, ale też wyprowadzić wszystkie punkty na trasie posortowane według dystansu. Grupa z Tsinghua zauważyła coś, co w akademickich kuluarach przyjmowano już od 1984 roku: znalezienie najkrótszej ścieżki wcale nie wymaga sortowania wszystkiego po drodze. Problem brzmi „znajdź odległość”, a nie „posortuj miasto”.

Nowa granica prędkości

Chiński zespół połączył stare metody (algorytm Bellmana-Forda) z nowatorskim trikiem „rekurencyjnego częściowego porządkowania”. Zamiast sprawdzać każdą uliczkę po kolei, zaczęli grupować węzły i badać tylko ich „reprezentantów”. Wynik to nowa złożoność obliczeniowa. To pierwszy taki wyłom w „suficie” wydajności wyznaczania trasy od dekad.

Warto jednak postawić tu ważną gwiazdkę: to odkrycie to przede wszystkim trzęsienie ziemi w teorii algorytmów. W świecie rzeczywistym – tym, w którym działają serwery Google czy systemy routingowe (bo nie tylko o nawigację tu chodzi, także wyznaczanie tras pakietów danych i wiele więcej) – od dawna rzadko używa się „czystego” Dijkstry. Inżynierowie stosują tam heurystyki (jak A*; jeden z najpopularniejszych algorytmów heurystycznych wyszukiwania ścieżki w grafie, stosowany powszechnie w nawigacji GPS, ale też np. w sztucznej inteligencji w grach wideo), hierarchie grafów i zaawansowany precomputing, które w praktycznych zastosowaniach i tak wykraczają poza ramy tego odkrycia. Chiński zespół udowodnił jednak coś ważniejszego: matematyczny mur, który uważaliśmy za nieprzekraczalny, właśnie runął.

Lekcja dla nas wszystkich

Ta historia to coś więcej niż ciekawostka dla programistów. To mocna lekcja o tym, jak ramy, w których osadzamy problem, stają się naszymi ograniczeniami. Dijkstra był najlepszy w rozwiązywaniu zadania „najkrótsza ścieżka z posortowanym wynikiem”. Świat potrzebował po prostu „najkrótszej ścieżki”.

Traktowaliśmy te dwa problemy jako jedność przez dekady tylko dlatego, że nikt nie zapytał: „czy to sortowanie jest nam w ogóle potrzebne?”. Najbardziej ugruntowany algorytm świata został pokonany nie przez potężniejszy procesor, ale przez kogoś, kto zakwestionował samą definicję limitu.

Największa mapa Wszechświata gotowa. Właśnie zaczyna się trzęsienie ziemi w świecie fizyki

#algorytmy #Dijkstra #googleMaps #iMagazineTech #informatyka #Nauka #nawigacja #teoriaGrafów #TsinghuaUniversity
Oh, gasp! Yet another fawning #tribute to #Dijkstra, this time for his whimsical musings on the enigma that is #APL. ✉️🌐 Because nothing screams cutting-edge computer science like an old letter from 1982 unearthed with the help of an entire committee. 🤦‍♂️📜
https://www.jsoftware.com/papers/Dijkstra_Letter.htm #ComputerScience #Nostalgia #1982Letter #HackerNews #ngated
A Letter from Dijkstra on APL

A Letter from Dijkstra on APL

2001 war ich bei einer Konferenz in Bonn dabei, bei der die Gründergeneration der Softwareentwicklung auf einer Bühne stand: Dijkstra, Wirth, Brooks, Dahl, Hoare, Kay, Gamma, Parnas und andere.

Die DVDs lagen seitdem bei mir im Regal. Jetzt sind sie auf dem Internet Archive — frei zugänglich.

https://archive.org/details/sdm_software_ionieers/

#SoftwareEngineering #Informatik #TechHistory #Dijkstra #Wirth #Programming

Talks from SD&M "Software Pioneers", Bonn, June 2001 : sd&m : Free Download, Borrow, and Streaming : Internet Archive

Recordings from the sd&m conference Pioneers and their Contribution to Software Engineering, held end of June 2001. These videos capture some of the most...

Internet Archive

always fun reading Alan Kay stories about the past

https://news.ycombinator.com/item?id=11796926

#dijkstra #cs #sweng #history

"I don't know how many of you have ever met Dijkstra, but you probably know that... | Hacker News

@[email protected]

It's so funny, if you think about it.

After all, #Dijkstra wrote
The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
So it's basically a race:

  • COBOL to cripple the LLMs
  • LLMs to cripple the global finance
🤣

#LLM #vibecoding #COBOL #AIbubble
@[email protected]

It's so funny, if you think about it.

After all, #Dijkstra wrote
The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
So it's basically a race between
  • COBOL to cripple the LLM
  • LLM to cripple the global finance
#LLM #vibecoding #COBOL #AIbubble
E.W. Dijkstra Archive: How do we tell truths that might hurt? (EWD498)

In der Softwareentwicklung begegnet dir irgendwann die Idee der Trennung von Verantwortlichkeiten - Separation of Concerns (SoC). Dieser Grundsatz stammt aus der Softwaretechnik und beschreibt das Aufteilen komplexer Systeme in kleinere Abschnitte, die jeweils nur einen bestimmten Aspekt behandeln.

https://magicmarcy.de/wie-separation-of-concerns-dir-das-leben-erleichtert

#Separation #Concerns #Aspekte #Grenzen #Struktur #Verantwortlichkeiten #Dijkstra #Programming

Modular entwickeln: Wie Separation of Concerns (SoC) dir das Leben erleichtert | magicmarcy.de

In der Softwareentwicklung begegnet dir irgendwann die Idee der Trennung von Verantwortlichkeiten – Separation of Concerns (SoC). Dieser Grundsatz stammt aus der Softwaretechnik und beschreibt das Aufteilen komplexer Systeme in kleinere Abschnitte, die jeweils nur einen bestimmten Aspekt behandeln. Der niederländische Informatiker Edsger W. Dijkstra prägte den Begriff 1974 und erklärte, dass wir Aspekte getrennt untersuchen sollten, damit wir uns jeweils auf eine Sache konzentrieren können. SoC bedeutet also nicht, alles zu isolieren, sondern klare Grenzen zu ziehen, damit du Effizienz, Korrektheit und Verständlichkeit separat betrachten kannst.

magicmarcy.de

I have learnt about Dijkstra using Leonardo numbers (basically like Fibonacci, but his first name was Leonardo) to virtually treat indexed array as binary tree in 1981... and my head kinda exploded:

So you can have binary tree without pointers and all this stuff! Just by knowing how far ahead you need to look into array.

https://en.wikipedia.org/wiki/Smoothsort

#permacomputing #dijkstra #programming #sort #algorithm

Smoothsort - Wikipedia

Edsger #Dijkstra, a classic software engineer who visited the U.S.S.R in the late 1970s, said in a public speech defivered in the Grand Hall of the Academy of Sciences in Leningrad that he regarded the fact that the U.S.S.R. produced #IBM computers as the biggest U.S. victory in the #ColdWar. (i a) #Byte #ByteMagazine #Anno1991