Co to jest algorytm?


12

Czym dokładnie jest algorytm, co oznacza algorytm? Trochę rozumiem to słowo, ponieważ nie jest ono specyficzne dla określonego języka lub wzoru, a raczej jedna z podstawowych zasad (więc myślę, że to pytanie sprawia, że ​​wyglądam głupio).

Jedną z „opcji”, które rozumiem, jest to, że oznacza to sposób wykonania czegoś, co można zapisać jako listę w pseudokodzie.

Kiedy piszę bardziej skomplikowany kod, myślę, co należy zrobić, z czym i jak się tam dostanę (nie w języku programowania), a następnie napiszę to w kodzie. Czy to dobry sposób, aby to zrobić i czy ma to coś wspólnego z algorytmami?

(Chciałem zapytać tutaj raczej o Stackoverflow, ponieważ nie chodzi o konkretny problem / język plus mam wrażenie, że większość ludzi tutaj wie „dlaczego”, a przynajmniej odpowiedzi tutaj są bardziej szczegółowe, niż o Stackoverflow gdzie jest inaczej, przepraszam, że powinienem był zapytać)



1
@Apalala: Nie sądzę, żeby te ograniczenia miały zastosowanie.
Josh K

2
@Apalala: Finite , nieznane .
Josh K

2
@Jathanathan: „słowa, które muszę wyszukać”? Które słowa Bądź konkretny . Ta strona nie jest magiczna. Nie znamy cię Nie wiemy co czytasz. Nie wiemy, co cię myliło. Proszę, bądź konkretny .
S.Lott,

1
@Apalala: „Skończony” oznacza „ograniczony”, nic więcej. Algorytm na pewno kiedyś się zatrzyma. O wiele łatwiej jest udowodnić skończoność, gdy masz jakiś sposób przewidywania, że ​​to się skończy, więc algorytmy są przewidywalne, ale przewidywalność nie jest w zwykłej definicji algorytmów.
David Thornley,

Odpowiedzi:


19

Algorytm jest skończoną sekwencją dobrze zdefiniowanych instrukcji do obliczania funkcji (lub wykonywania procedury), która kończy się w dobrze zdefiniowanym stanie końcowym.


1
+1. „Skończone, dobrze zdefiniowane i skuteczne” to trzy kryteria we wpisie w Wikipedii. Masz też wszystkie trzy tutaj.
S.Lott,

Jestem gotów oglądać filmy cytowane przez @ Jörga, ale mój obecny punkt widzenia jest taki, że nie tylko kroki muszą być skończone. Jeśli zasoby (w tym czas) nie są ograniczone, wówczas procedurę można wywołać lub oznaczyć jako dowolną, ale nie algorytm .
Apalala,

@Apalala - przeglądałem swoje podręczniki i nigdzie nie widzę tego ograniczenia. Możliwe jest, że dla określonego zestawu danych lub danych wejściowych algorytm może nie zostać zakończony (algorytmy takie jak metoda Newtona-Raphsona w celu znalezienia korzenia mogą utknąć w niekończącej się pętli), ale nie oznacza to, że algorytm nie jest algorytmem.
John Bode

@ John Oscillations można i rutynowo wykrywa w Newton-Raphson.
Apalala

1
@Apalala: brzmi bardziej jak definicja programu niż algorytmu. Ta idea dyskretnych kroków jest obecna w maszynach Turinga, maszynach rejestrujących, maszynach o swobodnym dostępie i oczywiście w naszych rzeczywistych komputerach fizycznych, również w prawie każdym języku programowania, a nawet, choć bardziej pośrednio, w rachunku lambda. Jest to jednak arbitralne ograniczenie, które nie jest nieodłączne od algorytmów. Na przykład algorytmy analogowe nie mają dyskretnych kroków (w rzeczywistości jest to definicja algorytmu analogowego) i można je faktycznie zaimplementować za pomocą komputera analogowego.
Jörg W Mittag

15

To jest naprawdę interesujące pytanie, a właściwie wciąż otwarte pytanie badawcze.

Jurij Gurewicz, jeden z gigantów teorii algorytmów, prowadzi obecnie serię wykładów wideo na stronie społeczności Microsoft Microsoftu Channel9:

