Algorytm: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
Znacznik: edytor źródłowy
(interwiki)
 
(Nie pokazano 8 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
[[Plik:Czytelny algorytm.png|thumb|250px|Przykład czytelnie opisanego algorytmu w formie pseudokodu]]
'''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.
'''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.


Linia 12: Linia 13:
* '''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''' – czyli zrzucanie całej roboty na komputer. {{Główny artykuł|[[Sztuczna inteligencja]]}}
* '''Sztuczna inteligencja''' – czyli zrzucanie całej roboty na komputer. {{Główny artykuł|[[Sztuczna inteligencja]]}}
* '''Algorytmy ewolucyjne''' – tworzymy kilka byle jakich algorytmów, zostawiamy je w [[Ciepło|ciepełku]] i czekamy aż zaczną się rozmnażać. Po kilku [[Pokolenie|pokoleniach]] powinny się pojawić jakieś sensowne programy. Jedyną wadą tej metody jest możliwość narażenia się lokalnemu [[Ksiądz|guślarzowi]] za stosowanie niezgodnych z [[Biblia|Biblią]] praktyk ewolucyjnych.
* '''Algorytmy genetyczne''' –
* '''Algorytmy kwantowe''' – (bardzo) teoretyczne metody oparte na splątywaniu ze sobą [[kwant]]ów i [[Skwarki|skwarków]]. Dokładnie nie wiadomo jak to niby ma działać, ale według niekoniecznie trzeźwych [[fizyk]]ów algorytmy kwantowe ''zrewolucjonizują kryptografię''.
* '''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''' – 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 szybkie''' – w gruncie rzeczy działa tak samo jak poprzedni algorytm, tyle że trzeba to robić szybciej. Można sporo czasu zaoszczędzić poprzez zatrudnienie kilku [[murzyn]]ów do wyciągania <del>pierogów</del> liczb i dokupienie większej ilości garnków.
* '''Sortowanie szybkie''' –
* '''Algorytm Dijkstry''' – metoda opracowana przez wk{{cenzura1}}ego korkami [[Holandia|Holendra]] Edsgera Dijkstrę. Pozwala znaleźć najdłuższą i najbardziej pokrętną drogę z punktu '''A''' do punktu '''B''' przez punkty '''H''', '''W''', '''D''' i oczywiście '''P'''.
* '''Algorytm Dijkstry''' –
* '''Stacja rozrządowa Dijkstry''' – bardzo [[Polska|polski]] algorytm, mimo że jest autorstwa Holendra. Pozwala zamienić normalne działanie matematyczne – na przykład <math>x\frac{a}{b-c}</math> na jakże czytelną ''[[Odwrotna notacja polska|odwrotną notację polską]]'' czyli <math>a b c - / x *</math>.
* '''Algorytm Euklidesa''' –
* '''Eliminacja Gaussa''' – właściwie to jest zabawa polegająca na znalezieniu i zabiciu Gaussa ukrytego w układzie równań liniowych. Ulubiona rozrywka znudzonych [[student]]ów matematyki.
* '''Stacja rozrządowa Dijkstry''' –
* '''Eliminacja Gaussa''' –


== Złożoność obliczeniowa ==
== Złożoność obliczeniowa ==
Linia 34: Linia 34:
* <math>O(n^3)</math> – toż to zwykły, ch{{cenzura3}}wy brute-force!
* <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!)</math> – chyba przesadziłeś z tą rekurencją;
* <math>O(n^n)</math> – tak zwane <math>O(kurwa)</math>!
* <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}\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ć?!
* <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ć?!


== Zobacz też ==
{{Przypisy}}
* [[programowanie na kartce]]


{{Informatyka}}
{{przypisy}}
{{stopka}}
[[Kategoria:Programowanie]]

[[en:Algorithm]]

Aktualna wersja na dzień 18:54, 19 lip 2024

Przykład czytelnie opisanego algorytmu w formie pseudokodu

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[edytuj • edytuj kod]

Ż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, naCenzura2.svgmy 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.
Info.png Główny artykuł: Sztuczna inteligencja
  • Algorytmy ewolucyjne – tworzymy kilka byle jakich algorytmów, zostawiamy je w ciepełku i czekamy aż zaczną się rozmnażać. Po kilku pokoleniach powinny się pojawić jakieś sensowne programy. Jedyną wadą tej metody jest możliwość narażenia się lokalnemu guślarzowi za stosowanie niezgodnych z Biblią praktyk ewolucyjnych.
  • Algorytmy kwantowe – (bardzo) teoretyczne metody oparte na splątywaniu ze sobą kwantów i skwarków. Dokładnie nie wiadomo jak to niby ma działać, ale według niekoniecznie trzeźwych fizyków algorytmy kwantowe zrewolucjonizują kryptografię.

Przykłady algorytmów[edytuj • edytuj kod]

  • 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 – w gruncie rzeczy działa tak samo jak poprzedni algorytm, tyle że trzeba to robić szybciej. Można sporo czasu zaoszczędzić poprzez zatrudnienie kilku murzynów do wyciągania pierogów liczb i dokupienie większej ilości garnków.
  • Algorytm Dijkstry – metoda opracowana przez wkCenzura1.svgego korkami Holendra Edsgera Dijkstrę. Pozwala znaleźć najdłuższą i najbardziej pokrętną drogę z punktu A do punktu B przez punkty H, W, D i oczywiście P.
  • Stacja rozrządowa Dijkstry – bardzo polski algorytm, mimo że jest autorstwa Holendra. Pozwala zamienić normalne działanie matematyczne – na przykład na jakże czytelną odwrotną notację polską czyli .
  • Eliminacja Gaussa – właściwie to jest zabawa polegająca na znalezieniu i zabiciu Gaussa ukrytego w układzie równań liniowych. Ulubiona rozrywka znudzonych studentów matematyki.

Złożoność obliczeniowa[edytuj • edytuj kod]

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, chCenzura2.svgwy brute-force!
  • – chyba przesadziłeś z tą rekurencją;
  • – tak zwane ;
  • – zaraz, ty chyba nie…
  • – co… Co to w ogóle, kCenzura1.svga, ma być?!

Zobacz też[edytuj • edytuj kod]

Przypisy

  1. Przynajmniej w teorii
  2. Spokojnie, groźby wobec komputerów nie są karalne w Polsce. Chyba.
  3. Najlepiej do św. Turinga, może być też bł. Knuth
  4. Najłatwiej zabrać te części z jakiegoś przegranego komputera
  5. Nie mieli lepszego pomysłu na nazwę, a dalej indagowani wydawali z siebie tylko przeciągłe Ooooooo
  6. Bo nikomu się tego nie chce liczyć