Co to jest algorytm? Algorytm – w matematyce oraz informatyce to skończony, uporządkowany zbiór jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Słowo "algorytm" pochodzi z nazwiska Muhammed ibn Musa Alchwarizmi ( أبو عبد الله محمد بن موسى الخوارزمي ) matematyka perskiego z IX wieku i początkowo oznaczało w Europie sposób obliczeń oparty na dziesiętnym systemie liczbowym. Algorytm – w matematyce oraz informatyce to skończony, uporządkowany zbiór jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Słowo "algorytm" pochodzi z nazwiska Muhammed ibn Musa Alchwarizmi ( أبو عبد الله محمد بن موسى الخوارزمي ) matematyka perskiego z IX wieku i początkowo oznaczało w Europie sposób obliczeń oparty na dziesiętnym systemie liczbowym.matematyceinformatycezbiórMuhammed ibn Musa AlchwarizmiIX wiekudziesiętnym systemie liczbowymmatematyceinformatycezbiórMuhammed ibn Musa AlchwarizmiIX wiekudziesiętnym systemie liczbowym Istnieje wiele, nie zawsze równoważnych definicji algorytmu. Często jest on określany jako przepis przetworzenia pewnych danych wejściowych (formalnie – wektora danych z pewnego ustalonego zbioru wartości dopuszczalnych dla danego algorytmu) do danych wynikowych, dzisiaj jest ona jednak zaszłością, gdyż nie uwzględnia np. algorytmów typu online, podobnie jak często dokładane do definicji algorytmu założenie o ograniczonej liczbie kroków algorytmu, tj. ilości czynności które algorytm musi wykonać by zakończyć pracę (w przypadku algorytmów online nie ma sprecyzowanego końca – algorytm ma przetwarzać napływające na bieżąco dane, reagując na ewentualne anomalie, choćby miało to trwać do końca świata). Istnieje wiele, nie zawsze równoważnych definicji algorytmu. Często jest on określany jako przepis przetworzenia pewnych danych wejściowych (formalnie – wektora danych z pewnego ustalonego zbioru wartości dopuszczalnych dla danego algorytmu) do danych wynikowych, dzisiaj jest ona jednak zaszłością, gdyż nie uwzględnia np. algorytmów typu online, podobnie jak często dokładane do definicji algorytmu założenie o ograniczonej liczbie kroków algorytmu, tj. ilości czynności które algorytm musi wykonać by zakończyć pracę (w przypadku algorytmów online nie ma sprecyzowanego końca – algorytm ma przetwarzać napływające na bieżąco dane, reagując na ewentualne anomalie, choćby miało to trwać do końca świata).algorytmów typu onlinealgorytmów typu online Algorytm ma przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego. Badaniem algorytmów zajmuje się algorytmika. Algorytm może zostać zaimplementowany w postaci programu komputerowego lub innego urządzenia. Kiedy podczas tego procesu programiści popełnią błąd (ang. bug), może to doprowadzić do poważnych konsekwencji np. błędy w implementacji algorytmów bezpieczeństwa mogą ułatwić popełnienie przestępstwa komputerowego Algorytm ma przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego. Badaniem algorytmów zajmuje się algorytmika. Algorytm może zostać zaimplementowany w postaci programu komputerowego lub innego urządzenia. Kiedy podczas tego procesu programiści popełnią błąd (ang. bug), może to doprowadzić do poważnych konsekwencji np. błędy w implementacji algorytmów bezpieczeństwa mogą ułatwić popełnienie przestępstwa komputerowegosystemzaimplementowanyprogramu komputerowego urządzeniaang.przestępstwa komputerowegosystemzaimplementowanyprogramu komputerowego urządzeniaang.przestępstwa komputerowego
Jako przykład stosowanego w życiu codziennym algorytmu podaje się często przepis kulinarny. Dla przykładu, aby ugotować bigos należy w określonej kolejności oraz odstępach czasowych (imperatyw czasowy) dodawać właściwe rodzaje kapusty i innych składników. Może istnieć kilka różnych przepisów dających na końcu bardzo podobną potrawę. Przykład ten ma wyłącznie charakter poglądowy, ponieważ język przepisów kulinarnych nie został jasno zdefiniowany. Algorytmy zwykle formułowane są w sposób ścisły w oparciu o język matematyki. Jako przykład stosowanego w życiu codziennym algorytmu podaje się często przepis kulinarny. Dla przykładu, aby ugotować bigos należy w określonej kolejności oraz odstępach czasowych (imperatyw czasowy) dodawać właściwe rodzaje kapusty i innych składników. Może istnieć kilka różnych przepisów dających na końcu bardzo podobną potrawę. Przykład ten ma wyłącznie charakter poglądowy, ponieważ język przepisów kulinarnych nie został jasno zdefiniowany. Algorytmy zwykle formułowane są w sposób ścisły w oparciu o język matematyki.przepis kulinarnybigoskapustyprzepis kulinarnybigoskapusty W niektórych krajach, jak USA, algorytmy mogą zostać opatentowane, jeżeli zostaną zaimplementowane w jakimś praktycznym celu. Niektórzy twierdzą, że patentowanie algorytmów spowalnia rozwój informatyki, bo jeden producent może uzyskać monopol, np. na pisanie oprogramowania tworzącego pewne typy plików (np. GIF). Wiele koncernów komputerowych prowadzi między sobą prawnicze spory dotyczące własności do niektórych patentów. Kontrargumentem jest tzw. prawo własności intelektualnej, jaką objęty jest np. utwór muzyczny, będący wytworem intelektu i pracy muzyka, zakładające, że program jest intelektualną własnością twórcy W niektórych krajach, jak USA, algorytmy mogą zostać opatentowane, jeżeli zostaną zaimplementowane w jakimś praktycznym celu. Niektórzy twierdzą, że patentowanie algorytmów spowalnia rozwój informatyki, bo jeden producent może uzyskać monopol, np. na pisanie oprogramowania tworzącego pewne typy plików (np. GIF). Wiele koncernów komputerowych prowadzi między sobą prawnicze spory dotyczące własności do niektórych patentów. Kontrargumentem jest tzw. prawo własności intelektualnej, jaką objęty jest np. utwór muzyczny, będący wytworem intelektu i pracy muzyka, zakładające, że program jest intelektualną własnością twórcyUSAopatentowane zaimplementowaneinformatyki monopolplikówGIFprawniczeUSAopatentowane zaimplementowaneinformatyki monopolplikówGIFprawnicze
Czym są liczby pierwsze? Być może - definicja tego pojęcia uleciała komuś z pamięci;przypomnijmy, że jest bardzo prosta. Otóż liczbą pierwszą nazywamy taką liczbę naturalną (a "naturalne" są liczby 1, 2, 3,...), która jest większa od jedynki (a więc w rachubę wchodzą już tylko liczby 2, 3,...) i podzielna bez reszty tylko przez siebie samą i jedynkę. Wszystkie pozostałe liczby naturalne noszą nazwę złożonych; jest ogromnie ważne, iż każda liczba złożona da się przedstawić w postaci iloczynu liczb pierwszych (pamiętacie ze szkoły "rozkładanie na czynniki pierwsze"?), i to tylko w jeden sposób; na przykład: 15 = = 335, 96 = i tak dalej. Być może - definicja tego pojęcia uleciała komuś z pamięci;przypomnijmy, że jest bardzo prosta. Otóż liczbą pierwszą nazywamy taką liczbę naturalną (a "naturalne" są liczby 1, 2, 3,...), która jest większa od jedynki (a więc w rachubę wchodzą już tylko liczby 2, 3,...) i podzielna bez reszty tylko przez siebie samą i jedynkę. Wszystkie pozostałe liczby naturalne noszą nazwę złożonych; jest ogromnie ważne, iż każda liczba złożona da się przedstawić w postaci iloczynu liczb pierwszych (pamiętacie ze szkoły "rozkładanie na czynniki pierwsze"?), i to tylko w jeden sposób; na przykład: 15 = = 335, 96 = i tak dalej. Tak więc, w myśl tej definicji, liczba 2 jest niewątpliwie pierwsza, 3 również: obydwie faktycznie dzielą się tylko przez siebie i przez jedynkę. Inaczej jest z czwórką: wśród jej dzielników jest także liczba 2, ale 5 jest znów liczbą pierwszą, podobnie 7 i 11. Liczby 6, 8, 9, 10 są, naturalnie, złożone. Tak więc, w myśl tej definicji, liczba 2 jest niewątpliwie pierwsza, 3 również: obydwie faktycznie dzielą się tylko przez siebie i przez jedynkę. Inaczej jest z czwórką: wśród jej dzielników jest także liczba 2, ale 5 jest znów liczbą pierwszą, podobnie 7 i 11. Liczby 6, 8, 9, 10 są, naturalnie, złożone. Liczby pierwsze - przy całej prostocie tego pojęcia - są przedmiotem mnóstwa zadań, problemów i twierdzeń. Niektóre z tych twierdzeń są niezwykle złożone w dowodzeniu, inne ze sformułowanych dotychczas problemów tak trudne, że ich rozwiązania nie są znane. Liczby pierwsze - przy całej prostocie tego pojęcia - są przedmiotem mnóstwa zadań, problemów i twierdzeń. Niektóre z tych twierdzeń są niezwykle złożone w dowodzeniu, inne ze sformułowanych dotychczas problemów tak trudne, że ich rozwiązania nie są znane.
Największe liczby pierwsze 23 listopada 1996 roku świat obiegła sensacyjna wiadomość: znaleziona liczba pierwsza ma cyfr i jest największą znaną liczbą pierwszą Mersenne'a (35. z kolei) i największą liczbą pierwszą w ogóle. 23 listopada 1996 roku świat obiegła sensacyjna wiadomość: znaleziona liczba pierwsza ma cyfr i jest największą znaną liczbą pierwszą Mersenne'a (35. z kolei) i największą liczbą pierwszą w ogóle. Armengaud jest jednym z przeszło 700 uczestników zespołu, biorących udział w obliczeniach. I choć to on uzyskał ostateczny wynik, zasługa przypada całej grupie. Bez wspólnej pracy wszystkich sukces nie byłby w żaden sposób możliwy. Armengaud jest jednym z przeszło 700 uczestników zespołu, biorących udział w obliczeniach. I choć to on uzyskał ostateczny wynik, zasługa przypada całej grupie. Bez wspólnej pracy wszystkich sukces nie byłby w żaden sposób możliwy. Owa rekordowa liczba pierwsza, równa - jak się rzekło wyżej – 2 do , jest 35. kolejną tzw. liczbą Mersenne'a. Gdyby ją wydrukować, zajęłaby 225-stronicową książkę formatu kieszonkowego (pocketbook). Praca nad jej znalezieniem zajęła samemu tylko Joelowi 88 godzin nieustannych obliczeń z użyciem komputera osobistego, wyposażonego w procesor Pentium 90 MHz; długo, ale proszę to porównać z przytoczonymi wyżej czasami, przed ćwierćwieczem uważanymi za typowe... Owa rekordowa liczba pierwsza, równa - jak się rzekło wyżej – 2 do , jest 35. kolejną tzw. liczbą Mersenne'a. Gdyby ją wydrukować, zajęłaby 225-stronicową książkę formatu kieszonkowego (pocketbook). Praca nad jej znalezieniem zajęła samemu tylko Joelowi 88 godzin nieustannych obliczeń z użyciem komputera osobistego, wyposażonego w procesor Pentium 90 MHz; długo, ale proszę to porównać z przytoczonymi wyżej czasami, przed ćwierćwieczem uważanymi za typowe... Obecnie istnieje już kolejna latorośl; monstrum jeszcze przeraźliwsze, ale chronologicznie drugie z kolei, a więc dla szerokiej publiczności, uwielbiającej wszelkich liderów, już mniej ciekawe. Ta liczba to 2 do , liczba Mersenne'a o numerze 36. W sierpniu 1997 roku Gordon Spence, 38-letni Szkot, pracownik firmy Thorn Microvawe Devices Ltd. z Hampshire w W. Brytanii (nawiasem mówiąc, wcale nie żaden matematyk, a... księgowy, tyle że od 10 lat intensywnie zajmujący się komputerami; sam o sobie mówi, że najchętniej używa komputera do... gry w Quake'a), udowodnił, że jest ona liczbą pierwszą. Ma ona cyfry, ponad dwukrotnie więcej od znalezionej przez Armengauda. Gdyby ją wydrukować, zajęłaby 450-stronicową książkę typu "kieszonkowca". Obecnie istnieje już kolejna latorośl; monstrum jeszcze przeraźliwsze, ale chronologicznie drugie z kolei, a więc dla szerokiej publiczności, uwielbiającej wszelkich liderów, już mniej ciekawe. Ta liczba to 2 do , liczba Mersenne'a o numerze 36. W sierpniu 1997 roku Gordon Spence, 38-letni Szkot, pracownik firmy Thorn Microvawe Devices Ltd. z Hampshire w W. Brytanii (nawiasem mówiąc, wcale nie żaden matematyk, a... księgowy, tyle że od 10 lat intensywnie zajmujący się komputerami; sam o sobie mówi, że najchętniej używa komputera do... gry w Quake'a), udowodnił, że jest ona liczbą pierwszą. Ma ona cyfry, ponad dwukrotnie więcej od znalezionej przez Armengauda. Gdyby ją wydrukować, zajęłaby 450-stronicową książkę typu "kieszonkowca".
Gordon Spence
Sito Eratostenesa W czasach starożytnych znano metodę opisaną przez greckiego uczonego Eratostenesa z Cyreny. Podszedł on do rozwiązania od drugiej strony - zamiast sprawdzać podzielność kolejnych liczb naturalnych przez znalezione liczby pierwsze, zaproponował wyrzucanie ze zbioru liczb naturalnych wielokrotności kolejnych liczb, które nie zostały wcześniej wyrzucone. To, co zostanie, będzie zbiorem liczb pierwszych, które nie posiadają innych podzielników jak 1 i same siebie. Metoda ta została nazwana i jest najszybszą metodą wyszukiwania liczb pierwszych w ograniczonym zbiorze. W czasach starożytnych znano metodę opisaną przez greckiego uczonego Eratostenesa z Cyreny. Podszedł on do rozwiązania od drugiej strony - zamiast sprawdzać podzielność kolejnych liczb naturalnych przez znalezione liczby pierwsze, zaproponował wyrzucanie ze zbioru liczb naturalnych wielokrotności kolejnych liczb, które nie zostały wcześniej wyrzucone. To, co zostanie, będzie zbiorem liczb pierwszych, które nie posiadają innych podzielników jak 1 i same siebie. Metoda ta została nazwana sitem Eratostenesa i jest najszybszą metodą wyszukiwania liczb pierwszych w ograniczonym zbiorze.
Zobaczmy jak działa. Spróbujmy wg tej metody odszukać wszystkie liczby pierwsze w zbiorze 20 początkowych liczb naturalnych. Zobaczmy jak działa sito Eratostenesa. Spróbujmy wg tej metody odszukać wszystkie liczby pierwsze w zbiorze 20 początkowych liczb naturalnych.
Schemat blokowy Prezentowany algorytm jest maksymalnie uproszczony. Na początku odczytujemy górny kres przedziału, w którym będziemy wyznaczać liczby pierwsze umieszczając go w zmiennej g. Prezentowany algorytm Sita Eratostenesa jest maksymalnie uproszczony. Na początku odczytujemy górny kres przedziału, w którym będziemy wyznaczać liczby pierwsze umieszczając go w zmiennej g. Następnie wykonywane są kolejno trzy pętle iteracyjne: Następnie wykonywane są kolejno trzy pętle iteracyjne: ustawia wszystkie elementy tablicy t[ ] na true. Zwróć uwagę, iż tablica jest ustawiana od elementu o indeksie 2. Zgodnie z tym, co powiedzieliśmy wyżej, tablica t[ ] odzwierciedla zbiór liczb naturalnych, w którym wartościami kolejnych liczb są indeksy elementów, natomiast zawartość tych elementów określa, czy reprezentowane przez nie liczby są (true) lub nie są (false) obecne w zbiorze. Pętla nr 1: - inicjalizacja ustawia wszystkie elementy tablicy t[ ] na true. Zwróć uwagę, iż tablica jest ustawiana od elementu o indeksie 2. Zgodnie z tym, co powiedzieliśmy wyżej, tablica t[ ] odzwierciedla zbiór liczb naturalnych, w którym wartościami kolejnych liczb są indeksy elementów, natomiast zawartość tych elementów określa, czy reprezentowane przez nie liczby są (true) lub nie są (false) obecne w zbiorze. usuwa ze zbioru wszystkie wielokrotności kolejnych liczb. Dokonujemy tego bez żadnych sprawdzeń, co oczywiście nie jest zbytnio efektywne, ale za to bardzo proste. W zmiennej w tworzymy pierwszą wielokrotność i-tej liczby. Następnie wszystkie elementy o indeksach równych kolejnym wielokrotnościom ustawiamy na false. Po zakończeniu pętli 2 w tablicy t[ ] wartość true pozostaje jedynie w elementach, których indeksy są liczbami pierwszymi. Pętla nr 2: - eliminacja usuwa ze zbioru wszystkie wielokrotności kolejnych liczb. Dokonujemy tego bez żadnych sprawdzeń, co oczywiście nie jest zbytnio efektywne, ale za to bardzo proste. W zmiennej w tworzymy pierwszą wielokrotność i-tej liczby. Następnie wszystkie elementy o indeksach równych kolejnym wielokrotnościom ustawiamy na false. Po zakończeniu pętli 2 w tablicy t[ ] wartość true pozostaje jedynie w elementach, których indeksy są liczbami pierwszymi. przegląda kolejne elementy tablicy t[ ] i jeśli mają one wartość true, wyświetla ich indeks. Po wykonaniu tej pętli w oknie konsoli otrzymamy wszystkie liczby pierwsze zawarte w przedziale od 2 do g. Pętla nr 3: - prezentacja przegląda kolejne elementy tablicy t[ ] i jeśli mają one wartość true, wyświetla ich indeks. Po wykonaniu tej pętli w oknie konsoli otrzymamy wszystkie liczby pierwsze zawarte w przedziale od 2 do g.
Programy