Nie pracuję w teorii, ale moja praca wymaga od czasu do czasu czytania (i rozumienia) prac teoretycznych. Kiedy zrozumiem (zestaw) wyników, omawiam je z ludźmi, z którymi pracuję, z których większość również nie działa w teorii. Podczas jednej z takich dyskusji pojawiło się następujące pytanie:
Kiedy mówi się, że dwa podane algorytmy są „podobne”?
Co rozumiem przez „podobny”? Powiedzmy, że dwa algorytmy są podobne do siebie, jeśli można złożyć jedno z poniższych oświadczeń w dokumencie bez mylenia / irytującego recenzenta (mile widziane lepsze definicje):
Twierdzenie 1. „Algorytm , który jest podobny do algorytmu B , rozwiązuje również problem X ”
Twierdzenie 2. „Nasz algorytm jest podobny do algorytmu ”
Pozwólcie, że uczynię to nieco bardziej szczegółowym. Załóżmy, że pracujemy z algorytmami graficznymi. Najpierw niektóre niezbędne warunki, aby oba algorytmy były podobne:
- Muszą rozwiązać ten sam problem.
- Muszą mieć ten sam intuicyjny pomysł na wysokim poziomie.
Na przykład, mówiąc o przejściu przez wykres, przejściu przez pierwszą szerokość i głębokość pierwsze spełniają powyższe dwa warunki; dla obliczeń najkrótszej ścieżki, szerokość i algorytm Dijkstry spełniają powyższe dwa warunki (oczywiście na nieważonych grafach); itp.
Czy te warunki są wystarczające? Mówiąc dokładniej, załóżmy, że dwa algorytmy spełniają niezbędne warunki, aby być podobne. Czy rzeczywiście nazwałbyś ich podobnie?
- mają inną asymptotyczną wydajność?
- dla szczególnej klasy wykresy, jeden algorytm wymaga czas, podczas gdy drugi wymaga O ( n 1 / 3 ) czas?
- mają różne warunki zakończenia? (pamiętaj, rozwiązują ten sam problem)
- etap wstępnego przetwarzania różni się w dwóch algorytmach?
- złożoność pamięci jest różna w dwóch algorytmach?
Edycja: Pytanie wyraźnie zależy od kontekstu i jest subiektywne. Miałem nadzieję, że powyższe pięć warunków pozwoli na uzyskanie pewnych sugestii. Z przyjemnością zmodyfikuję pytanie i podam więcej szczegółów, jeśli zajdzie potrzeba uzyskania odpowiedzi. Dzięki!
źródło
Odpowiedzi:
Trudno jest podać nawet spójną definicję „Algorytmu A jest podobny do algorytmu B”. Po pierwsze, nie uważam, że „muszą rozwiązać ten sam problem” jest warunkiem koniecznym. Często, gdy ktoś mówi w artykule, że „algorytm z Twierdzenia 2 jest podobny do algorytmu B w Twierdzeniu 1 ”, algorytm A faktycznie rozwiązuje inny problem niż ten z B , ale ma pewne drobne modyfikacje, aby poradzić sobie z nowym problemem .ZA 2) b 1 ZA b
Ciekawym i trudnym problemem jest nawet próba ustalenia, co to znaczy, że dwa algorytmy są takie same . Zobacz artykuł „Kiedy dwa algorytmy są takie same?” http://research.microsoft.com/~gurevich/Opera/192.pdf
źródło
Częściej niż nie oznacza to, że „nie chcę szczegółowo zapisywać algorytmu B, ponieważ wszystkie interesujące szczegóły są prawie identyczne jak te w algorytmie A i nie chcę przekraczać limitu 10 stron, a mimo to termin przesyłania jest za trzy godziny. ”
źródło
Jeśli masz na myśli „podobny” w znaczeniu potocznym, myślę, że odpowiedź Jeffa wyraża to, co mają na myśli niektórzy ludzie.
W sensie technicznym zależy to od tego, na czym ci zależy. Jeśli zależy Ci na asymptotycznej złożoności czasu, różnica między rekurencją a iteracją może nie mieć znaczenia. Jeśli zależy ci na obliczalności, różnica między zmienną licznika a stosem jednego symbolu nie ma znaczenia.
Aby porównać algorytmy, pierwszym krokiem byłoby doprecyzowanie pojęcia równoważności. Intuicyjnie pozwolić się przestrzeń algorytmów i M jest przestrzeń obiektów matematycznych i s e m : → M być kodowanie funkcja y e m ( P ), to znaczy algorytmu P . Przestrzeń M może zawierać wszystko, od liczby zmiennych w algorytmie, po wykres stanu lub złożoność czasową. Nie wierzę, że istnieje absolutne pojęcie, czym może być M. Biorąc pod uwagę M.ZA M. s e m :A→M s e m (P) P. M. M. M. możemy jednak powiedzieć, że dwa algorytmy są równoważne, jeżeli jest równe s e m ( Q ) . Dodam, że uważam, że każde z pięciu wspomnianych kryteriów można sformalizować matematycznie w ten sposób.s e m (P) s e m (Q)
Jeśli chcemy mówić o algorytmie bardziej ogólnym niż inny (lub algorytmie udoskonalającym inny), nadałbym większą strukturę. Wyobraź sobie, że ( M , ⊑ ) jest zbiorem częściowo uporządkowanym, a kolejność x ⊑ y koduje, że x jest bardziej zdefiniowanym obiektem niż y . Na przykład, jeżeli M zawiera zestaw śladów algorytmu i ⊑ jest ustawiony integracji, a e m ( P ) ⊑ s e m ( P ) oznacza, że każdy ślad PM. ( M, ⊑ ) x ⊑ y x y M. ⊑ s e m (P) ⊑ s e m ( Q ) P. jest śladem . Możemy interpretować to jak mówienie, że P jest bardziej deterministyczna niż Q .Q P. Q
Następnie możemy zapytać, czy możliwe jest oszacowanie, jak blisko są dwa algorytmy. W tym przypadku wyobrażam sobie, że musi być wyposażony w miarę. Następnie możemy zmierzyć odległość między obiektami matematycznymi reprezentowanymi przez dwa algorytmy. Dalsze możliwości to mapowanie algorytmów do pomiaru przestrzeni lub przestrzeni prawdopodobieństwa i porównywanie ich przy użyciu innych kryteriów.M.
Mówiąc bardziej ogólnie, zapytam - na czym Ci zależy (w kategoriach intuicyjnych), jakie są matematyczne obiekty reprezentujące te intuicyjne właściwości, jak mogę mapować z algorytmów na te obiekty i jaka jest struktura tej przestrzeni? Zapytałbym także, czy przestrzeń obiektów ma wystarczającą strukturę, aby przyjąć pojęcie podobieństwa. Takie podejście przyjąłbym z perspektywy semantyki języka programowania. Nie jestem pewien, czy uważasz to podejście za atrakcyjne, biorąc pod uwagę bardzo różne kultury myśli w informatyce.
źródło
Zgodnie z odpowiedzią Jeffa dwa algorytmy są podobne, jeśli autor jednego z nich spodziewa się, że autor drugiego z nich może recenzować jej artykuł.
Ale żartując na bok, w społeczności teoretycznej powiedziałbym, że jaki problem algorytm A rozwiązuje, jest raczej styczny do tego, czy jest „podobny” do algorytmu B, który może rozwiązać zupełnie inny problem. A jest podobny do B, jeśli „działa” z powodu tej samej głównej idei teoretycznej. Na przykład, czy główna idea obu algorytmów polega na tym, że można rzutować dane do przestrzeni o znacznie mniejszych wymiarach, zachować normy za pomocą lematu Johnsona-Lindenstraussa, a następnie przeprowadzić wyszukiwanie siłowe? Twój algorytm jest podobny do innych algorytmów, które to robią, bez względu na to, jaki problem rozwiązujesz. Istnieje niewielka liczba ciężkich technik algorytmicznych, które można zastosować do rozwiązania wielu różnych problemów, i sądzę, że techniki te tworzą centroidy wielu zestawów „podobnych” algorytmów.
źródło
Bardzo interesujące pytanie i bardzo fajny papier Ryan!
Zdecydowanie zgadzam się z pomysłem, że ocena ogólnego podobieństwa między algorytmami jest głównie subiektywną oceną wartości. Podczas gdy z technicznego punktu widzenia istnieje wiele cech, które są ściśle obserwowane, aby decydować o podobieństwie algorytmów, ostatecznie jest to również kwestia osobistego gustu. Postaram się opisać znaczenie obu stron tej samej monety, odnosząc się do poszczególnych punktów twojego pytania:
Z technicznego punktu widzenia:
Co sprawia, że algorytmy są podobne / różne? Moim zdaniem (i to jest wyłącznie spekulatywne) główna różnica dotyczy tego, co ci sugerują. Wiele, wiele (wiele!) Algorytmów różni się tylko kilkoma szczegółami technicznymi, gdy służą do tego samego celu, tak że typowy przypadek jest inny dla różnych zakresów danych wejściowych. Jednak największa ze wszystkich różnic jest (moim zdaniem) tym, co sugerują. Algorytmy mają różne możliwości, a zatem swoje mocne i słabe strony. Jeśli dwa algorytmy wyglądają na takie same, ale mogą być rozszerzone na różne sposoby, aby poradzić sobie z różnymi przypadkami, wyciągnę wniosek, że są one różne. Często jednak dwa algorytmy wyglądają tak samo, abyś uważał je za takie same ... dopóki ktoś nie przybędzie, dokonując kluczowego rozróżnienia i nagle zupełnie się różnią!
Przepraszam, moja odpowiedź była tak długa ...
Twoje zdrowie,
źródło
Wszelkie wzmianki o podobieństwie bez zdefiniowania miary podobieństwa nie są dobrze zdefiniowane. Istnieje wiele sposobów, w jakie dwa algorytmy mogą być podobne:
Quicksort i Mergesort rozwiązują bardzo podobne problemy, ale używają do tego różnych algorytmów. Mają podobną złożoność algorytmiczną (chociaż ich najgorsze wyniki i użycie pamięci mogą się różnić). Quicksort i Mergesort są podobne do Bubblesort, jednak Bubblesort ma bardzo różne wskaźniki wydajności. Jeśli zignorujesz statystyki złożoności, Quicksort, Mergesort i Bubblesort są w tej samej klasie równoważności. Jeśli jednak zależy ci na złożoności algorytmicznej, Quicksort i Mergesort są znacznie bardziej do siebie podobne niż Bubblesort.
Programowanie dynamiczne Smitha-Watermana i porównanie sekwencji HMM próbuje rozwiązać problem wyrównywania dwóch sekwencji. Biorą jednak różne dane wejściowe. Smith-Waterman przyjmuje dwie sekwencje jako dane wejściowe, a porównania sekwencji HMM przyjmują HMM i sekwencję jako dane wejściowe. Oba wyrównania sekwencji wyjściowych. Pod względem motywujących pomysłów oba są podobne do odległości edycyjnej Levenshteina , ale tylko na bardzo wysokim poziomie.
Oto kilka kryteriów, według których dwa algorytmy można nazwać podobnymi:
Krytyczna decyzja dotycząca znaczenia podobieństwa pozostaje. Czasami zależy Ci na złożoności algorytmu, czasem nie. Ponieważ definicja podobieństwa zależy od kontekstu dyskusji, termin „podobny algorytm” nie jest dobrze zdefiniowany.
źródło