Azt mondták, hogy a program tartalmaz algoritmusokat, azonban ha hivatkozunk a definíciójukra, akkor az algoritmus egy utasítássorozat, egy meghatározott feladat végrehajtása, és a számítógépes program egyben az utasítások sorozata egy (néhány) feladat számítógéppel történő végrehajtásához.
Akkor miben különbözik a program az algoritmustól? Ez is egyfajta algoritmus?
Valójában formális definíciókat keresek egy algoritmus és egy számítógépes program számára, hogy meg tudjam különböztetni őket egymástól, vagy azonosíthassam a programon belüli algoritmusokat.
Frissítés : A Wikipédiában informális meghatározással (legalábbis szintaktikailag) észrevettem, hogy bármely program algoritmus.
Informális definíció lehet “olyan szabálykészlet, amely pontosan meghatározza a műveletek sorozatát”, amely tartalmazná az összes számítógépes programot , beleértve azokat a programokat is, amelyek nem végeznek numerikus számításokat. Általában a program csak algoritmus, ha végül leáll .
Válasz
Ugyanazt a választ fogom adni, mint amit a kérdés előző alkalommal adtam meg.
Először is értse meg, hogy az írás idején nincs jó formális definíció az “algoritmusról”. A kulcsszó itt a “formális”.
Vannak azonban okos emberek dolgoznak rajta.
Azt tudjuk, hogy bármi is legyen az “algoritmus”, valahol a “matematikai függvény” és a “számítógépes program” között helyezkedik el.
A matematikai függvény formális fogalom a bemenetekről a kimenetekre történő leképezéshez. Tehát például a “rendezés” egy leképezhető elemek sorozata és azonos típusú megrendelhető elemek sorozata közötti leképezés, amely az egyes szekvenciákat rendezett szekvenciájukhoz rendeli. Ez a függvény különböző algoritmusok (pl. egyesítés rendezése, halom rendezés) segítségével valósíthatók meg. Minden algoritmus viszont különböző programok használatával valósították meg (még ugyanazt a programozási nyelvet is megadva).
Tehát a legjobb megoldás az algoritmus használatához, hogy ez valamilyen ekvivalencia osztály a programokon, ahol kettő a programok akkor egyenértékűek, ha “lényegében ugyanazt csinálják”. Bármely két programnak, amely ugyanazt az algoritmust valósítja meg, ugyanazt a függvényt kell kiszámítania, de az ellenkezője nem igaz.
Hasonlóképpen van egy ekvivalencia osztály az algoritmusok között, ahol két algoritmus ekvivalens, ha ugyanazt a matematikai függvényt számítják ki .
Mindennek az a nehéz része, hogy megpróbálja megragadni, hogy mit értünk „lényegében ugyanazon a dolgon”.
Van néhány nyilvánvaló dolog, amelyet bele kell foglalnunk. Például két program lényegében azonos, ha csak változó átnevezéssel különböznek egymástól. A legtöbb programozási nyelv modellben az “ekvivalencia” natív fogalmai vannak (pl. Béta-redukció és eta-konverzió a lambda-számításban), ezért ezeket is be kell dobnunk.
Bármelyik ekvivalencia-relációt is választjuk, ez ad némi struktúrát . Az algoritmusok azért alkotnak kategóriát, hogy ők a programok hányadoskategóriája. Néhány érdekes ekvivalencia-kapcsolat ismeretes érdekes kategorikus struktúrákat eredményez; például a primitív rekurzív algoritmusok kategóriája univerzális objektum a kategóriák kategóriájában. Valahányszor érdekes ilyen szerkezetet lát, tudja, hogy ez a vizsgálati vonal valószínűleg hasznos lesz.
Megjegyzések
- Köszönöm a pontos választ, csak egy másik kérdés. Ha bármilyen programot figyelembe veszünk, függetlenül attól, hogy mit csinál, akkor is kapnak néhány bemenetet, követnek néhány utasítást, és néhány eredményt adnak a végrehajtás során. Lehet, hogy még nem is oldják meg ‘ semmilyen problémát (ahogy hívjuk), de ez még mindig egy leképezés. ismert algoritmus lehet, mármint bármilyen program?
- Ha ‘ helyesen olvasom, akkor ‘ újra megkérdezzük, hogy egy ” algoritmus ” formális meghatározásának tartalmaznia kell-e vagy sem azt a feltételt, hogy ” hasznos “. Azt mondanám, hogy ” nem “, már csak azért is, mert ezt ‘ lehetetlen formalizálni fogalma.
- sajnálom! az angol nyelvem nem megfelelő, akkor azt mondod, hogy ” no ” mire? elismeri, hogy ‘ lehetetlen formalizálni a program hasznosságát, és csak definíció szerint bármelyik program algoritmus? vagy azt mondja, hogy ‘ szükséges, hogy fontolóra vegyük az algoritmus mellett a hasznosságot?
- Nem gondolom, hogy egy ” algoritmus formális meghatározása ” megköveteli, hogy hasznos legyen, mert ” hasznos ” ‘ t formálisan meg kell határozni.
- A válaszod a leghasznosabb ebben a szálban +1. Úgy vélem, hogy ” lényegében ugyanaz a dolog “,
értelemileg egyenértékű “. Ezenkívül úgy gondolom, hogy az összes program lényegében algoritmus (mint az OP mondja), mivel minden program megvalósítás, amely valamilyen bemenetet leképez valamilyen kimenetre, még akkor is, ha ez a leképezés implicit. Mint kijelentette, minden a perspektívától függ.
Válasz
Végül a különbség a perspektíva . A program egy program: állítások sorozata valamilyen nyelven, esetleg programozási nyelv vagy gépi szintű utasítások. Az algoritmusokat általában magasabb szinten írják le, mint a gépi utasítások vagy a programozási nyelv utasításai, de a szint magas szintje meglehetősen rugalmas. Például bizonyos esetekben a “Rendezd a tömböt, majd nézd meg a $ k $ th elemet” tökéletesen leírja az algoritmust a tömb $ k $ th legnagyobb objektumának megtalálásához; más körülmények között érdemes sokkal részletesebben megadni a rendezés módját.
Ahogy mondod, az algoritmus valami olyasmi, mint “a számítások során követendő folyamat vagy szabálykészlet vagy más probléma -megoldási műveletek, különösen számítógéppel. ” Szóval, szó szerint minden program egy algoritmus. Általában azonban olyan programokról beszélünk, amelyek megvalósítják algoritmusokat. Általában az algoritmus leírásakor kerüljük az alacsony szintű részleteket arról, hogy pontosan miként valósulnak meg a dolgok, feltételezve, hogy egy hozzáértő programozó képes lenne végrehajtani azt az általuk választott nyelven.
Megjegyzések
- Úgy gondolom, hogy az algoritmus pontos összefüggése a matematikai koncepcióval, a lambda-számológéppel vagy a Turing-géppel, még mindig nem tudom ‘ absztrakciós nyelv? matematika vagy természetes nyelv, sok elmosódott állítással
- @Ahmad algoritmus informális fogalom. Nincs hivatalos meghatározása. Bizonyos értelemben ‘ olyan, mint egy matematikai bizonyítás, amely különbözik a formális bizonyítási rendszer formális igazolásától. Úgy gondoljuk, hogy az informális igazolások ” testreszabhatók ” formális igazolásokra bármely választott (elég erős) formális bizonyítási rendszerben, akárcsak minden másban az algoritmus bármely (Turing-teljes) programozási nyelven teljes mértékben megvalósítható.
Válasz
Algoritmusok a Turing-ben -teljes gondolkodásmódot általában bemenet és kimenet határozza meg. A valós programok többet tesznek;
- kommunikálnak a felhasználóval,
- kommunikálnak más gépekkel,
- reagálnak a környezetre,
- nem szűnnek meg és még mindig hasznosak,
és még sok más. Ezeket a dolgokat általában nem veszik figyelembe algoritmusokban vagy számítási elméletekben, de elengedhetetlenek a legtöbb program számára.
Megjegyzések
- Ez nagyon jó szempont. De ilyesmire gondolsz: “, amelyet általában a bemenet és a kimenet leképezésének eszközeként határoznak meg “? Csak a bemenet és a kimenet megadása nem elég ‘ t: pl. Az mergesort és a quicksort ugyanazt a kimenetet hozza létre bármely bemenetből, de ‘ nem veszi figyelembe hogy ugyanaz az algoritmus legyek.
- @DavidRicherby a PL-értelemben vett specifikációra gondoltam; nem adunk meg mást ‘, ezért az algoritmusok nem tehetnek mást. Természetesen a specifikációnál többet kell megadnunk egy konkrét algoritmus leírásához.
- Jó pontok, de ha beismerjük, hogy végül bármely program algoritmus, akkor nem ‘ nem tudom, hogyan mérik az algoritmus alapján azokat a kérdéseket, amelyekkel foglalkoztak. Esetleg egy AI-téma ?!
- Ki ismeri el ezt és miért? És mit értesz itt mérték alatt? (És én biztosan nem látom itt az AI szöget.)
- @Raphael elismerhetem (a szintaxis megnézésével minden program hasonlónak tűnik, utasítások szekvenciái, vagy a bemenet és a kimenet leképezése), csak nem tudom, hogy ‘ nem tudom, hogy a program más funkciói (azok, akiket megcímzett) hogyan vonhatók ki ebből a definícióból. például a gyors rendezés és a MATLAB vagy a Windows Media Player közötti különbség !!
Válasz
-
Az algoritmus szisztematikus megközelítés egy adott probléma megoldásához.
-
A program a számítógép utasításainak halmaza, amelyet követni kell.
A programnak ezért nem is kell megoldania a problémát.Biztos vagyok benne, hogy mindannyian el tudunk gondolni több olyan programot, amely több problémát okozott, mint amennyit megoldottak. Egy program lehet sok algoritmus megvalósítása, vagy algoritmus megvalósítható számos program összefűzésével. Egy program még algoritmusokat sem tartalmazhat. Például az üres program, amely egyszerűen kilép, vagy akár egy Hello World, algoritmus nélküli programnak tekinthető.
Mivel egy algoritmus megold egy adott problémát, egy adott egész koncepcióra összpontosít. Ezért egy algoritmus absztrakt lépéseket biztosít a kapcsolódó információk egy halmazának a származtatott információk különböző halmazává történő feldolgozásához. Egy program nem követeli meg, hogy alkotóelemei konceptuálisan kapcsolatban álljanak egymással. Például egy programnak lehet húsvéti tojása, de egy algoritmusnak nevezett dolognak nem szabad. Lehet, hogy vírus vagy trójai program leselkedik, de algoritmusban nem. A legközelebb egy algoritmus ehhez képes elérni egy titkosító algoritmus hátsó ajtaját, ahol a tervezett hiba az algoritmus által létrehozott információs kapcsolat része.
És végül egy program, ahogy van rövidítése egy számítógépes programnak, tautológiailag számítógépre van szükség. Egy algoritmus nem. Ha szisztematikusan elkülönítem az ingeket, nadrágokat és zoknikat a mosodámtól, mielőtt eltenném őket, ez egy algoritmus. A kapcsolódó bemenetekkel és kimenetekkel foglalkozik, folyamatábrában leírható, és kiszámítható következményekkel jár a hatékonyság szempontjából (például a ruhadarabok száma, amelyeket össze kell hasonlítani a megfelelő zoknik megtalálásához).
Válasz
Az algoritmus egy fogalom vagy ötlet. Ez egy hivatalos megoldás a probléma megoldására. Az algoritmusok kifejezhetők vagy megvalósíthatók számos programozási nyelven (általában szinte bármely nyelv képes bármilyen algoritmust megvalósítani). Néhány példát el kell olvasnia a Wikipedia algoritmusok rendezése oldalán.
A számítógépes program egy meghatározott programozási nyelvű utasítássorozat . Egy program sok algoritmus megvalósítását tartalmazhatja. Az Excel egy program, de a rendezési képességei az algoritmus megnyilvánulásai.
Válasz
Az algoritmus egy önálló, lépésről lépésre lebonyolított műveletek halmaza, amelyet egy adott probléma vagy problémaosztály megoldására kell végrehajtani.
A számítógépes program az utasítások, amelyek megfelelnek egy adott programozási nyelv szabályainak, és egy adott feladat számítógéppel történő végrehajtására íródnak.
Az algoritmusok általánosak és lefordítandók speciális programozási nyelv (megvalósítva).
Megjegyzések
- De a kérdés lényege, hogy egy program (akár a forráskódja, akár a lefordított bináris ) egy ” önálló, lépésről-lépésre haladó műveletsor, amelyet egy adott probléma vagy problémakör megoldására kell végrehajtani. ”
- De nem ‘ t. Egy program nem th műveletek, de ezek megvalósítása : valami, ami végrehajtja őket egy adott kontextusban. Például. a Unix
sort
segédprogram nem rendezési algoritmus, hanem rendezési algoritmust használ .
Válasz
Egy algoritmus lépésről lépésre fejezi ki elképzeléseinket vagy megoldásainkat egy adott problémára. ez csak a probléma megoldása és az ember számára érthető megközelítés, a számítógépes rendszer esetében nem
A program lépésről lépésre történik, amelyet a probléma számítógépes rendszerrel történő megoldására hajtanak végre. ennek nemcsak a programozónak, hanem a számítógépnek is érthetőnek kell lennie.
Megjegyzések
- Üdvözöljük a Computer Science Stack Exchange szolgáltatásban. Kérjük, olvassa el a cs.stackexchange.com/tour.if oldalt, amelyet még nem tett meg.
Válasz
A többi válasz itt szerintem elmulaszt egy fontos pontot. Az „algoritmus” definíciója, amelyet megtanítottam, magában foglalta azt a követelményt, hogy az eljárás minden bemenetre leálljon . Természetesen ez a “programot” az eljárások szélesebb osztályává teszi, mint az “algoritmus”, mivel egyes programok minden bemenetre leállnak, mások pedig nem.
Megjegyzések
- Ez nem univerzális. Az általam tanított meghatározás nem tartalmazta ezt a követelményt.
Válasz
Íme néhány módszer az algoritmus és a program közötti határvonal meghúzására:
Jelentős cél
A programokat céllal írják, és azok egy kísérletet jelentenek cél. Az algoritmusokat eszközként tekinthetjük a cél elérésére.
Pl. a csavarhúzó egy algoritmus a csavar állapotának módosítására, de maga a csavarhúzó nem rendelkezik ezzel a céllal.A cél annak a csavarhúzó-kezelőnek a fejében van, aki úgy tartja a programot, mint a polcok felrakását.
Üzleti logika
Ez a pont szorosan kapcsolódik a program céljához. Mivel a programoknak célja van, elkerülhetetlenül benne vannak a valós világ bitjei, például meghatározott dátumok, mérések, technológiák, nevek stb.
Az algoritmusok viszont nem tartalmaznak sem üzleti logikát, sem a valós világ bitjeit, és ahelyett, hogy működnének specifikus értékek változókon működnek.
Pl. ebben az értelemben összehasonlíthat egy olyan matematikai függvényt, mint az f(x) = x^2
, amely elvont és változókat használ, és egy főzési receptet, amely pontos értékeket tartalmaz (legalább egyet referenciaként).
Eredmény
Ez a pont szorosan kapcsolódik a program üzleti logikájához. Az ügynök (mint a webböngésző felhasználója) a program eredményét nem algoritmus eredményeként fogyasztja.
Pl. a főzési recept fogyasztója a süteményt nem tejszínhab vagy sütő felmelegítéséből ered.
Megjegyzések
- Talán jobb lenne ezt mondani a csavarhúzónak ‘ nincs szándéka csavarokat forgatni? A mindennapi angol nyelvben minden bizonnyal azt mondanánk, hogy egy csavarhúzónak célja a csavarok elforgatása: a csavarok elforgatására pontosan azt tervezték.
- Emellett I ‘ nem tudom, mit értesz ” üzleti logika alatt ” (sok programnak nincs köze vállalkozással), vagy azzal, hogy egy ” algoritmus nem tartalmaz sem üzleti logikát, sem pedig a valós világ bitjeit “. Például tökéletesen meg tudnék fogalmazni egy legrövidebb út algoritmust a városok és utak, nem pedig a csúcsok és az élek szempontjából. ‘ t az algoritmus akkor ” nem tartalmazza a való világ bitjeit ” ?
- @DavidRicherby, igazad van, a fogalmazásom félreérthető. Amire gondoltam, az egy értelmes cél. A csavarok elforgatása a csavarok fordításához ugyanúgy értelmetlen, mint a soha nem használt tömb rendezése. Üzleti logika alatt az összes programlogikát értem, kivéve a közüzemi logikát és a technológiai verem kazánt, vagyis az összes logikát, amely ténylegesen megvalósítja a program célját, vagyis a sütemény sütésének üzleti logikája az összetevők és a sütés keverése, és nem tartalmazza a keverés vagy sütés megtanulását ( ami ebben az esetben újrafelhasználható segédlogika).
- @DavidRicherby, ami a valós világ bitjeihez vonatkozik, az aktualizálást értem, vagyis egy algoritmustól eltérõ programnak valamilyen módon kommunikálnia kell a fizikai világ. Az algoritmus viszont pusztán matematikai fogalom lehet.
Válasz
I Biztos vagyok benne, hogy más válaszok is elég jók ahhoz, hogy átvegyék a vezetést, de itt látom a különbséget egy algoritmus és a program között
-
Az algoritmus egyszerűen a géptől független lépésekből áll, amelyeket valamilyen sorrendben követni kell a probléma megoldásához.
-
iv
A program egy utasításkészlet egy adott géptípus számára algoritmus gyakorlásához .
Például.
Tegyük fel, hogy van algoritmusa, amelyre van egy lépés eljutni egy adott helyre, mielőtt más lépést tesz. Az elérés ezen lépésének végrehajtási módja nincs pontosan meghatározva. Választhat gyaloglás, futás vagy buszozás mellett, de ez attól függ, hogyan választja meg a megvalósítást (ami a prog ram).
Mondhatjuk, hogy az algoritmus a program absztrakciója, vagyis hiányzik a pontos részletek, de tervet készít valamire .