Det sies at et program inkluderer algoritmer, men hvis vi refererer til definisjonen deres, er en algoritme en sekvens av instruksjoner skrevet til utføre en spesifisert oppgave og et dataprogram er også en sekvens av instruksjoner for å utføre (noen) oppgaver med datamaskinen.
Hva skiller så et program fra en algoritme? er det også en type algoritme?
Jeg ser faktisk etter formelle definisjoner for en algoritme og et dataprogram, slik at jeg kan skille dem fra hverandre eller identifisere algoritmer i et program.
Oppdater : Jeg har lagt merke til i Wikipedia ved en uformell definisjon (i det minste syntaktisk) at ethvert program er en algoritme.
En uformell definisjon kan være «et sett med regler som presist definerer en sekvens av operasjoner.» som ville inkluderer alle dataprogrammer , inkludert programmer som ikke utfører numeriske beregninger. Generelt er et program bare en algoritme hvis det til slutt stopper .
Svar
Jeg kommer til å gi det samme svaret som jeg ga forrige gang dette spørsmålet kom opp.
Forstå først at det ikke er noen god formell definisjon av «algoritme» i skrivende stund. Nøkkelordet her er «formelt».
Det er imidlertid smarte mennesker som jobber med det.
Det vi vet er at uansett hva en «algoritme» er, sitter den et sted mellom «matematisk funksjon» og «dataprogram».
En matematisk funksjon er formell forestilling om en kartlegging fra innganger til utganger. Så, for eksempel, er «sorter» en kartlegging mellom en sekvens av bestillbare varer og en sekvens av bestillbare elementer av samme type, som tilordner hver sekvens til den ordnede sekvensen. Denne funksjonen kan implementeres ved hjelp av forskjellige algoritmer (f.eks. flette sortering, haugsortering). Hver algoritme kan i sin tur være det implementert ved hjelp av forskjellige programmer (til og med gitt samme programmeringsspråk).
Så det beste håndtaket vi har på hva en «algoritme» er, er at det er en slags ekvivalensklasse på programmer, hvor to programmer er likeverdige hvis de gjør «i det vesentlige det samme». To programmer som implementerer den samme algoritmen, må beregne den samme funksjonen, men det omvendte er ikke sant.
Tilsvarende er det en ekvivalensklasse mellom algoritmer, der to algoritmer er ekvivalente hvis de beregner den samme matematiske funksjonen .
Den vanskelige delen av alt dette er å prøve å fange opp det vi mener med «egentlig det samme».
Det er noen åpenbare ting vi bør inkludere. For eksempel er to programmer i det vesentlige de samme hvis de bare skiller seg ved variabel omdøping. De fleste modeller av programmeringsspråk har innfødte forestillinger om «ekvivalens» (f.eks. Beta-reduksjon og eta-konvertering i lambdakalkulus), så vi bør også kaste dem inn.
Uansett hvilken ekvivalensrelasjon vi velger, gir dette oss litt struktur . Algoritmer danner en kategori i kraft av at de er kvotientkategorien for programmer. Noen interessante ekvivalensforhold er kjent for å gi opphav til interessante kategoriske strukturer; for eksempel er kategorien primitive rekursive algoritmer et universelt objekt i kategorien kategorier. Når du ser en interessant struktur slik, vet du at denne henvendelsen sannsynligvis vil være nyttig.
Kommentarer
- Takk for ditt nøyaktige svar, bare et spørsmål til. Hvis vi vurderer noe program, uansett hva det gjør, får de fremdeles noen innspill og følger noen instruksjoner, og gir noen resultater når de blir utført. De løser kanskje ikke ‘ t løser noe problem (som vi kaller), men det er fortsatt en kartlegging. kunne de være kjent algoritme, mener jeg noe program?
- Hvis jeg ‘ jeg leser deg riktig, vil du ‘ spør om en formell definisjon av en » -algoritme » skal eller ikke skal ha det forbehold at den må være » nyttig «. Jeg vil si » nei «, om bare fordi det ‘ er umulig å formalisere det forestilling.
- beklager! min engelsk er ikke bra, så sier du » nei » til hva? du innrømmer at det ‘ er umulig å formalisere nytten av et program, og bare per definisjon er noe program en algoritme? eller sier du det ‘ er nødvendig at vi anser nytten ved siden av algoritmen?
- Jeg tror ikke ‘ t tror at en formell definisjon av en » algoritme » bør kreve at den er nyttig, fordi » nyttig » kan ‘ ikke defineres formelt.
- Svaret ditt er det mest nyttige i denne tråden +1. Jeg tror at » egentlig det samme «, du mener » semantisk ekvivalent «. Jeg tror også at alle programmer i det vesentlige er algoritmer (som OP sier), siden alle programmer er implementeringer som kartlegger noe input til noe output, selv om denne kartleggingen er implisitt. Som du sa, avhenger alt av perspektivet.
Svar
Til slutt er forskjellen perspektiv . Et program er et program: en sekvens av utsagn på et eller annet språk, kanskje et programmeringsspråk eller instruksjoner på maskinnivå. Algoritmer blir vanligvis beskrevet på et høyere nivå enn maskininstruksjoner eller programmeringsspråk, men hvor høyt nivå er ganske fleksibelt. For eksempel er «Sorter matrisen, så se på $ k $ th-elementet» i noen tilfeller en perfekt beskrivelse av en algoritme for å finne det $ k $ th største objektet i en matrise; under andre omstendigheter vil du kanskje spesifisere mye mer detaljert informasjon om hvordan sorteringen foregår.
Som du sier, er en algoritme omtrent som «en prosess eller et sett med regler som skal følges i beregninger eller andre problemer – å løse operasjoner, spesielt med en datamaskin. » Så bokstavelig talt er hvert program en algoritme. Vanligvis snakker vi imidlertid om programmer som implementerer algoritmer. Når vi beskriver en algoritme, unngår vi vanligvis detaljer på lavt nivå om nøyaktig hvordan ting blir implementert, forutsatt at en kompetent programmerer vil være i stand til å implementere den i det språket de selv velger.
Kommentarer
- Jeg tror algoritmens nøyaktige forhold er relatert til matematikk-begrepet, lambda-calculus eller Turing-maskin, men vet fortsatt ikke ‘ abstraksjonsspråk? matematikk eller et naturlig språk med mange uklare utsagn
- @Ahmad Algoritme er et uformelt begrep. Den har ingen formell definisjon. På en måte er det ‘ som et matematisk bevis, som er forskjellig fra et formelt bevis i et formelt bevissystem. Vi tror at uformelle bevis kan » utfylles » til formelle bevis i ethvert valgt (sterkt nok) formelt bevis system, akkurat som alle andre algoritme kan implementeres fullt ut i ethvert (Turing-komplett) programmeringsspråk.
Svar
Algoritmer i Turing -komplett tankesett spesifiseres vanligvis av input og output. Ekte programmer gjør mer; de
- kommuniserer med brukeren,
- kommuniserer med andre maskiner,
- reagerer på miljøet,
- ikke avsluttes og er fremdeles nyttige,
og mer. Disse tingene blir vanligvis ikke vurdert i algoritmer eller teori for beregning, men er essensielle for de fleste programmer.
Kommentarer
- Dette er et veldig bra poeng. Men mener du noe sånt som » som vanligvis er spesifisert som et middel for å kartlegge inngang til utdata «? Bare å spesifisere inngang og utgang er ikke ‘ t nok: f.eks. Fusjonssortering og kviksort produserer den samme utgangen fra hvilken som helst inngang, men vurderes ikke ‘ å være den samme algoritmen.
- @ DavidRicherby Jeg tenkte på spesifikasjon i PL-forstand; vi spesifiserer ikke ‘ noe annet, så algoritmer kan ikke gjøre noe annet. Selvfølgelig må vi gi mer enn spesifikasjonen for å beskrive en konkret algoritme.
- Gode poeng, men hvis vi innrømmer at til slutt et hvilket som helst program er en algoritme, donerer jeg ikke ‘ ikke vet hvordan de sakene du adresserte blir målt med en algoritme. Kanskje et AI-tema ?!
- Hvem vil innrømme det, og hvorfor? Og hva mener du med mål her? (Og jeg ser absolutt ikke ‘ t AI-vinkelen her.)
- @Raphael Jeg kan innrømme det (ved å se på syntaksen, ser alle programmene ut, de er sekvenser av instruksjoner, eller kartlegging av input til output), jeg vet bare ikke ‘ hvordan andre funksjoner i et program (de du adresserte) kan hentes fra den definisjonen. for eksempel forskjellen mellom quick-sort og MATLAB eller Windows Media Player !!
Svar
-
En algoritme er en systematisk tilnærming til å løse et bestemt problem.
-
Et program er et sett med instruksjoner som en datamaskin skal følge.
Et program trenger derfor ikke en gang å løse et problem.Jeg er sikker på at vi alle kan tenke på flere programmer som har forårsaket flere problemer enn de har løst. Et program kan være en implementering av mange algoritmer, eller en algoritme kan implementeres ved å lappe sammen mange programmer. Et program kan til og med ikke inneholde algoritmer. For eksempel kan det tomme programmet som bare avsluttes, eller kanskje til og med en Hello World, betraktes som et program uten algoritme.
Siden en algoritme løser et spesifikt problem, er det fokusert på et bestemt helhetskonsept. En algoritme gir derfor abstrakte trinn for å behandle ett sett relatert informasjon til et annet sett avledet informasjon. Et program krever ikke at bestanddelene i det hele tatt er konseptuelt relatert. For eksempel kan et program ha et påskeegg, men en ting som kalles en algoritme, burde ikke. Du kan ha et virus eller trojaner som lurer i et program, men ikke i en algoritme. Det nærmeste en algoritme kan komme dette, vil være noe som en bakdør i en krypteringsalgoritme, der den planlagte feilen er en del av informasjonsforholdet etablert av algoritmen.
Og til slutt, et program, som det er kort for et dataprogram, krever tautologisk en datamaskin. En algoritme gjør det ikke. Hvis jeg systematisk skiller skjorter, bukser og sokker fra tøyet mitt før jeg legger dem bort, er dette en algoritme. Den omhandler relaterte innganger og utganger, kan beskrives i et flytskjema og har kalkulerbare konsekvenser når det gjelder effektivitet (for eksempel antall klesplagg som må sammenlignes for å finne matchende sokker).
Svar
En algoritme er et begrep eller en idé. Det er en formell tilnærming for å løse et problem. Algoritmer kan uttrykkes, eller implementeres, på en rekke programmeringsspråk (vanligvis kan nesten hvilket som helst språk implementere hvilken som helst algoritme). For noen eksempler bør du lese gjennom Sorteringsalgoritmer i Wikipedia.
Et dataprogram er en spesifikk sekvens av instruksjoner i et bestemt programmeringsspråk. . Et program kan inneholde implementering av mange algoritmer. Excel er et program, men det er sorteringsegenskaper som er manifestasjonen av en algoritme.
Svar
En algoritme er et selvstendig trinnvis sett med operasjoner som skal utføres for å løse et bestemt problem eller en klasse med problemer.
Et dataprogram er en sekvens av instruksjoner som overholder reglene til et bestemt programmeringsspråk, skrevet for å utføre en spesifisert oppgave med en datamaskin.
Algoritmer er generelle og må oversettes til en spesifikt programmeringsspråk (implementert).
Kommentarer
- Men hele poenget med spørsmålet er at et program (enten dets kildekode eller den kompilerte binære ) er » et selvstendig trinnvis sett med operasjoner som skal utføres for å løse et spesifikt problem eller en klasse av problemer. »
- Men det er ikke ‘ t. Et program er ikke det bruke operasjoner, men en implementering av dem: noe som utfører dem i en bestemt sammenheng. F.eks. Unix
sort
verktøyet er ikke en sorteringsalgoritme, det bruker en sorteringsalgoritme.
Svar
En algoritme uttrykker vår idé eller løsning for et spesifikt problem trinnvis. det er bare problemløsing og menneskelig forståelig tilnærming ikke for datasystem
Programmet er trinnvise instruksjoner som implementeres for å løse problemer via datasystemet. det må være forståelig av ikke bare programmerer også datamaskinen.
Kommentarer
- Velkommen til Computer Science Stack Exchange. Les cs.stackexchange.com/tour.if du har ikke gjort det ennå.
Svar
De andre svarene her, tror jeg, savner et viktig poeng. Definisjonen av «algoritme» som jeg fikk opplæring inkluderte kravet om at prosedyren stopper på alle innganger . Naturligvis gjør det «program» til en bredere klasse av prosedyrer enn «algoritme», siden noen programmer stopper på alle innganger, og andre ikke.
Kommentarer
- Dette er ikke universelt. Definisjonen jeg ble lært inkluderte ikke ‘ det kravet.
Svar
Her er et par måter å trekke linjen mellom en algoritme og et program:
Meningsfullt formål
Programmer er skrevet med et formål og representerer et forsøk på å oppnå en mål. Algoritmer kan sees på som verktøy for å nå dette målet.
F.eks. en skrutrekker er en algoritme for å endre tilstanden til en skrue, men skrutrekkeren selv har ikke et formål å gjøre det.Formålet er i hodet på skrutrekkeroperatøren som holder programmet som å legge hyller.
Forretningslogikk
Dette punktet er sterkt knyttet til formålet med et program. Siden programmer har formål, har de uunngåelig biter av den virkelige verden i seg, som spesifikke datoer, målinger, teknologier, navn osv. spesifikke verdier opererer på variabler.
F.eks. i denne forstand kan du sammenligne en matematisk funksjon som f(x) = x^2
som er abstrakt og opererer på variabler til en matlagingsoppskrift som inneholder nøyaktige verdier (minst en for referanse).
Resultat
Dette punktet knytter seg sterkt til forretningslogikken til et program. En agent (som en bruker av en nettleser) forbruker resultatet av et program, ikke resultatet av en algoritme.
F.eks. forbrukeren av en matlagingsoppskrift forbruker kaken, ikke resultatet av piskekrem eller oppvarmingsovn.
Kommentarer
- Kanskje det er bedre å si at skrutrekkeren har ikke ‘ ikke hensikten å skru på skruene? På dagligdags engelsk vil vi absolutt si at en skrutrekker har det formål å vri skruene: å skru på skruene er den nøyaktige tingen den ble designet for å gjøre.
- I ‘ jeg er ikke sikker på hva du mener med » forretningslogikk » (mange programmer har ingenting å gjøre med virksomhet) eller ved å si at en algoritme » verken inneholder forretningslogikk eller biter av den virkelige verden «. For eksempel kunne jeg meget vel uttrykke en korteste algoritme når det gjelder byer og veier i stedet for hjørner og kanter. Inneholder ‘ ikke algoritmen, så » … biter av den virkelige verden » ?
- @ DavidRicherby, du har rett, min formulering er tvetydig. Det jeg mente er et meningsfullt formål. Å skru på skruene for å skru skruene er meningsløst, like godt som å sortere en matrise som aldri brukes. Med virksomhetslogikk mener jeg all programlogikk, bortsett fra verktøylogikk og teknologiestak, dvs. all logikk som faktisk implementerer formålet med programmet, dvs. forretningslogikken med å bake en kake er å blande ingredienser og baking og inkluderer ikke å lære å blande eller bake ( som er gjenbrukt nyttelogikk i dette tilfellet).
- @DavidRicherby, som for biter av den virkelige verden , mener jeg aktualisering dvs. et program i motsetning til en algoritme må kommunisere på en eller annen måte med den fysiske verden. En algoritme kan derimot være et rent matematisk begrep.
Svar
I er ganske sikker på at andre svar er gode nok til å ta ledelsen, men her ser jeg forskjellen på en algoritme og et program
-
En algoritme består ganske enkelt av trinnene (maskinuavhengig) som må følges for å løse et problem.
-
Et program er et instruksjonssett for en bestemt type maskin for å sette en algoritme i bruk .
For eksempel.
La oss si at du har en algoritme som har et trinn for nå til et bestemt sted før du gjør et annet trinn. Nå er ikke hvordan dette trinnet for å nå utføres nøyaktig definert. Du kan velge å gå eller løpe eller ta en buss for å gjøre det, men det kommer an på hvordan du velger å implementere det (som er din prog ram).
Du kan si at en algoritme er en abstraksjon av et program, dvs. mangler de nøyaktige detaljene, men legger ut en plan for å gjøre noe .