Jak widać, twoje pytanie jest tak naprawdę tytułem drugiego wykładu. Jednak zdecydowanie zalecam obejrzenie wszystkich trzech.

W szczególności pierwszy zawiera kilka przykładów algorytmów, które unieważniają prawie wszystkie definicje podane w większości innych odpowiedzi tutaj.


2
Dzięki za linki. W tekście towarzyszącym pierwszemu filmowi zauważysz, co następuje w ramach definicji algorytmu: „ostatecznie kończy się w końcowym stanie końcowym”. Zakończenie jest istotną częścią definicji algorytmu. Dlatego systemy operacyjne i serwery nie kończące się nie są algorytmami.
LIProf,

4

Algorytm jest jak dobry przepis na gotowanie . Masz jakieś dane wejściowe, pewne dobrze zdefiniowane etapy pośrednie i uzyskasz końcowy wynik.

W odniesieniu do programowania jest to jednoznaczny opis kroków, które należy wykonać, aby rozwiązać konkretny problem. Wszystko, co możesz zapisać w wybranym przez siebie języku programowania, może być postrzegane jako algorytm - ale zazwyczaj termin ten jest używany tylko do typowych zadań logicznych lub matematycznych, takich jak sortowanie lub wyszukiwanie.


Istnieje wiele algorytmów, które niekoniecznie dają końcowy wynik. Na przykład system operacyjny lub serwer WWW to algorytm, dla którego podanie wyniku końcowego jest zwykle uważane za błąd.
Jörg W Mittag

@ JörgWMittag, ale czy system operacyjny lub serwer internetowy są „algorytmem”? Myślę, że nie są - mogą rozwiązywać podproblemy swojej domeny za pomocą algorytmów - i w każdym przypadku zdecydowanie potrzebują wyniku końcowego - ale mają także części, które nie są algorytmami i jako całość nie są algorytmy t. (To tak, jak powiedziałeś w innym komentarzu - systemy operacyjne i serwery sieciowe to programy, ale niekoniecznie algorytmy ).
Andres F.

2

Algorytm to zestaw reguł lub procesów (w obliczeniach) używanych do rozwiązywania problemów. Zasadniczo istnieje problem, potrzebujesz rozwiązania, a proces tego rozwiązania jest algorytmem. Algorytm ma skończone zestawy reguł / procesów pozwalających dotrzeć do rozwiązania.

Jeśli jesteś jak Edsger W. Dijkstra , napiszesz swój algorytm na kartce papieru i opracujesz / poprawisz algorytm na papierze, aż będziesz zadowolony z algorytmów. W przeciwnym razie (szczególnie przy pisaniu dokumentacji) schemat blokowy służy do schematycznego przedstawienia przepływu algorytmu / procesu. Umożliwia to innym krytykowanie schematu blokowego i poprawianie w razie potrzeby (bez obawy o to, jaki język programowania jest potrzebny).

Nie wiem czy to odpowiada na twoje pytanie.


Nie podoba mi się zestaw słów, ponieważ oznacza „nie zamówiono”. Wolałbym „sekwencję” lub krotkę wydarzenia, aby pozostać w obszarze matematycznym
BenjaminB

@ Ubiquité, Set niekoniecznie oznacza „niezamówiony”. Możesz sklasyfikować zestaw w wybranej kolejności (np. Kolejność losowa). Nie wymaga to jednak negatywnego wyniku ze względu na ludzką interpretację słowa „set”. Dodatkowo możesz mieć zestaw złożony, który jest grupą zbiorów, która również jest częścią algorytmów. Stąd „zestaw” może być dowolny, o ile jest odpowiednio stosowany jako algorytmiczne rozwiązanie problemu.
Buhake Sindi,

Nie przegłosowałem!
BenjaminB,

Przepraszam, nie chciałem winić cię za przegłosowanie. Downvoter powinien wyraźnie podać powody downvote.
Buhake Sindi

1

Algorytm: dobrze uporządkowany zestaw operacji, które są 1) jednoznaczne i 2) efektywnie obliczalne, dzięki czemu wykonywanie operacji od pierwszego daje wynik po skończonej liczbie operacji.


Przykład licznika: system operacyjny. Nie wywołuje efektu w ogóle , w rzeczywistości, która jest zwykle uważane za błąd.
Jörg W Mittag

