Říká se, že program obsahuje algoritmy, ale pokud odkazujeme na jejich definici, je algoritmus posloupností instrukcí zapsaných do provést zadaný úkol a počítačový program je také posloupností pokynů k provedení (některých) úkolů s počítačem.
Čím se potom program liší od algoritmu? je to také typ algoritmu?
Ve skutečnosti hledám formální definice algoritmu a počítačového programu, abych je mohl od sebe odlišit nebo identifikovat algoritmy v rámci programu.
Aktualizace : Na Wikipedii jsem si všiml neformální definicí (alespoň syntakticky), že každý program je algoritmus.
Neformální definicí by mohla být „sada pravidel, která přesně definuje posloupnost operací.“, která by zahrnovala všechny počítačové programy , včetně programů, které neprovádějí numerické výpočty. Program je obecně pouze algoritmus , pokud se nakonec zastaví .
Odpověď
Budu dávat stejnou odpověď, jakou jsem dával před časem, kdy tato otázka přišla.
Nejprve si uvědomte, že v době psaní tohoto článku neexistuje dobrá formální definice „algoritmu“. Zde je klíčové slovo „formální“.
Existují však chytří lidé, kteří na tom pracují.
Víme, že jakýkoli „algoritmus“ je, je někde mezi „matematickou funkcí“ a „počítačovým programem“.
Matematická funkce je formální představa o mapování ze vstupů na výstupy. Například „sort“ je mapování mezi posloupností objednatelných položek a posloupností objednatelných položek stejného typu, které mapuje každou posloupnost na její seřazenou posloupnost. Tato funkce může být implementovány pomocí různých algoritmů (např. třídění sloučení, třídění haldy). Každý algoritmus zase může být implementováno pomocí různých programů (i když mají stejný programovací jazyk).
Takže nejlepší způsob, jakým máme „algoritmus“, je, že jde o nějakou třídu ekvivalence v programech, kde dva programy jsou ekvivalentní, pokud dělají „v podstatě totéž“. Jakékoli dva programy, které implementují stejný algoritmus, musí vypočítat stejnou funkci, ale obrácení není pravdivé.
Podobně existuje třída ekvivalence mezi algoritmy, kde jsou dva algoritmy ekvivalentní, pokud počítají stejnou matematickou funkci .
Nejtěžší částí všeho je snaha zachytit, co máme na mysli „v podstatě stejnou věcí“.
Existuje několik zřejmých věcí, které bychom měli zahrnout. Například dva programy jsou v podstatě stejné, pokud se liší pouze proměnným přejmenováním. Většina modelů programovacích jazyků má nativní pojmy „ekvivalence“ (např. Redukce beta a konverze eta v lambda kalkulu), takže bychom je měli hodit také.
Ať už zvolíme jakýkoli vztah ekvivalence, získáme určitou strukturu . Algoritmy tvoří kategorii na základě skutečnosti, že se jedná o kvocientovou kategorii programů. Je známo, že některé zajímavé ekvivalenční vztahy vedou k zajímavým kategoriálním strukturám; například kategorie primitivních rekurzivních algoritmů je univerzálním objektem v kategorii kategorií. Kdykoli uvidíte takovou zajímavou strukturu, víte, že tato řada dotazů bude pravděpodobně užitečná.
Komentáře
- Děkuji za přesnou odpověď, jen další otázka. Pokud vezmeme v úvahu jakýkoli program, bez ohledu na to, co dělá, stále dostává nějaké vstupy a postupuje podle některých pokynů a při provádění dává nějaké výsledky. Dokonce nemusí ‚ vyřešit žádný problém (jak říkáme), ale stále jde o mapování. Mohli by to být známí algoritmy, myslím nějaký program?
- Pokud vás ‚ čtu správně, ‚ se ptáte, zda formální definice “ algoritmu “ má nebo nemá nést podmínku, že musí být “ užitečné „. Řekl bych, že “ no “ jen proto, že ‚ je nemožné to formalizovat představa.
- omlouvám se! moje angličtina není dobrá, pak řeknete “ ne “ na co? připouštíte, že ‚ není možné formalizovat užitečnost programu a jakýkoli program je podle definice algoritmus? nebo říkáte, že ‚ je nezbytné, abychom kromě algoritmu zvážili užitečnost?
- Nemyslím si ‚, že formální definice “ algoritmu “ by měl vyžadovat, aby to bylo užitečné, protože “ užitečné “ může ‚ formálně definováno.
- Vaše odpověď je v tomto vlákně nejužitečnější +1. Věřím, že “ v podstatě to samé “ znamená “ sémanticky ekvivalentní „. Také si myslím, že všechny programy jsou v podstatě algoritmy (jak říká OP), protože všechny programy jsou implementace, které mapují nějaký vstup na nějaký výstup, i když je toto mapování implicitní. Jak jste uvedli, vše závisí na perspektivě.
Odpověď
Rozdíl je nakonec v perspektivě . Program je program: posloupnost příkazů v nějakém jazyce, možná programovací jazyk nebo pokyny na úrovni stroje. Algoritmy jsou obvykle popsány na vyšší úrovni než strojové instrukce nebo příkazy programovacího jazyka, ale jak vysoká úroveň je poměrně flexibilní. Například za určitých okolností je „Řazení pole, poté pohled na $ k $ th prvek“ naprosto dobrý popis algoritmu pro vyhledání největšího $ k $ th objektu v poli; za jiných okolností možná budete chtít zadat mnohem podrobnější informace o tom, jak probíhá třídění.
Jak říkáte, algoritmus je něco jako „proces nebo sada pravidel, která je třeba dodržovat při výpočtech nebo jiných problémech -řešení operací, zejména pomocí počítače. “ Doslova řečeno, každý program je algoritmus. Obvykle však mluvíme o programech implementujících algoritmy. Obvykle se při popisu algoritmu vyhýbáme podrobnostem na nízké úrovni přesně toho, jak jsou věci implementovány, za předpokladu, že kompetentní programátor by jej dokázal implementovat v jazyce, který si zvolí.
Komentáře
- Myslím, že přesnost algoritmu souvisí s matematickým konceptem, lambda-kalkulem nebo Turingovým strojem, stále ještě ‚ nevím, co to je abstrakční jazyk? matematika nebo přirozený jazyk s mnoha fuzzy výroky
- Algoritmus @ Ahmad je neformální koncept. Nemá žádnou formální definici. V jistém smyslu to ‚ odpovídá matematickému důkazu, který se liší od formálního důkazu v systému formálních důkazů. Věříme, že neformální důkazy lze “ upřesnit “ na formální důkazy v jakémkoli zvoleném (dostatečně silném) systému formálních důkazů, stejně jako v jakémkoli jiném algoritmus lze plně implementovat v jakémkoli (Turingově-úplném) programovacím jazyce.
Odpověď
Algoritmy v Turingově -kompletní myšlení jsou obvykle specifikovány vstupem a výstupem. Skutečné programy dokážou víc;
- komunikují s uživatelem,
- komunikují s jinými stroji,
- reagují na prostředí,
- neukončují se a jsou stále užitečné,
a další. Tyto věci obvykle nejsou brány v úvahu v algoritmech nebo teorii výpočtu, ale jsou pro většinu programů zásadní.
Komentáře
- Toto je velmi dobrá věc. Máte ale na mysli něco jako “ obvykle určeno jako prostředek pro mapování vstupu na výstup „? Pouhé zadání vstupu a výstupu není dost ‚ t: např. Mergesort a quicksort produkují stejný výstup z jakéhokoli vstupu, ale nejsou považovány za ‚ být stejný algoritmus.
- @DavidRicherby Přemýšlel jsem o specifikaci ve smyslu PL; ‚ nic neurčujeme, takže algoritmy nemusí dělat nic jiného. K popisu konkrétního algoritmu samozřejmě musíme dát více, než je specifikace.
- Dobré body, ale pokud připustíme, že nakonec je jakýkoli program algoritmus, ne ‚ Nevíte, jak se ty záležitosti, které jste řešili, měří na základě algoritmu. Možná téma AI ?!
- Kdo by to připustil a proč? A co tím míníte? (A určitě zde ‚ nevidím úhel AI.)
- @Raphael to mohu přiznat (při pohledu na syntaxi vypadají všechny programy podobně, jsou to posloupnosti instrukcí nebo mapování vstupu na výstup), já prostě
nevím, jak lze z této definice extrahovat další funkce programu (ty, které jste oslovili). například rozdíl mezi rychlým tříděním a MATLABem nebo Windows Media Player !!
Odpověď
-
Algoritmus je systematický přístup k řešení konkrétního problému.
-
Program je sada pokynů, které má počítač dodržovat.
Program proto ani nemusí řešit problém.Jsem si jist, že si všichni dokážeme představit několik programů, které způsobily více problémů, než vyřešily. Program může být implementací mnoha algoritmů nebo může být algoritmus implementován propojením mnoha programů. Program může dokonce obsahovat žádné algoritmy. Například prázdný program, který jednoduše skončí, nebo snad dokonce Hello World, lze považovat za program bez algoritmu.
Protože algoritmus řeší konkrétní problém, je zaměřen na konkrétní koncept. Algoritmus proto poskytuje abstraktní kroky pro zpracování jedné sady souvisejících informací do jiné sady odvozených informací. Program nevyžaduje, aby jeho složky byly vůbec koncepčně spjaty. Například program může mít velikonoční vajíčko, ale věc správně nazývaná algoritmus by neměla. V programu může číhat virus nebo trojský kůň, ale ne v algoritmu. Nejbližší algoritmus k tomu může být něco jako backdoor v šifrovacím algoritmu, kde plánovaná chyba je součástí informačního vztahu vytvořeného algoritmem.
A konečně program jako takový zkratka pro počítačový program, tautologicky vyžaduje počítač. Algoritmus není. Pokud systematicky oddělím košile, kalhoty a ponožky od prádla před jejich odložením, jedná se o algoritmus. Zabývá se souvisejícími vstupy a výstupy, lze je popsat ve vývojovém diagramu a má kalkulovatelné důsledky z hlediska efektivity (například počet kusů oblečení, které je třeba porovnat, aby bylo možné najít odpovídající ponožky).
Odpověď
Algoritmus je koncept nebo nápad. Jedná se o formální přístup k řešení problému. Algoritmy lze vyjádřit nebo implementovat v různých programovacích jazycích (obvykle téměř jakýkoli jazyk může implementovat jakýkoli algoritmus). Několik příkladů byste si měli přečíst Algoritmy řazení ve Wikipedii.
Počítačový program je konkrétní posloupnost pokynů v konkrétním programovacím jazyce. . Program může obsahovat implementaci mnoha algoritmů. Excel je program, ale jeho možnosti řazení jsou projevem algoritmu.
Odpověď
Algoritmus je samostatná podrobná sada operací, které se mají provést při řešení konkrétního problému nebo třídy problémů.
Počítačový program je posloupnost instrukce, které vyhovují pravidlům konkrétního programovacího jazyka, napsané k provedení zadaného úkolu s počítačem.
Algoritmy jsou obecné a je třeba je přeložit do specifický programovací jazyk (implementován).
Komentáře
- Otázkou však je, že program (buď jeho zdrojový kód nebo kompilovaný binární soubor) ) je “ samostatná podrobná sada operací, které je třeba provést při řešení konkrétního problému nebo třídy problémů. “
- Ale není to ‚ t. Program není operace, ale jejich implementace : něco, co je provede v konkrétním kontextu. Např. obslužný program Unix
sort
není třídicí algoritmus, používá třídicí algoritmus.
odpověď
Algoritmus vyjadřuje naši myšlenku nebo řešení konkrétního problému krok za krokem. je to pouze řešení problému a lidský srozumitelný přístup, nikoli pro počítačový systém
Program je návod krok za krokem, který je implementován pro řešení problému počítačovým systémem. musí být srozumitelný nejen programátorovi, ale i počítači.
Komentáře
- Vítejte na Computer Science Stack Exchange. Přečtěte si cs.stackexchange.com/tour.if , které jste dosud neučinili.
Odpověď
Myslím, že ostatní odpovědi zde postrádají důležitý bod. Definice „algoritmu“, kterou jsem se naučil, zahrnovala požadavek, aby se procedura zastavila u všech vstupů . To přirozeně dělá z „programu“ širší třídu postupů než „algoritmus“, protože některé programy se zastaví na všech vstupech a jiné nikoli.
Komentáře
- To není univerzální. Definice, kterou jsem učil, tento požadavek nezahrnoval ‚.
Odpověď
Zde je několik způsobů, jak nakreslit hranici mezi algoritmem a programem:
Smysluplný účel
Programy jsou psány s určitým účelem a představují pokus o dosažení fotbalová branka. Algoritmy lze považovat za nástroje k dosažení tohoto cíle.
Např. šroubovák je algoritmus pro změnu stavu šroubu, ale samotný šroubovák k tomu nedrží účel.Účel spočívá v hlavě operátora šroubováku, který drží program jako vykládání polic.
Obchodní logika
Tento bod silně souvisí s účelem programu. Protože programy mají své účely, nevyhnutelně mají v sobě kousky reálného světa, jako jsou konkrétní data, měření, technologie, názvy atd.
Algoritmy na druhé straně neobsahují ani obchodní logiku, ani kousky reálného světa a místo toho, aby fungovaly na konkrétní hodnoty fungují na proměnných.
Např. v tomto smyslu můžete porovnat matematickou funkci jako f(x) = x^2
, která je abstraktní a funguje na proměnných s receptem na vaření, který obsahuje přesné hodnoty (alespoň jedna pro referenci).
Výsledek
Tento bod silně souvisí s obchodní logikou programu. Agent (jako uživatel webového prohlížeče) spotřebovává výsledek programu, nikoli výsledek algoritmu.
Např. spotřebitel receptu na vaření konzumuje dort, ne výsledek šlehačky nebo ohřevu v troubě.
Komentáře
- Možná by bylo lepší říci, že šroubovák nemá ‚ záměr otočit šrouby? V každodenní angličtině bychom určitě řekli, že šroubovák má účel otáčení šroubů: otáčení šroubů je přesně to, k čemu byl navržen.
- Také I ‚ si nejsem jistý, co máte na mysli “ obchodní logikou “ (mnoho programů nemá co dělat s obchodem) nebo vyslovením, že algoritmus “ neobsahuje ani obchodní logiku, ani kousky reálného světa „. Například bych mohl dokonale dobře formulovat algoritmus nejkratší cesty, pokud jde o města a silnice, spíše než vrcholy a hrany. Neobsahuje ‚ algoritmus “ … kousky skutečného světa “ ?
- @DavidRicherby, máte pravdu, moje frázování je nejednoznačné. Myslel jsem tím smysluplný účel. Otáčení šroubů k otáčení šroubů je zbytečné, stejně jako třídění pole, které se nikdy nepoužívá. Pod obchodní logikou mám na mysli veškerou logiku programu, s výjimkou obslužné logiky a technologického zásobníku, tj. Veškeré logiky, která skutečně plní účel programu, tj. Obchodní logika pečení dortu je míchání ingrediencí a pečení a nezahrnuje učení se mixovat nebo péct ( což je v tomto případě znovu použitelná logika utility).
- @DavidRicherby, pokud jde o bity reálného světa , mám na mysli aktualizaci, tj. program na rozdíl od algoritmu musí nějakým způsobem komunikovat s fyzický svět. Na druhé straně může být algoritmus čistě matematickým konceptem.
Odpověď
I jsem si docela jistý, že ostatní odpovědi jsou dost dobré, aby se ujaly vedení, ale zde vidím rozdíl mezi algoritmem a programem
-
Algoritmus se skládá z jednoduchých kroků (nezávislých na stroji), které je třeba dodržet, aby bylo možné problém vyřešit.
-
Program je sada instrukcí pro konkrétní typ stroje k procvičení algoritmu .
Například.
Řekněme, že máte algoritmus, který má krok pro dosažení konkrétního místa před provedením dalšího kroku. Jak tento krok dosažení bude proveden, není přesně definováno. Můžete se rozhodnout pro chůzi, běh nebo autobus, ale záleží na tom, jak se rozhodnete jej realizovat. (jaký je váš prog ram).
Můžete říci, že algoritmus je abstrakce programu, tj. chybí přesné podrobnosti, ale stanoví plán, jak něco udělat .