Se sanoi, että ohjelma sisältää algoritmeja, mutta jos viitataan niiden määritelmään, algoritmi on sarja ohjeita suorittaa tietyn tehtävän, ja tietokoneohjelma on myös sarja ohjeita (joidenkin) tehtävien suorittamiseksi tietokoneella.

Millä tavoin ohjelma eroaa algoritmista? Onko se myös algoritmityyppi?

Etsin itse asiassa virallisia määritelmiä algoritmille ja tietokoneohjelmalle, jotta voin erottaa ne toisistaan tai tunnistaa algoritmit ohjelmassa.

Päivitä : Olen huomannut Wikipediassa epävirallisen määritelmän avulla (ainakin syntaktisesti) mikä tahansa ohjelma on algoritmi.

Epävirallinen määritelmä voi olla ”joukko sääntöjä, jotka määrittelevät tarkasti toimintosarjan”, joka sisältäisi kaikki tietokoneohjelmat , mukaan lukien ohjelmat, jotka eivät tee numeerisia laskelmia. Yleensä ohjelma on vain algoritmi , jos se pysähtyy lopulta .

Vastaus

Annan saman vastauksen kuin annoin edellisen kerran, kun tämä kysymys tuli.

Ensinnäkin ymmärrä, että kirjoituksen aikana ei ole hyvää muodollista algoritmin määritelmää. Avainsana tässä on ”muodollinen”.

On kuitenkin olemassa älykkäitä ihmisiä, jotka työskentelevät sen parissa.

Tiedämme, että mikä tahansa ”algoritmi” onkin, se sijaitsee ”matemaattisen funktion” ja ”tietokoneohjelman” välissä.

