Det siges, at et program inkluderer algoritmer, men hvis vi henviser til deres definition, er en algoritme en sekvens af instruktioner skrevet til udføre en bestemt opgave, og et computerprogram er også en række instruktioner til at udføre (nogle) opgaver med computeren.
Hvad adskiller et program sig derefter fra en algoritme? er det også en type algoritme?
Jeg leder faktisk efter formelle definitioner for en algoritme og et computerprogram, så jeg kan skelne dem fra hinanden eller identificere algoritmer i et program.
Opdatering : Jeg har bemærket i Wikipedia ved en uformel definition (i det mindste syntaktisk), at ethvert program er en algoritme.
En uformel definition kan være “et sæt regler, der præcist definerer en sekvens af operationer.” som ville omfatte alle computerprogrammer , inklusive programmer, der ikke udfører numeriske beregninger. Generelt er et program kun en algoritme hvis det til sidst stopper .
Svar
Jeg vil give det samme svar som jeg gav den forrige gang dette spørgsmål kom op.
Forstå først, at der ikke er nogen god formel definition af “algoritme” i skrivende stund. Nøgleordet her er “formel”.
Der er dog smarte mennesker, der arbejder på det.
Hvad vi ved er, at uanset hvad en “algoritme” er, sidder den et sted mellem “matematisk funktion” og “computerprogram”.
En matematisk funktion er formel forestilling om en kortlægning fra indgange til udgange. Så for eksempel er “sorter” en kortlægning mellem en sekvens af ordrerbare emner og en sekvens af ordrerbare emner af samme type, som kortlægger hver sekvens til den ordnede sekvens. Denne funktion kan implementeres ved hjælp af forskellige algoritmer (f.eks. flettsortering, bunkesortering). Hver algoritme kunne igen være implementeret ved hjælp af forskellige programmer (endda givet det samme programmeringssprog).
Så det bedste håndtag, vi har på, hvad en “algoritme” er, er at det er en slags ækvivalensklasse på programmer, hvor to programmer er ækvivalente, hvis de gør “i det væsentlige den samme ting”. To programmer, der implementerer den samme algoritme, skal beregne den samme funktion, men det omvendte er ikke sandt.
Tilsvarende er der en ækvivalensklasse mellem algoritmer, hvor to algoritmer er ækvivalente, hvis de beregner den samme matematiske funktion .
Den svære del i alt dette er at forsøge at fange, hvad vi mener med “i det væsentlige den samme ting”.
Der er nogle åbenlyse ting, som vi bør inkludere. For eksempel er to programmer stort set de samme, hvis de kun adskiller sig ved forskellige omdøbninger. De fleste modeller af programmeringssprog har oprindelige forestillinger om “ækvivalens” (f.eks. Beta-reduktion og eta-konvertering i lambda-beregning), så vi skal også kaste dem ind.
Uanset hvilken ækvivalensrelation vi vælger, dette giver os en vis struktur . Algoritmer udgør en kategori i kraft af, at de er kvotientkategorien for programmer. Nogle interessante ækvivalensforhold er kendt for at give anledning til interessante kategoriske strukturer; for eksempel er kategorien af primitive rekursive algoritmer et universelt objekt i kategorien af kategorier. Når du ser en interessant struktur som den, ved du, at denne forespørgsel sandsynligvis vil være nyttig.
Kommentarer
- Tak for dit præcise svar, bare et andet spørgsmål. Hvis vi overvejer ethvert program, uanset hvad det gør, får de stadig nogle input og følger nogle instruktioner og giver nogle resultater, når de udføres. De løser muligvis ikke ‘ for at løse ethvert problem (som vi kalder), men det er stadig en kortlægning. kunne de være kendt algoritme, jeg mener ethvert program?
- Hvis jeg ‘ jeg læser dig korrekt, skal du ‘ beder om en formel definition af en ” algoritme ” skal eller ikke skal have det forbehold, at den skal være ” nyttigt “. Jeg vil sige ” nej “, om kun fordi det ‘ er umuligt at formalisere det opfattelse.
- undskyld! mit engelsk er ikke godt, så siger du ” nej ” til hvad? du indrømmer, at det ‘ er umuligt at formalisere nytten af et program, og bare per definition er ethvert program en algoritme? eller siger du det ‘ er nødvendigt, at vi anser nytten ved siden af algoritmen?
- Jeg tror ikke ‘ Jeg tror ikke, at en formel definition af en ” algoritme ” skal kræve, at det er nyttigt, fordi ” nyttigt ” kan ‘ t defineres formelt.
- Dit svar er det mest nyttige i denne tråd +1. Jeg tror på ” i det væsentlige den samme ting “, du mener ” semantisk ækvivalent “. Jeg tror også, at alle programmer i det væsentlige er algoritmer (som OP siger), da alle programmer er implementeringer, der kortlægger noget input til noget output, selvom denne kortlægning er implicit. Som du sagde, afhænger det hele af perspektivet.
Svar
I sidste ende er forskellen perspektivisk . Et program er et program: en række udsagn på et eller andet sprog, måske et programmeringssprog eller instruktioner på maskinniveau. Algoritmer er normalt beskrevet på et højere niveau end maskininstruktioner eller programmeringssprogsætninger, men hvor højt niveau er ret fleksibelt. For eksempel er “Sorter arrayet, se derefter på $ k $ th-elementet” under nogle omstændigheder en perfekt god beskrivelse af en algoritme til at finde det $ k $ th største objekt i en array; under andre omstændigheder vil du måske specificere meget mere detaljeret om, hvordan sorteringen finder sted.
Som du siger, er en algoritme noget i retning af “en proces eller et sæt regler, der skal følges i beregninger eller andre problemer -afvikling af operationer, især af en computer. ” Så bogstaveligt talt er hvert program en algoritme. Normalt taler vi dog om programmer implementering algoritmer. Normalt undgår vi, når vi beskriver en algoritme, detaljerne på lavt niveau om, hvordan tingene implementeres, forudsat at en kompetent programmør ville være i stand til at implementere den i det sprog, de selv vælger.
Kommentarer
- Jeg tror, at algoritmens nøjagtighed er relateret til matematikbegreb, lambda-calculus eller Turing-maskine, ved stadig ikke ‘ t hvad det er abstraktionssprog? matematik eller et naturligt sprog med mange fuzzy udsagn
- @Ahmad Algoritme er et uformelt koncept. Det har ingen formel definition. På en måde er det ‘ som et matematisk bevis, der adskiller sig fra et formelt bevis i et formelt bevissystem. Vi mener, at uformelle beviser kan ” uddybes ” til formelle bevis i ethvert valgt (stærkt nok) formelt bevissystem, ligesom ethvert andet algoritme kan implementeres fuldt ud på ethvert (Turing-komplet) programmeringssprog.
Svar
Algoritmer i Turing -komplet tankegang er normalt specificeret af input og output. Virkelige programmer gør mere; de
- kommunikerer med brugeren,
- kommunikerer med andre maskiner,
- reagerer på miljøet,
- ophører ikke og er stadig nyttige,
og mere. Disse ting overvejes normalt ikke i algoritmer eller teori om beregning, men er afgørende for de fleste programmer.
Kommentarer
- Dette er et meget godt punkt. Men mener du noget som “, der normalt er angivet som et middel til at kortlægge input til output “? Bare at specificere input og output er ikke ‘ t nok: f.eks. Giver mergesort og quicksort den samme output fra enhver input, men betragtes ikke ‘ at være den samme algoritme.
- @ DavidRicherby Jeg tænkte på specifikation i PL-forstand; vi angiver ‘ ikke noget andet, så algoritmer gør muligvis ikke noget andet. Selvfølgelig skal vi give mere end specifikationen for at beskrive en konkret algoritme.
- Gode point, men hvis vi indrømmer, at ethvert program i sidste ende er en algoritme, donerer jeg ikke ‘ ved ikke, hvordan de forhold, du adresserede, måles i forhold til en algoritme. Måske et AI-emne ?!
- Hvem ville indrømme det, og hvorfor? Og hvad mener du med mål her? (Og jeg kan bestemt ikke se ‘ ikke AI-vinklen her.)
- @Raphael Jeg må muligvis indrømme det (ved at se på syntaksen ser alle programmer ens ud, de er sekvenser af instruktioner eller kortlægning af input til output), jeg ved bare ikke ‘ hvordan andre funktioner i et program (dem du adresserede) kan udvindes fra denne definition. for eksempel forskellen mellem hurtig sortering og MATLAB eller Windows Media Player !!
Svar
-
En algoritme er en systematisk tilgang til løsning af et specifikt problem.
-
Et program er et sæt instruktioner, som en computer skal følge.
Et program behøver derfor ikke engang at løse et problem.Jeg er sikker på, at vi alle kan tænke på flere programmer, der har forårsaget flere problemer, end de har løst. Et program kan være en implementering af mange algoritmer, eller en algoritme kan implementeres ved at lappe sammen mange programmer. Et program kan endda ikke indeholde algoritmer. For eksempel kan det tomme program, der simpelthen afslutter, eller måske endda en Hello World, betragtes som et program uden algoritme.
Da en algoritme løser et specifikt problem, er det fokuseret på et specifikt hele koncept. En algoritme tilvejebringer derfor abstrakte trin til behandling af et sæt beslægtet information til et andet sæt afledt information. Et program kræver ikke, at dets bestanddele overhovedet er begrebsrelateret. For eksempel kan et program have et påskeæg, men en ting, der kaldes en algoritme, bør ikke. Du kan have en virus eller trojan, der lurer i et program, men ikke i en algoritme. Det tætteste en algoritme kan komme på dette ville være noget som en bagdør i en krypteringsalgoritme, hvor den planlagte fejl er en del af informationsforholdet etableret af algoritmen.
Og endelig et program, som det er forkortelse for et computerprogram, kræver tautologisk en computer. En algoritme gør det ikke. Hvis jeg systematisk adskiller skjorter, bukser og strømper fra mit tøj, før jeg lægger dem væk, er dette en algoritme. Den beskæftiger sig med relaterede input og output, kan beskrives i et rutediagram og har beregningsfulde konsekvenser med hensyn til effektivitet (for eksempel antallet af tøjstykker, der skal sammenlignes for at finde matchende sokker).
Svar
En algoritme er et begreb eller en idé. Det er en formel tilgang til løsning af et problem. Algoritmer kan udtrykkes eller implementeres på en række programmeringssprog (normalt kan næsten ethvert sprog implementere enhver algoritme). For nogle eksempler skal du læse igennem Sorteringsalgoritmer på Wikipedia.
Et computerprogram er en specifik sekvens af instruktioner i et specifikt programmeringssprog. . Et program kan indeholde implementeringen af mange algoritmer. Excel er et program, men dets sorteringsfunktioner er manifestationen af en algoritme.
Svar
En algoritme er et selvstændigt trin for trin sæt operationer, der skal udføres for at løse et specifikt problem eller en klasse af problemer.
Et computerprogram er en sekvens af instruktioner, der overholder reglerne for et bestemt programmeringssprog, skrevet til at udføre en bestemt opgave med en computer.
Algoritmer er generelle og skal oversættes til en specifikt programmeringssprog (implementeret).
Kommentarer
- Men hele pointen med spørgsmålet er, at et program (enten dets kildekode eller den kompilerede binære ) er ” et selvstændigt trin for trin sæt operationer, der skal udføres for at løse et bestemt problem eller en klasse af problemer. ”
- Men det er ikke ‘ t. Et program er ikke det Brug operationer, men en implementering af dem: noget, som udfører dem i en bestemt sammenhæng. For eksempel. Unix
sort
-værktøjet er ikke en sorteringsalgoritme, det bruger en sorteringsalgoritme.
Svar
En algoritme udtrykker vores idé eller løsning til specifikt problem trin for trin tilgang. det er kun problemløsning og menneskelig forståelig tilgang ikke til computersystem
Program er trinvise instruktioner, der implementeres til løsning af et computersystem. det skal være forståeligt af ikke kun programmøren også computeren.
Kommentarer
- Velkommen til Computer Science Stack Exchange. Læs cs.stackexchange.com/tour.if , du har endnu ikke gjort det.
Svar
De andre svar her, tror jeg, går glip af et vigtigt punkt. Definitionen af “algoritme”, som jeg blev lært, omfattede kravet om, at proceduren stopper på alle input . Det gør naturligvis “program” til en bredere klasse af procedurer end “algoritme”, da nogle programmer stopper på alle input og andre ikke.
Kommentarer
- Dette er ikke universelt. Definitionen, som jeg fik undervist, indeholdt ikke ‘ dette krav.
Svar
Her er et par måder at trække linjen mellem en algoritme og et program:
Meningsfuldt formål
Programmer er skrevet med et formål og repræsenterer et forsøg på at opnå en mål. Algoritmer kan ses som værktøjer til at nå dette mål.
F.eks. en skruetrækker er en algoritme til at ændre en skrues tilstand, men selve skruetrækkeren har ikke et formål at gøre det.Formålet er i hovedet på skruetrækkeroperatøren, der holder programmet som at lægge hylder.
Forretningslogik
Dette punkt vedrører stærkt formålet med et program. Da programmer har formål, har de uundgåeligt bits i den virkelige verden som specifikke datoer, målinger, teknologier, navne osv.
Algoritmer på den anden side indeholder hverken forretningslogik eller bits fra den virkelige verden og i stedet for at arbejde på specifikke værdier fungerer på variabler.
F.eks. i denne forstand kan du sammenligne en matematisk funktion som f(x) = x^2
som er abstrakt og fungerer på variabler med en madlavningsopskrift, der indeholder nøjagtige værdier (mindst en til reference).
Resultat
Dette punkt er stærkt relateret til et programs forretningslogik. En agent (som en webbrowserbruger) forbruger resultatet af et program, ikke resultatet af en algoritme.
F.eks. forbrugeren af en madlavningsopskrift forbruger kagen, ikke resultatet af flødeskum eller opvarmningsovn.
Kommentarer
- Måske ville det være bedre at sige det Skruetrækkeren har ikke ‘ ikke den hensigt at dreje skruerne? På dagligdags engelsk ville vi bestemt sige, at en skruetrækker har formålet med at dreje skruer: drejning af skruer er den nøjagtige ting, den blev designet til at gøre.
- Også ‘ jeg er ikke sikker på, hvad du mener med ” forretningslogik ” (mange programmer har intet at gøre med forretning) eller ved at sige, at en algoritme ” hverken indeholder forretningslogik eller bits fra den virkelige verden “. For eksempel kunne jeg meget vel udtrykke en korteste algoritme med hensyn til byer og veje snarere end hjørner og kanter. Indeholder ‘ ikke algoritmen, så indeholder ” … bits af den virkelige verden ” ?
- @ DavidRicherby, du har ret, min formulering er tvetydig. Hvad jeg mente er et meningsfuldt formål. Drejning af skruer for at dreje skruer er meningsløst lige så godt som at sortere en matrix, der aldrig bruges. Med forretningslogik mener jeg al programlogik undtagen hjælpelogik og teknologi stack kedelplade dvs. al logik, der faktisk implementerer formålet med programmet, dvs. forretningslogikken ved at bage en kage er at blande ingredienser og bagning og inkluderer ikke at lære at blande eller bage ( som er genbrugt logik i dette tilfælde).
- @ DavidRicherby, som for bits i den virkelige verden , mener jeg aktualisering, dvs. et program i modsætning til en algoritme skal kommunikere på en eller anden måde med den fysiske verden. På den anden side kan en algoritme være et rent matematisk koncept.
Svar
I er ret sikker på, at andre svar er gode nok til at tage føringen, men her ser jeg forskellen mellem en algoritme og et program
-
En algoritme består simpelthen af de trin (maskineuafhængige), der skal følges i en eller anden rækkefølge for at løse et problem.
-
Et program er et instruktions sæt til, at en bestemt maskintype kan anvende en algoritme .
For eksempel.
Lad os sige, at du har en algoritme, der har et trin til når til et bestemt sted, inden du laver et andet trin. nu, hvordan dette trin med at nå udføres, er ikke nøjagtigt defineret. du kan vælge at gå eller løbe eller tage en bus til at gøre det, men det afhænger af, hvordan du vælger at implementere det (hvilket er din prog ram).
Du kan sige, at en algoritme er en abstraktion af et program, dvs. mangler de nøjagtige detaljer, men lægger en plan for at gøre noget .