Algorytm: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
Ostrzyciel (dyskusja • edycje) (takie tam na później, rough draft) Znacznik: edytor źródłowy |
Ostrzyciel (dyskusja • edycje) Znacznik: edytor źródłowy |
||
Linia 1: | Linia 1: | ||
'''Algorytm''' – [[Nieskończoność|(nie)skończony]] ciąg niejasno zdefiniowanych czynności, które w pokrętny i zawiły sposób prowadzą do kompletnej frustracji [[Programista|programisty]], użytkownika i procesora. Według niepotwierdzonych [[Teoria|teorii]] algorytmy mają |
'''Algorytm''' – [[Nieskończoność|(nie)skończony]] ciąg niejasno zdefiniowanych czynności, które w pokrętny i zawiły sposób prowadzą do kompletnej frustracji [[Programista|programisty]], użytkownika i procesora. Według niepotwierdzonych [[Teoria|teorii]] algorytmy mają służyć rozwiązywaniu [[problem]]ów. |
||
== Rodzaje == |
== Rodzaje == |
||
Linia 9: | Linia 9: | ||
* '''Brute force''' – metoda na zastraszanie. Do jej przeprowadzenia niezbędna jest jakaś [[broń]], nada się np. [[Kij bejsbolowy|bejsbol]] albo [[wałek kuchenny]]. Rozkazujemy [[komputer]]owi rozwiązać problem pod groźbą pobicia wyżej wymienioną bronią<ref>Spokojnie, groźby wobec komputerów nie są karalne w [[Polska|Polsce]]. Chyba.</ref>. Gdy to nie da oczekiwanego rezultatu, na{{Cenzura3}}my w komputer do skutku. Efekt gwarantowany, aczkolwiek metoda ta może być nieco czasochłonna. |
* '''Brute force''' – metoda na zastraszanie. Do jej przeprowadzenia niezbędna jest jakaś [[broń]], nada się np. [[Kij bejsbolowy|bejsbol]] albo [[wałek kuchenny]]. Rozkazujemy [[komputer]]owi rozwiązać problem pod groźbą pobicia wyżej wymienioną bronią<ref>Spokojnie, groźby wobec komputerów nie są karalne w [[Polska|Polsce]]. Chyba.</ref>. Gdy to nie da oczekiwanego rezultatu, na{{Cenzura3}}my w komputer do skutku. Efekt gwarantowany, aczkolwiek metoda ta może być nieco czasochłonna. |
||
* '''Heurystyka''' – piszemy algorytm, który działa dla ''jakichś'' danych byleby działał. Następnie [[Modlitwa|modlimy]] się<ref>Najlepiej do św. Turinga, może być też bł. Knuth</ref> żeby wykonywało się to poprawnie. |
* '''Heurystyka''' – piszemy algorytm, który działa dla ''jakichś'' danych byleby działał. Następnie [[Modlitwa|modlimy]] się<ref>Najlepiej do św. Turinga, może być też bł. Knuth</ref> żeby wykonywało się to poprawnie. |
||
* '''Rekurencja''' |
* '''Rekurencja''' – tę metodę da się wyjaśnić tylko przy pomocy [[Rekursja|rekursji]]. |
||
* '''Praca równoległa''' – ta metoda polega na wzmaganiu ducha [[sport]]u i rywalizacji w komputerach. Dajemy to samo zadanie kilku komputerom i każemy im je rozwiązać na czas. Komputer który wygra w nagrodę dostaje nowy [[dysk twardy]]/[[RAM]]/[[procesor]]<ref>Najłatwiej zabrać te części z jakiegoś przegranego komputera</ref>. |
* '''Praca równoległa''' – ta metoda polega na wzmaganiu ducha [[sport]]u i rywalizacji w komputerach. Dajemy to samo zadanie kilku komputerom i każemy im je rozwiązać na czas. Komputer który wygra w nagrodę dostaje nowy [[dysk twardy]]/[[RAM]]/[[procesor]]<ref>Najłatwiej zabrać te części z jakiegoś przegranego komputera</ref>. |
||
* '''Sztuczna inteligencja''' {{Główny artykuł|[[Sztuczna inteligencja]]}} |
* '''Sztuczna inteligencja''' – czyli zrzucanie całej roboty na komputer. {{Główny artykuł|[[Sztuczna inteligencja]]}} |
||
* '''Algorytmy genetyczne''' – |
* '''Algorytmy genetyczne''' – |
||
* '''Algorytmy kwantowe''' – |
* '''Algorytmy kwantowe''' – |
||
== Przykłady algorytmów == |
== Przykłady algorytmów == |
||
* '''Sortowanie bąbelkowe''' – bardzo intuicyjny algorytm, aby go należycie wykonać należy wrzucić wszystkie [[Liczba|liczby]] do garnka z wodą (koniecznie posolić!) i wstawić na gaz. Podczas gotowania na powierzchni wody zaczną się pojawiać bąbelki z liczbami w środku. Należy wtedy wyjmować liczby z [[Garnek|garnka]] w kolejności, w jakiej wypływały na wierzch. |
|||
* '''Sortowanie bąbelkowe''' – |
|||
* '''Sortowanie szybkie''' |
* '''Sortowanie szybkie''' – |
||
* '''Algorytm Dijkstry''' – |
|||
* '''Algorytm Euklidesa''' – |
|||
* '''Stacja rozrządowa Dijkstry''' – |
|||
* '''Eliminacja Gaussa''' – |
|||
== Złożoność obliczeniowa == |
|||
Znudzeni problemami codziennego życia, informatycy obmyślili pewnego dnia zabawę – zawody gdzie zadaniem jest zaprojektować jak najwolniejszy algorytm. Na [[Sędzia|sędziów]] wybrali [[matematyk]]ów, którzy w przypływie [[Alkohol|inwencji]] wymyślili nawet sposób oceniania – notację ''O''<ref>Nie mieli lepszego pomysłu na nazwę, a dalej indagowani wydawali z siebie tylko przeciągłe ''Ooooooo''</ref>. Można w ten sposób wiarygodnie{{fakt}} oceniać szybkość zżerania [[RAM]]u i cykli [[procesor]]a przez algorytm. |
|||
* <math>O(1)</math> – podejrzałeś wynik, przyznaj się draniu! |
|||
* <math>O(log_n(n))</math> – to przecież to samo, weź się wreszcie do roboty; |
|||
* <math>O(log (n))</math> – albo jesteś algorytmicznym [[geniusz]]em, albo się pomyliłeś przy szacowaniu; |
|||
* <math>O(n)</math> – no, wreszcie jakiś sensowny wynik; |
|||
* <math>O(n log(n))</math> – zazwyczaj tyle wychodzi dla skomplikowanych algorytmów<ref>Bo nikomu się tego nie chce liczyć</ref>, w praktyce okazuje się, że to jednak <math>O(n^2)</math>; |
|||
* <math>O(n^{1.001}log(log(n))</math> – żebyś nie wiem jak się spinał, nie wyjdzie ci z tego <math>O(n log(n))</math>; |
|||
* <math>O(n^2)</math> – słabo, próbuj dalej! |
|||
* <math>O(n^3)</math> – toż to zwykły, ch{{cenzura3}}wy brute-force! |
|||
* <math>O(n!)</math> – chyba przesadziłeś z tą rekurencją; |
|||
* <math>O(n^n)</math> – tak zwane <math>O(kurwa)</math>! |
|||
* <math>O\left(n^{n^n}\right)</math> – zaraz, ty chyba nie… |
|||
* <math>O\left(n^{n^{n^{n^{n^{n^nn}n}n}n}n}_{n_{n_{n_{n_{n_nn}n}n}n}n}n\right)</math> – co… Co to w ogóle, k{{cenzura1}}a, ma być?! |
|||
{{Przypisy}} |
{{Przypisy}} |
||
{{Informatyka}} |
Wersja z 14:19, 5 cze 2017
Algorytm – (nie)skończony ciąg niejasno zdefiniowanych czynności, które w pokrętny i zawiły sposób prowadzą do kompletnej frustracji programisty, użytkownika i procesora. Według niepotwierdzonych teorii algorytmy mają służyć rozwiązywaniu problemów.
Rodzaje
Żeby się nie nudzić, matematycy i informatycy wymyślili całą masę rodzajów algorytmów.
- Dziel i zwyciężaj – technika ta polega na dzieleniu zadania na wiele malutkich części. Następnie owe części rozdaje się praktykantom do rozwiązania. Dzięki temu możemy mieć pewność, że każda z części zostanie źle rozwiązana i po połączeniu błędy te się zniwelują[1].
- Programowanie dynamiczne – podobnie jak w poprzedniej metodzie dzielimy zadanie na kilka mniejszych i łatwe części dajemy rozwiązać komuś innemu. Następnie na podstawie tych rozwiązań zgadujemy wynik.
- Metoda zachłanna – czyli metoda na pałę. Rozwiązujemy problem jak popadnie, a na koniec zabieramy zachłannie wypłatę dla całego zespołu dla siebie.
- Programowanie liniowe – łączymy wszystkie literki, kropeczki, krówki czy co tam mamy linią. Po tym zabiegu wystarczy rzucić okiem na kartkę, a rozwiązanie samo się ujawni.
- Brute force – metoda na zastraszanie. Do jej przeprowadzenia niezbędna jest jakaś broń, nada się np. bejsbol albo wałek kuchenny. Rozkazujemy komputerowi rozwiązać problem pod groźbą pobicia wyżej wymienioną bronią[2]. Gdy to nie da oczekiwanego rezultatu, namy w komputer do skutku. Efekt gwarantowany, aczkolwiek metoda ta może być nieco czasochłonna.
- Heurystyka – piszemy algorytm, który działa dla jakichś danych byleby działał. Następnie modlimy się[3] żeby wykonywało się to poprawnie.
- Rekurencja – tę metodę da się wyjaśnić tylko przy pomocy rekursji.
- Praca równoległa – ta metoda polega na wzmaganiu ducha sportu i rywalizacji w komputerach. Dajemy to samo zadanie kilku komputerom i każemy im je rozwiązać na czas. Komputer który wygra w nagrodę dostaje nowy dysk twardy/RAM/procesor[4].
- Sztuczna inteligencja – czyli zrzucanie całej roboty na komputer.
- Główny artykuł: Sztuczna inteligencja
- Algorytmy genetyczne –
- Algorytmy kwantowe –
Przykłady algorytmów
- Sortowanie bąbelkowe – bardzo intuicyjny algorytm, aby go należycie wykonać należy wrzucić wszystkie liczby do garnka z wodą (koniecznie posolić!) i wstawić na gaz. Podczas gotowania na powierzchni wody zaczną się pojawiać bąbelki z liczbami w środku. Należy wtedy wyjmować liczby z garnka w kolejności, w jakiej wypływały na wierzch.
- Sortowanie szybkie –
- Algorytm Dijkstry –
- Algorytm Euklidesa –
- Stacja rozrządowa Dijkstry –
- Eliminacja Gaussa –
Złożoność obliczeniowa
Znudzeni problemami codziennego życia, informatycy obmyślili pewnego dnia zabawę – zawody gdzie zadaniem jest zaprojektować jak najwolniejszy algorytm. Na sędziów wybrali matematyków, którzy w przypływie inwencji wymyślili nawet sposób oceniania – notację O[5]. Można w ten sposób wiarygodnie[potrzebne źródło] oceniać szybkość zżerania RAMu i cykli procesora przez algorytm.
- – podejrzałeś wynik, przyznaj się draniu!
- – to przecież to samo, weź się wreszcie do roboty;
- – albo jesteś algorytmicznym geniuszem, albo się pomyliłeś przy szacowaniu;
- – no, wreszcie jakiś sensowny wynik;
- – zazwyczaj tyle wychodzi dla skomplikowanych algorytmów[6], w praktyce okazuje się, że to jednak ;
- – żebyś nie wiem jak się spinał, nie wyjdzie ci z tego ;
- – słabo, próbuj dalej!
- – toż to zwykły, chwy brute-force!
- – chyba przesadziłeś z tą rekurencją;
- – tak zwane !
- – zaraz, ty chyba nie…
- – co… Co to w ogóle, ka, ma być?!
Przypisy
- ↑ Przynajmniej w teorii
- ↑ Spokojnie, groźby wobec komputerów nie są karalne w Polsce. Chyba.
- ↑ Najlepiej do św. Turinga, może być też bł. Knuth
- ↑ Najłatwiej zabrać te części z jakiegoś przegranego komputera
- ↑ Nie mieli lepszego pomysłu na nazwę, a dalej indagowani wydawali z siebie tylko przeciągłe Ooooooo
- ↑ Bo nikomu się tego nie chce liczyć