Algorytm

Algorytm – skończony ciąg jasno zdefiniowanych czynności koniecznych do wykonania pewnego rodzaju zadań, sposób postępowania prowadzący do rozwiązania problemu. Można go przedstawić na schemacie blokowym.
Słowo „algorytm” pochodzi od łacińskiego słowa algorithmus, oznaczającego wykonywanie działań przy pomocy liczb arabskich (w odróżnieniu od abacism – przy pomocy abakusa), które z kolei wzięło się od nazwy „Algoritmi”, zlatynizowanej wersji nazwiska „al-Chwarizmi” Abu Abdullaha Muhammada ibn Musy al-Chuwarizmiego, matematyka perskiego z IX wieku.
Zadaniem algorytmu jest przeprowadzenie systemu 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.
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.
W niektórych krajach (między innymi Stanach Zjednoczonych) algorytmy mogą zostać opatentowane, jeżeli zostaną zaimplementowane w jakimś praktycznym celu. Przeciwnicy tego podejścia twierdzą, że patentowanie algorytmów spowalnia rozwój informatyki, bo jeden producent może uzyskać monopol na pisanie oprogramowania tworzącego pewne typy plików (jak było to w przypadku GIF). Wiele koncernów komputerowych prowadzi między sobą spory prawne dotyczące praw własności do niektórych patentów. Kontrargumentem zwolenników patentów na oprogramowanie jest prawo własności intelektualnej (którą jest na przykład utwór muzyczny, będący wytworem intelektu i pracy muzyka), zakładające, że program jest intelektualną własnością twórcy.

context: Prawidłowy algorytm komputerowy musi kiedyś zakończyć swoją pracę. Oznacza to, że problem musi być rozwiązany z wykorzystaniem dostępnych zasobów obliczeniowych, w skończonym czasie. Jeżeli czas obliczeń algorytmu, dla coraz większego zbioru danych, rośnie szybciej niż dowolna funkcja wielomianowa, to mówi się, że nie jest praktycznie obliczalny. Jedną z klas problemów, dla których nie znamy wielomianowych rozwiązań, są problemy NP-trudne. Jeśli znamy wielomianowy algorytm weryfikujący poprawność rozwiązania problemu NP-trudnego, to problem ten nazywamy NP-zupełnym. Pytanie, czy P=NP, czyli czy istnieją szybkie algorytmy rozwiązujące problemy NP-zupełne, jest jednym z najbardziej palących pytań we współczesnej informatyce. Ponadto istnieją problemy nierozwiązywalne za pomocą żadnego algorytmu.
qas: question: Czy algorytm komputerowy trwa w nieskończoność?
answers: text: Prawidłowy algorytm komputerowy musi kiedyś zakończyć swoją pracę
generative_answer: nie

question: Kiedy algorytm traci praktyczną obliczalność?
answers: text: czas obliczeń algorytmu, dla coraz większego zbioru danych, rośnie szybciej niż dowolna funkcja wielomianowa
generative_answer: czas obliczeń algorytmu, dla coraz większego zbioru danych, rośnie szybciej niż dowolna funkcja wielomianowa

question: Czym są problemy NP-trudne?
answers: text: nie znamy wielomianowych rozwiązań
generative_answer: nie znamy wielomianowych rozwiązań

question: Jak określa się problem NP-trudny do którego znany jest algorytm rozwiązania?
answers: text: NP-zupełnym
generative_answer: NP-zupełnym

question: Czy każdy problem da się rozwiązać za pomocą algorytmu?
answers: text: Ponadto istnieją problemy nierozwiązywalne za pomocą żadnego algorytmu
generative_answer: nie