@ Jörg, dobrze system operacyjny daje wiele wyników, które razem dają ogólny wynik świadczenia usług systemowych dla aplikacji.
ThomasMcLeod

@ JörgWMittag Tak jak powiedziałem w innych komentarzach, wnioskiem do twojej obserwacji będzie, że system operacyjny nie jest w rzeczywistości algorytmem;)
Andres F.

1

Algorytm Jest to kombinacja etapów sekwencyjnych (etapami tymi mogą być obliczenia, przetwarzanie danych i zadania wnioskowania) wykorzystywanych do rozwiązania problemu w bardzo prosty i wydajny sposób.

Jest zaprojektowany najskuteczniej, aby można go wyrazić w skończonej przestrzeni i czasie. możemy go wdrożyć w dowolnym języku programowania.

Właściwości algorytmu: następujące są główne właściwości algorytmu: -

Algorytm musi mieć unikalną nazwę. Powinien mieć wyraźnie zdefiniowane zestawy danych wejściowych i wyjściowych. Algorytm musi być w kolejności sekwencyjnej z jednoznacznymi operacjami. Musi mieć jakiś punkt końcowy, tzn. Zatrzymuje się w określonym czasie. kliknij tutaj, aby uzyskać informacje na temat projektowania i analizy algorytmu


0

Używam tego terminu, aby opisać formułę rozwiązania konkretnego problemu. Formuła niekoniecznie musi być napisana z matematyki lub mieć związek 1: 1 z metodą. W szkole algorytmy i struktury danych są ze sobą ściśle powiązane i mogą być zapisywane jako wzory matematyczne lub sprawdzane przy użyciu dowodów.


0

Algorytm jest abstrakcją programu komputerowego i składa się z zestawu instrukcji umożliwiających wykonanie dobrze określonego zadania w skończonej liczbie kroków, chociaż ograniczenie liczby kroków może być bardzo duże, a poszczególne kroki mogą być złożone ( skończone) zadania same w sobie. Chociaż istnieją (poprawne) programy, które są ogólnie znane - nie algorytmiczne, wszystkie one działają poprzez powtarzanie elementów algorytmicznych w pewnym wzorze. (Bardziej interesujące są programy, których status zakończenia nie jest znany, ale większość programistów tak naprawdę nie zajmuje się takimi rzeczami; wiem, że nie!)


0

IMO nikt do końca nie wie :) Widziałem termin stosowany tylko do matematycznych funkcji obliczeniowych, do każdej funkcji, która pobiera dane wejściowe i generuje dane wyjściowe oraz do wszystkiego , co pobiera dane wejściowe i wykonuje na nich jakąś operację.

Czy uważasz, że którykolwiek z poniższych elementów jest algorytmem?

  1. Funkcja, która oblicza stopę procentową pożyczki na okres 20 lat
  2. Logika biznesowa, która sprawdza, czy wszystkie informacje zostały wprowadzone do wniosku o pożyczkę
  3. finderFunkcja, która wysyła zapytanie do bazy danych dla obiektu użytkownika
  4. Funkcja „pomocnika”, która czyści i formatuje wprowadzanie danych
  5. Funkcja, która analizuje plik XML i odwzorowuje dane na obiekty biznesowe
  6. Klasa, która pobiera dane wejściowe i zapisuje je w pliku tekstowym

0

Algorytm jest idea, metoda, technika, „mądrość” do kalkulacji lub wykonanie zadania, które ma charakter abstrakcyjny, ale jak to działa na komputerach w realnym świecie, dążą do jej używać jako mało zasobów, jak to możliwe , które w świecie komputerowym to czas i pamięć.


0

Algorytm jest sekwencją dobrze zdefiniowanych kroków, które dają wynik w skończonym czasie.

Dobrze zdefiniowany krok: To jest coś, co możesz zrobić lub obliczyć, co jest dokładnie zdefiniowane. Już po przeczytaniu kroku wiesz, co musisz zrobić i jak to zrobić. W szczególności możesz napisać go w znanym języku programowania i upewnić się, że fragment programu dokładnie pasuje do kroku.

Sekwencja: Kroki są wykonywane w określonej kolejności. Kroki mogą być wykonywane więcej niż jeden raz w zależności od danych (pętle) lub mogą nie być wcale wykonywane w zależności od danych (jeśli instrukcje). Algorytmy równoległe nakładają tylko częściowy porządek na kroki, więc upraszczam tutaj. Bardziej poprawne byłoby opisanie go jako zbioru częściowo uporządkowanego niż sekwencji, ale chciałem, aby słowa były nieco prostsze. Poza tym łatwo jest osadzić częściowo zamówiony zestaw w pełnej kolejności.

Wynik: stan końcowy lub wartość. Nie musi to być z góry przewidywalne, ale musi być określonym celem spełniającym pewien warunek. Oznacza to, że system operacyjny nie jest algorytmem, chociaż używa ich dużo.

Skończone: algorytm może się kiedyś zatrzymać, przynajmniej na maszynie, która może działać wystarczająco długo. Nie zawsze jest gwarantowane, że zatrzyma się w przewidywalnym czasie i nie ma gwarancji, że zatrzyma się, zanim słońce rozszerzy się i zmieni kolor na czerwony na dowolnej istniejącej maszynie. Oznacza to również, że system operacyjny nie jest algorytmem, ponieważ idealnie będzie działał wiecznie. Widziałem słowo „procedura” używane do opisania czegoś, co byłoby algorytmem, gdybyśmy byli pewni, że kiedyś się zatrzyma. (Możliwe jest posiadanie algorytmu, który zatrzyma się w nieznanym czasie. Załóżmy, że powiedzmy, że hipoteza Goldbacha okazała się matematycznie nieprawdziwa, co nie jest konstruktywnym dowodem, więc liczba parzysta> 2 nie była sumą dwóch liczb pierwszych Algorytm, który po prostu testował liczby parzyste, ostatecznie zostałby zakończony,

Algorytm jest celowo abstrakcyjnym rodzajem rzeczy, więc nie zastanawiamy się nad pytaniami typu: „Czy jest to fizycznie możliwe do wykonania przed śmiercią Wszechświata?”. Zbyt trudno byłoby na nie odpowiedzieć. Jeśli odnosi się do operacji na komputerze, łatwo go zaimplementować w języku programowania.


-1

Gdybym musiał podać ogólną definicję, powiedziałbym, że algorytm jest formułą do rozwiązania problemu obliczeniowego, który jest bardziej złożony niż i ostatecznie jest bardziej wydajny niż rozwiązanie oczywiste / brutalne.

Należy również zauważyć, że algorytm nie jest żadnym konkretnym kodem źródłowym; to samo obliczenie. Oznacza to między innymi, że każdy język kompletny Turinga może implementować dowolny algorytm, który może implementować każdy inny język kompletny Turinga.


Bardzo podobała mi się ta odpowiedź i myślę, że moglibyśmy posunąć się nieco dalej i powiedzieć (choć niezwiązane z pierwotnym pytaniem): każdy algorytm jest optymalizacją rozwiązania wyszukiwania z użyciem siły / drzewa. Zastanawiałem się, czy można to formalnie udowodnić.
mojuba

-1 „Algorytm” to dobrze zdefiniowany termin matematyczny.
Apalala,

1
@Apalala, więc co powstrzymuje cię przed przedefiniowaniem go dla jasności lub, powiedzmy, lepszego zrozumienia jego istoty? Algorytm jako „zestaw instrukcji” nic mi nie mówi.
mojuba

1
@mojuba Naprawdę nie dbam o to, czy termin zostanie przedefiniowany, ale myślę, że tradycyjna definicja była przydatna, ponieważ przynajmniej rozróżniała sposoby podejścia do problemów: algorytm jest receptą na rozwiązanie problemu przy użyciu skończonych zasobów . Zmień tę definicję, a przewidywalną konsekwencją jest to, że będziemy musieli wymyślić inne słowo, które oznacza to samo. Cerować! Cała wiedza zdobyta w ubiegłym stuleciu na temat obliczalności i złożoności odchodzi bez solidnej definicji algorytmu !
Apalala

1
Wyszukiwanie metodą brutalnej siły jest algorytmem. Zasadniczo nie jest to ładny algorytm i na ogół nie warto go spisywać. Nie widzę żadnej rzeczywistej użyteczności w wykluczeniu brutalnej siły, aw wielu przypadkach nie jest jasne, co tak naprawdę znaczy „lepsze niż brutalna siła”.
David Thornley,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.