Matemaattinen toiminto on muodollinen käsitys tulojen ja lähtöjen yhdistämisestä. Joten esimerkiksi ”lajittelu” on kartoitus järjestettävien kohteiden sarjan ja saman tyyppisten järjestettävien kohteiden sarjan välillä, joka kutsuu kunkin jakson järjestettyyn järjestykseen. Tämä toiminto voisi jokainen algoritmi voitaisiin puolestaan toteuttaa eri algoritmeilla (esim. toteutetaan eri ohjelmilla (jopa annettuna sama ohjelmointikieli).

Joten paras käsitys, mitä meillä on ”algoritmilla”, on se, että se on jonkinlainen vastaavuusluokka ohjelmissa, joissa kaksi ohjelmat ovat samanarvoisia, jos ne tekevät ”olennaisesti samaa”. Kaikkien kahden saman algoritmin toteuttavan ohjelman on laskettava sama funktio, mutta päinvastoin ei ole totta.

Vastaavasti algoritmien välillä on vastaavuusluokka, jossa kaksi algoritmia ovat samanarvoiset, jos ne laskevat saman matemaattisen funktion .

Kaiken tämän vaikein osa on yrittää ymmärtää, mitä tarkoitamme ”olennaisesti samalla”.

Meidän on sisällytettävä joitain ilmeisiä asioita. Esimerkiksi kaksi ohjelmaa ovat olennaisesti samat, jos ne eroavat toisistaan vain muuttuvien nimien perusteella. Useimmilla ohjelmointikielimalleilla on natiivikäsitteet ”ekvivalenssista” (esim. Beeta-pelkistys ja eta-muunnos lambda-laskennassa), joten meidän pitäisi heittää ne myös sisään.

Mikä tahansa vastaavuussuhde valitsemme, tämä antaa meille jonkinlaisen rakenteen . Algoritmit muodostavat luokan sen perusteella, että ne ovat ohjelmien osamäärä. Joitakin mielenkiintoisia vastaavuussuhteita tiedetään aiheuttavan mielenkiintoisia kategorisia rakenteita; esimerkiksi primitiivisten rekursiivisten algoritmien luokka on universaali kohde luokkien luokassa. Aina kun näet tällaisen mielenkiintoisen rakenteen, tiedät, että tämä kyselylinja on todennäköisesti hyödyllinen.

Kommentit

  • Kiitos tarkasta vastauksestasi, vain yksi kysymys. Jos tarkastelemme mitä tahansa ohjelmaa, riippumatta siitä, mitä se tekee, he saavat silti joitain syötteitä ja seuraavat joitain ohjeita ja antavat tuloksia suoritettaessa. He eivät edes saa ’ ratkaista mitään ongelmaa (kuten kutsumme), mutta se on silti kartoitus. voisivatko ne olla tunnettuja algoritmeja, tarkoitan mitä tahansa ohjelmia?
  • Jos luen sinut oikein, ’ kysytään uudelleen, pitäisikö ” -algoritmin ” muodollisen määritelmän olla ehdolla, että sen on oltava ” hyödyllinen ”. Sanoisin ” ei ”, vain siksi, että ’ sitä on mahdotonta muodostaa käsite.
  • anteeksi! englannin kieleni ei ole kunnossa, sanot sitten ” ei ” mihin? myönnätkö, että ’ on mahdotonta muodostaa ohjelman hyödyllisyyttä, ja vain määritelmän mukaan mikä tahansa ohjelma on algoritmi? vai sanotko ’ olevan välttämätöntä, että harkitsemme hyödyllisyyttä algoritmin ohella?
  • En ’ usko, että ” algoritmin ” pitäisi edellyttää, että siitä on hyötyä, koska ” hyödyllinen ” voi ’ t määritetään virallisesti.
  • Vastauksesi on hyödyllisin tässä ketjussa +1. Uskon, että ” tarkoittaa olennaisesti samaa asiaa ”, tarkoitat ” semanttisesti vastaavaa ”. Luulen myös, että kaikki ohjelmat ovat olennaisesti algoritmeja (kuten OP sanoo), koska kaikki ohjelmat ovat toteutuksia, jotka kartoittavat jonkin verran syötettä johonkin lähtöön, vaikka tämä kartoitus olisi implisiittinen. Kuten totesit, kaikki riippuu näkökulmasta.

Vastaus

Viime kädessä ero on näkökulmasta . Ohjelma on ohjelma: lausejoukko jollakin kielellä, ehkä ohjelmointikieli tai konetason ohjeet. Algoritmeja kuvataan yleensä korkeammalla tasolla kuin konekäskyjä tai ohjelmointikielilauseita, mutta kuinka korkea taso on melko joustava. Esimerkiksi joissakin olosuhteissa ”Lajittele taulukko ja katso sitten elementti $ k $ th” on erittäin hyvä kuvaus algoritmista $ k $ th: n suurimman objektin löytämiseksi taulukosta; muissa olosuhteissa haluat ehkä määrittää paljon yksityiskohtaisempaa tietoa lajittelusta.

Kuten sanot, algoritmi on jotain ”prosessi tai sääntöjoukko, jota on noudatettava laskelmissa tai muissa ongelmissa -ratkaisutoiminnot, erityisesti tietokoneella. ” Joten, kirjaimellisesti sanottuna, jokainen ohjelma on algoritmi. Yleensä puhumme kuitenkin ohjelmista, jotka toteuttavat algoritmeja. Yleensä algoritmia kuvattaessa vältetään matalan tason yksityiskohdat siitä, miten asiat toteutetaan, olettaen, että pätevä ohjelmoija pystyy toteuttamaan sen valitsemallaan kielellä.

Kommentit

  • Luulen, että algoritmin täsmällisyys liittyy matematiikkakäsitteeseen, lambda-laskuriin tai Turingin koneeseen, en silti tiedä, mikä se on. class = ”7e0343ef15”>

abstraktiokieli? matematiikka tai luonnollinen kieli, jossa on paljon sumeita lausuntoja

  • @Ahmad Algorithm on epävirallinen käsite. Sillä ei ole virallista määritelmää. Tavallaan se ’ on kuin matemaattinen todiste, joka eroaa muodollisesta todisteesta muodollisessa todistusjärjestelmässä. Uskomme, että epäviralliset todisteet voidaan ” täsmentää ” muodollisiksi todisteiksi missä tahansa valitussa (riittävän vahvassa) muodollisessa todistusjärjestelmässä, kuten missä tahansa algoritmi voidaan toteuttaa täysimääräisesti millä tahansa (Turingin koko) ohjelmointikielellä.
  • Answer

    Turingin algoritmit -kokonainen ajattelutapa määritetään yleensä syötteen ja lähdön avulla. Todelliset ohjelmat tekevät enemmän; he

    • kommunikoivat käyttäjän kanssa,
    • kommunikoivat muiden koneiden kanssa,
    • reagoivat ympäristöön,
    • eivät lopeta ja ovat edelleen hyödyllisiä,

    ja paljon muuta. Näitä asioita ei yleensä oteta huomioon algoritmeissa tai laskentateoriassa, mutta ne ovat välttämättömiä useimmille ohjelmille.

    Kommentit

    • Tämä on erittäin hyvä asia. Mutta tarkoitatko jotain ” -tunnistetta, joka yleensä määritetään keinona liittää tulo tulokseen ”? Pelkästään syötteen ja lähdön määrittäminen ei ole tarpeeksi ’ t: esim. Mergesort ja quicksort tuottavat saman ulostulon mistä tahansa syötteestä, mutta niitä ei ’ oteta huomioon olla sama algoritmi.
    • @DavidRicherby Ajattelin spesifikaatiota PL-mielessä; emme ’ määritä mitään muuta, joten algoritmit eivät välttämättä tee mitään muuta. Tietenkin meidän on annettava enemmän kuin spesifikaatio kuvaamaan konkreettista algoritmia.
    • Hyviä seikkoja, mutta jos myönnämme, että loppujen lopuksi mikä tahansa ohjelma on algoritmi, en pidä ’ ei tiedä, miten kyseiset asiat mitataan algoritmin suhteen. Ehkä tekoälyn aihe ?!
    • Kuka myöntää sen ja miksi? Ja mitä tarkoitat tässä mitalla? (Ja en varmasti näe ’ täältä tekoälyn kulmaa.)
    • @Raphael voin myöntää sen (tarkastelemalla syntaksia, kaikki ohjelmat näyttävät samanlaisilta, ne ovat käskyjen jaksoja tai syötteen ja tuotoksen yhdistämistä), en vain tiedä, ’ en tiedä, kuinka ohjelman muut ominaisuudet (ne, joille osoitit) voidaan erottaa määritelmästä. esimerkiksi ero pikalajittelun ja MATLAB: n tai Windows Media Playerin välillä !!

    Vastaa

    • Algoritmi on systemaattinen lähestymistapa tietyn ongelman ratkaisemiseen.

    • Ohjelma on joukko ohjeita, joita tietokone noudattaa.

    Ohjelman ei siis tarvitse edes ratkaista ongelmaa.Olen varma, että voimme kaikki ajatella useita ohjelmia, jotka ovat aiheuttaneet enemmän ongelmia kuin ne ovat ratkaisseet. Ohjelma voi olla monien algoritmien toteutus, tai algoritmi voidaan toteuttaa korjaamalla useita ohjelmia yhteen. Ohjelma ei voi edes sisältää algoritmeja. Esimerkiksi tyhjää ohjelmaa, joka yksinkertaisesti poistuu, tai ehkä jopa Hello Worldia, voidaan pitää ohjelmana, jolla ei ole algoritmia.

    Koska algoritmi ratkaisee tietyn ongelman, se keskittyy tiettyyn kokonaiskonseptiin. Siksi algoritmi tarjoaa abstraktit vaiheet yhden liittyvän tiedon joukon käsittelemiseksi erilaiseksi johdetun tiedon joukoksi. Ohjelma ei vaadi, että sen osatekijät ovat lainkaan käsitteellisesti yhteydessä toisiinsa. Esimerkiksi ohjelmalla voi olla pääsiäismuna, mutta algoritmiksi kutsuttu asia ei saisi olla. Sinulla voi olla virus tai troijalainen piilossa ohjelmassa, mutta ei algoritmissa. Lähin algoritmi, johon tämä pääsee, olisi jotain takaoven salausalgoritmissa, jossa suunniteltu virhe on osa algoritmin muodostamaa tietosuhdetta.

    Ja lopuksi ohjelma sellaisenaan lyhenne tietokoneohjelmasta, tautologisesti vaatii tietokoneen. Algoritmi ei. Jos erotan paidat, housut ja sukat järjestelmällisesti pyykistäni ennen kuin laitan ne pois, tämä on algoritmi. Se käsittelee asiaankuuluvia syötteitä ja tuotoksia, voidaan kuvata vuokaaviossa, ja sillä on laskettavissa olevat seuraukset tehokkuudelle (esimerkiksi vaatekappaleiden lukumäärä, jota on verrattu vastaavien sukkien löytämiseen).

    Vastaus

    Algoritmi on käsite tai idea. Se on muodollinen lähestymistapa ongelman ratkaisemiseen. Algoritmit voidaan ilmaista tai toteuttaa useilla ohjelmointikielillä (yleensä melkein mikä tahansa kieli voi toteuttaa minkä tahansa algoritmin). Joitakin esimerkkejä kannattaa lukea Wikipedian algoritmien lajittelu kautta.

    Tietokoneohjelma on erityinen komentosarja tietyllä ohjelmointikielellä . Ohjelma voi sisältää monien algoritmien toteutuksen. Excel on ohjelma, mutta sen lajitteluominaisuudet ovat algoritmin ilmentymä.

    Vastaa

    Algoritmi on itsenäinen askel askeleelta joukko toimintoja, jotka suoritetaan tietyn ongelman tai ongelmaluokan ratkaisemiseksi.

    Tietokoneohjelma on sarja ohjeet, jotka noudattavat tietyn ohjelmointikielen sääntöjä ja jotka on kirjoitettu tietyn tehtävän suorittamiseksi tietokoneella.

    Algoritmit ovat yleisiä ja ne on käännettävä tietty ohjelmointikieli (toteutettu).

    Kommentit

    • Mutta kysymyksen pääpiirre on, että ohjelma (joko sen lähdekoodi tai käännetty binääri ) on ” itsenäinen askel askeleelta joukko toimintoja, jotka on suoritettava tietyn ongelman tai ongelmaluokan ratkaisemiseksi. ”
    • Mutta se ei ole ’ t. Ohjelma ei ole th ose-operaatioita, mutta niiden toteutus : jotain, joka suorittaa ne tietyssä yhteydessä. Esimerkiksi. Unix sort -apuohjelma ei ole lajittelualgoritmi, se käyttää lajittelualgoritmia.

    Vastaa

    Algoritmi ilmaisee ajatuksemme tai ratkaisumme tiettyyn ongelmaan askel askeleelta. se on vain ongelmanratkaisu ja ihmisen ymmärrettävä lähestymistapa, ei tietokonejärjestelmää

    Ohjelma on vaiheittaiset ohjeet, jotka on toteutettu ongelman ratkaisemiseksi tietokonejärjestelmällä. sen on oltava ymmärrettävissä paitsi ohjelmoijalle myös tietokoneelle.

    kommentit

    Vastaa

    Muista vastauksista tässä mielestäni puuttuu tärkeä asia. Minulle opetettuun algoritmin määritelmään sisältyi vaatimus, että menettely pysähtyy kaikkiin tuloihin . Luonnollisesti se tekee ”ohjelmasta” laajemman menettelytavan kuin ”algoritmi”, koska jotkut ohjelmat pysähtyvät kaikissa syötteissä ja toiset eivät.

    Kommentit

    • Tämä ei ole universaalia. Minulle opetettuun määritelmään ’ ei sisältynyt tätä vaatimusta.

    Vastaus

    Tässä on pari tapaa vetää raja algoritmin ja ohjelman välille:

    Merkityksellinen tarkoitus

    Ohjelmat kirjoitetaan tarkoituksella ja edustavat yritystä saavuttaa päämäärä. Algoritmeja voidaan pitää työkaluina tavoitteen saavuttamiseksi.

    Esim. ruuvimeisseli on algoritmi ruuvin tilan muuttamiseksi, mutta itse ruuvimeisselillä ei ole tarkoitusta siihen.Tarkoitus on ruuvimeisselioperaattorin päässä, joka pitää ohjelmaa kuten hyllyjen asettaminen.

    Liikelogiikka

    Tämä kohta liittyy vahvasti ohjelman tarkoitukseen. Koska ohjelmilla on tarkoituksia, niissä on väistämättä reaalimaailman bittiä, kuten tietyt päivämäärät, mittaukset, tekniikat, nimet jne.

    Algoritmit eivät toisaalta sisällä liiketoimintalogiikkaa eivätkä reaalimaailman bittiä ja sen sijaan, että ne toimisivat tietyt arvot toimivat muuttujilla.

    Esim. tässä mielessä voit verrata matemaattista funktiota, kuten f(x) = x^2, joka on abstrakti ja toimii muuttujilla, kypsennysreseptiin, joka sisältää tarkat arvot (vähintään yhden viitteeksi).

    Tulos

    Tämä kohta liittyy vahvasti ohjelman liiketoimintalogiikkaan. Agentti (kuten verkkoselaimen käyttäjä) kuluttaa ohjelman tulosta, ei algoritmin tulosta.

    Esim. ruoanlaitto-reseptin kuluttaja ei syö kakkua ei kermavaahdon tai uunin lämmityksen tuloksena.

    Kommentit

    • Ehkä olisi parempi sanoa, että ruuvimeisselillä ei ole ’ tarkoitusta kiertää ruuveja? Arjen englanniksi sanoisimme varmasti, että ruuvimeisselillä on tarkoitus kiertää ruuveja: ruuvien kääntäminen on juuri se, mikä se on suunniteltu.
    • Lisäksi minä ’ en ole varma mitä tarkoitat ” liikelogiikalla ” (monilla ohjelmilla ei ole mitään tekemistä liiketoiminnan kanssa) tai sanomalla, että algoritmi ” ei sisällä liiketoimintalogiikkaa eikä reaalimaailman bittiä ”. Esimerkiksi voisin aivan hyvin muotoilla lyhimmän polun algoritmin kaupunkien ja teiden sijasta pisteiden ja reunojen sijaan. Eikö ’ t algoritmi sitten ” sisällä … bittiä todellisesta maailmasta ” ?
    • @DavidRicherby, olet oikeassa, lauseeni on epäselvä. Tarkoitin mielekästä tarkoitusta. Ruuvien kiertäminen ruuvien kääntämiseksi on turhaa, samoin kuin lajitteleminen ryhmää, jota ei koskaan käytetä. Liiketoimintalogiikalla tarkoitan kaikkea ohjelmalogiikkaa lukuun ottamatta hyötylogiikkaa ja teknologian pinokattilaa eli kaikkea logiikkaa, joka tosiasiallisesti toteuttaa ohjelman tarkoituksen, toisin sanoen kakun paistamisen liiketoimintalogiikka on ainesosien ja leivonnaisen sekoittamista, eikä se sisällä sekoittamisen tai paistamisen oppimista ( joka on tässä tapauksessa uudelleenkäytetty apuohjelmalogiikka).
    • @DavidRicherby, kuten todellisen maailman bittiä , tarkoitan aktualisointia, toisin sanoen ohjelman, toisin kuin algoritmi, täytyy olla jollain tavalla yhteydessä fyysinen maailma. Algoritmi puolestaan voi olla puhtaasti matemaattinen käsite.

    Vastaus

    I olen melko varma, että muut vastaukset ovat riittävän hyviä ottamaan johtoaseman, mutta tässä näen eron algoritmin ja ohjelman välillä

    • Algoritmi koostuu yksinkertaisesti vaiheista (koneesta riippumattomista), joita on noudatettava jossain määrin ongelman ratkaisemiseksi.

    • Ohjelma on käskyjoukko tietyntyyppiselle koneelle algoritmin käytännön toteuttamiseksi .

    Esimerkiksi.

    Sanotaan, että sinulla on algoritmi, jolla on askel päästä tiettyyn paikkaan ennen jonkin muun vaiheen tekemistä. Nyt kuinka tavoite saavutetaan, ei ole määritelty tarkalleen. Voit halutessasi kävellä tai juosta tai mennä bussilla, mutta se riippuu siitä, miten valitset sen toteuttamisen. (mikä on sinun prog ram).

    Voit sanoa, että algoritmi on abstrakti ohjelmasta eli puuttuu tarkat yksityiskohdat, mutta suunnittelee suunnitelman tehdä jotain .

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *