Tämän kirjan uusin versio ja lisämateriaalit, visiVersio: 19. elokuuta 20ca creativeIonsAttribution-Noncommercial-Share Alike 3
0 Yhdysvaltain lisenssi
Ihmisen tietojenkäsittelyhistoriaEdsger Dijkstra, 1972 Turing Award -luento kovemmin Olemme kehittäneet työkaluja, jotka vahvistavat fyysistä voimaa biljoonilla. Kehittyneet työkalut vahvistavat fyysisiä kykyjään, vain ihmiset ovat kehittäneet älyllisiä kykyjä, jotka ovat antaneet ihmisille mahdollisuuden hallita planeettaa Ensimmäinen avainäly oli kieli Kieli tarjosi kyvyn välittää ajatuksemme toisilleen sekä käyttää omaa mieltämme tehokkaammin
Seuraava keskeinen älykkyys ja etäisyysTietokone on äärimmäinen tieto. Tietojenkäsittely on muuttanut maailmaa enemmän kuin mikään muu keksintö viimeisen sadan vuoden aikana, ja se on levinnyt lähes kaikkiin tietotekniikan vallankumouksen alussa; Tämän päivän näkemys mahdollisuuksistaOn kaksi asiaa, miksi kaikkien pitäisi opiskella tietojenkäsittelyä. Lähes kaikki jännittävimmät teknologiat, taiteet ja tieteet. Tietojenkäsittelyn ymmärtäminen valaisee syvällisiä näkemyksiä ja kysymyksiä luontokulttuurista, ja Iverseeye sur, joka on lähettänyt kyselyn Googlelle, katsoi Tooy. , jos LASIK olisi opettanut heidät uudelleenkirurgiaan, käyttänyt älypuhelinta, nähnyt Cirque Du Soleil -esityksen, tehnyt ostoksia lupakortilla tai mikroaaltouunissa paistanut pizzan, pitäisi olla vakuuttunut ensimmäisestä syystä, etteivät nämä olisi mahdollisia ilman valtavia edistysaskeleita tietojenkäsittelyssä viimeisen puolen vuosisadan aikana. tämä kirja käsittelee joitain jännittäviä tietojenkäsittelyn sovelluksia, pääpainomme on kaudella, joka saattaa tuntua yllättävämmältä
Prosessit, menettelyt ja tietokoneetTietokone muuttaa tapaamme ajatella ongelmista ja miten ymmärrämme tämän kirjan1 Prosessit, menettelyt ja tietokonetiedot Tietojenkäsittelytiede tutkii tietoprosesseja Prosessi on vaiheiden sekvenssi. Jokainen vaihe muuttaa prosessin tilan. maailmaa jollain pienellä tavalla, ja kaikkien vaiheiden tulos tuottaa jonkin tavoitteen. Esimerkiksi kakun leipominen, kirjeen laatoitus ja puun istuttaminen ovat kaikki prosesseja Koska niihin liittyy fyysisiä yhdisteitä, kuten sokeria ja likaa, ne eivät kuitenkaan ole puhtaita informaatioprosessitson käsittelee abstraktia informaatiota fyysisten asioiden sijaan Fyysisen maailman ja puhtaiden tietoprosessien väliset rajat ovat kuitenkin usein sumeita Todelliset tietokoneet toimivat fyysisessä maailmassa: nämä (esim. käyttäjä painaa näppäintä näytöllä näkyvässä näppäimistössä) keskittyminen abstrakteihin fyysisiin tapoihin esittää ja manipuloida tietoa paremmin mahdollistaa ymmärtämisen ja päättelyn menettely Proseduuri on kuvaus prosessista
Yksinkertainen prosessi voidaan kuvata luettelemalla vaiheet Vaiheiden luettelo on menettely: niiden seuraaminen on prosessi Palgoritmi, jota voidaan seurata ilman mitään, on mekaaninen menettely algoritmi on mekaaninen prosessi, joka suoritetaan tollally finishEsimerkiksi tässä on kahvinvalmistusmenetelmä, joka on mukautettu todellisista ohjeista, jotka edellyttävät.Sulje kansiAseta tyhjä karahvin päällePaina on bi. Prosessien kuvaaminen vain luettelemalla vaiheet tällä on monia rajoituksia Ensinnäkin turald ambires tietää paljon ilmoittamattomia oletuksia esimerkki, vaihe 3es käyttäjä ymmärtää eron kahvin ja valmiin kahvin välillä ja voi päätellä, että tämä kahvin käyttö"viittautuu, koska tämän prosessin lopputavoite on valmistaa juomakelpoista kahvia Muut vaiheet asaker on kytketty pistorasiaan ja istuminenVoisi tietysti lisätä paljon lisätietoja menettelystämme ja tehdä kielestä tätä tarkempi. Silloinkin, kun on paljon vaivaa kirjoittamiseen ennakkoluuloton Tämän vuoksi Yhdysvaltojen verokoodi on 34 miljoonaa sanaa pitkä, mutta weyers voi vuosia kiistellä whaeally tarkoittaa muuta ongelmaa tällä tavalla. menettelyn kuvauksen koko on
C3-kuvaus on verrannollinen prosessin vaiheiden määrään Tämä sopii, että ihmiset voivat suorittaa ajallaan, mutta opinnäytetyöt, jotka haluamme suorittaa tietokoneilla, sisältävät biljoonia opetuksia. Tarvitsemme tehokkaampia tapoja kuvata niitä kuin pelkkä työkalujen luettelointi. kuvailevasti Koska toimenpiteet suorittaa kone, kaikki on kuvattava"(esimerkiksi tietää kuinka täyttää kahvinkeitin vedellä selittämättä, että vesi tulee hanasta, ja kuinka hana kytketään päälle) Sen sijaan tarvitsemme mekaanisia toimenpiteitä, joita voidaan seurata ilman minkäänlaista ajattelua, kone, joka voidaan syöttää ihmisen kirjoittamalla näppäimistöllä, vastaanottamalla verkon kautta tai antamalla automaattisesti siihen liitetyt anturit. Suorita mekaaninen toiminto, toisin sanoen menettely, jossa jokainen stee suoritetaan ilman Produce-lähtöä. olla ihmiselle näytettävää dataa, mutta se voi välittää sellaisia astrisia signaaleja, jotka ohjaavat laitteen toimintaa. Tietokoneita on monenlaisissa muodoissa, ja tuhannet tietokoneet ovat laitteita joka päivä, mutta älä ajattele puhelimia, televisioita, mikroaaltouunia ja käyttökortteja ensisijainen painopiste on uniersaalisissa tietokoneissa, suorita kaikki mahdolliset laskelmat erillisillä tuloilla lukuun ottamatta käytännön rajoituksia tilalle ja mielelle ja hngys"chetime
seuraava osio syö se diskreetit syötteet tarkoittaa: ChapeTutki tarkemmin, mitä tarkoittaa, että tietokone on maailmankaikkeus Tämä teho voidaan kaapata yksiköillä, kuten hwatt Fyysinen teho ei ole kovin hyödyllinen laskennan mittari, koska tietokonetietokoneen toiminnassa kuluu paljon Energiaa kuluu, mutta on olemassa useita ominaisuuksia, jotka mittaavat laskentakoneen tehoa Kuinka paljon tietoa Kuinka nopeasti viivästyy, kun otetaan huomioon toinen ominaisuus Osaan II asti, mutta harkitse ensimmäistä121 Tietoa Epävirallisesti käytämme tietoa tarkoittamaan tietoa Mutta ymmärtääksemme informaatiota kvantitatiivisesti, jona voimme mitata, tarvitsemme tarkemman tavan ajatella.
1 2 Tietojenkäsittelytehon mittaaminen Tietojenkäsittelytieteilijöiden tapa mitata tietoa perustuu siihen, kuinka tiedossa oleva tietobitin saaminen on hieman Yksi bitti informaatiota puolittaa epävarmuuden määrän Vastaavasti on olemassa binaarinen kysymys
Koska purema suorittaa fatossin, mutta ei paljasta tulosta Puolet ajasta kolikon "päät" laskeutuvat, ja toinen puolet ajasta "hännät" ilman kroikeaa vastausta ovat Yksi bitti tietoa joko pää"tai"hännät" Vastaavasti yksi bitti voi erottaa arvot 0 ja YthThereidentifioida todellisen luvun, koska yksi bitti voi erottaa vain bnot tarpeeksid use fivTämä on kuitenkin melko tehotonta, koska tarvitsemme jopa viisi kysymystä arvon tunnistamiseen (ja keskimäärin tarvitaan 33 kysymystä ) Voimmeko tunnistaa
Tavoitteenamme on tunnistaa kysymykset, joissa "kyllä" ja "ei" vastaukset ovat yhtäläisiä, jos aloitamme "onko arvo 6?", koska vastauksen odotetaan olevan aika-arvo vähintään 42 Odota yhtä todennäköistä Jos vastaus on "kyllä", tiedämme, että se on 4, 5 tai 6 Kahdella lisäbitillä voimme erottaa sanat (huomaa, että kaksi bittiä riittää erottamaan neljän tiedon hukkaan) Vastaavasti, jos ensimmäinen kysymys on ei, tiedämme, että tulos on 1, 2 tai 3 Tarvitsemme vielä kaksi bittiä erottaaksemme, mikä kolmesta arvosta se on. Näin ollen kolmella bitillä erottelemme kaikki kuusi mahdollista tulosta.5Kolme bittiä voi välittää enemmän tietoa kuin kuusi binaaria kysymyspuusta, on joitakin kysymyksiä, joissa vastaus on yhtä todennäköisesti "kyllä" ja "ei" (esimerkiksi odotamme vastauksen arvoon 3 on "kyllä kolmesta kertaa") Näin ollen emme saa kokonaisia bittejä, joita voimme erottaa 2* 2*2-8 mahdollisuutta
Yleisesti ottaen voimme erottaa kaksi mahdollisuutta. Käänteisesti ksible arvojen erottaminen edellyttää logogaritmi määritellään siten, että jos a= b logaritmi sitten loghJokaisesta bitistä johtuen käytämme bittien lukumäärän määrittämiseksi erillisten binäärikysymysten joukosta. , kysymykset ovat diskreettejä: emme voi kysyä kysymyksen numeroa 058, soinaariset queTrees Kuva 11 kuvaa binäärikysymysten rakennetta kahdeksaan arvoon Kutsumme tätä rakennetta binääripuuksi Näemme monia hyödyllisiä puun binääripuita. Tietokonetutkijat piirtävät puita ylösalaisin alas, juuri on puun yläosa, ja lehdet ovat numerot alaosassa(o) Jokaiselle lehdelle on ainutlaatuinen polku puulla. Näin ollen voimme kuvata jokaista eigl
1 2 Laskennan mahdollistavien arvojen mittaaminen puun kysymyksiin fNo","ei"ja"neaf 5 Koska tämä kaikki on binääripuu, voimme kuvata mitä tahansa ei-negatiivista tällä tavalla, lisäämällä ylimääräisiä tasoja puun syötteen erottamiseksi 6:n väliin voi lisätä uudet numerot väliin 0 ja 7, jos vastaus on"Kyllä samanlainen kuin theath Puun syvyys on thän pituus kunnasta Esimerkkipuulla on syvyys kolme
Binääripuu, jonka syvyys on d, voi erottaa jopa 2ere0357Kuva ll Usin
g kolme bittiä kahdeksan mahdollisen arvon erottamiseksi Tiedon yksiköt Yksi tavu määritellään kahdeksaksi bitiksi. Näin ollen yksi tietotavu vastaa kahdeksaa binaarista kysymystä ja pystyy erottamaan 28(256) eri arvot Suuremmille tietomäärille käytämme metrisiä etuliitteitä, mutta skaalauksen sijaan kertoimilla 1000 theyf20(1024lence, yksi kilotavu on 1024 tavua; yksi megatavu on 24 (noin) tavua; yksi gigatavu on 2 (noin miljardi) tavua; ja yksi ter-tavu on 240 (noin 1 biljoona tavua) binääripuu, jonka syvyys on vuoden pienin mahdollinenCEharjoitus 12 Kuinka monta bittiä tarvitaan humd Minkä tahansa atomin yksilöimiseksi havainnoitavissa olevassa maailmankaikkeudessa? Harjoitus 13 Kaikissa esimerkeissä käytetään binäärikysymyksiä, joihin on kaksinkertaisia vastauksia Oletetaan päätöksiemme sijasta bittien perusteella me perustamme trits, jossa yksi trit voi erottaa kolme yhtä todennäköistä arvoa Foach trit voimme kysyä qu(kysymys, jossa on kolme mahdollista vastausta, mikä tahansa tritti tarvitaan erottamaan vakuuttava vastaus näyttäisi kolmiosaisen puun, jossa on kysymykset ja vastauksetIsb* Keksi yleinen kaava muuntaminen bittien ja tritien välillä
Kuinka monta Tutkimus 11: Arvaa (valitsija) valitsee luvun I:n ja 100:n välillä (mukaan lukien) ja kirjoittaa sen salaa ylös. Toinen pelaaja arvaaja) yrittää arvata numeron Jokaisen arvauksen jälkeen valitsijat antavat vastauksen "oikein" (arvaaja arvasi numero ja peli on ohi)korkeampi"(todellinen luku on suurempi kuin theower"(Selitä miksi vähän tietobittiä). Olettaen, että valitsija valitsee sen satunnaisesti (eli kaikki arvot välillä I ja 100 ovat yhtä todennäköisiä), mitkä ovat parhaat Ensimmäiset arvaukset poimiessaan satunnaisesti valitsija valitsee luvun, jonka tavoitteena on laskea toisen pelaajan valitsemien arvausten määrä?fKuinka arvaajan tulisi säätää strategiaansa, jos hän kysyy vastustajaa ** Mitkä ovat parhaat strategiat molemmille pelaajille vastakkaisessa arvaus-luku -pelissä jossa valittajien tavoitteena on valita aloitusnumero, joka maksimoi arvaajan tarvitsemien arvausten määrän, ja arvaajan tavoitteena on
Sisältö22 Tietoa edustava23 Tietojenkäsittelyn kasvu ja taiteet22 Kielikonstruktio990223 Rekursiiviset siirtymäverkot3 1 Luonnollisten kielten ongelmat32 Ohjelmointikielet33 Kaava341 Primitiivit3
42 Sovelluslausekkeet4 Ongelmat ja menettelyt41 Ongelmien ratkaiseminen Toimenpide21 Menettelyt tuloina ja lähtöinä43 Rekursiivinen ongelmanratkaisu44 Rekursiivisten sovellusten arviointi45 Monimutkaisen ohjelman kehittäminen451Pri
452 jäljitys46Si5-tiedot52 parit521 pariluetteloiden tekeminen43 luetteloiden muodostamismenettelyt5
6 Data AbstraktioOsa II: Analyysimenettelyt Laskentakoneiden historia62 Mekanisointilogiikka622Cg-toiminnot1163 Mode64 Yhteenveto7 1 Empiiriset mittaukset222n3311222233336674444draattinen kasvu kuin eksponentiaalinen kasvu ja 4343346n kasvun lopettaminen54n44 3
813 Nopeampi lajittelu588 1 4 Binääripuut815 Pikalajittelu jäsentämätön haku6788indeksihakuOsa III: Ilmaisukyvyn parantaminen9 Mutaatio2 Mutaatioiden nimien, paikkojen, kehysten ja ympäristöjen vaikutus922 arviointisäännöt tila93:n vaihtuvilla pareilla Imperatiivisten ohjausobjektien942.
1 Pakkausmenettelyt ja tila66668688980 1 1 Kapselointi10 1, 2 Viestit0 2 1 Alaluokkien toteutusOverriding method03 Olio-ohjelmointiPython-ohjelmat ja kutsut4 Ohjauslausekkeet3 Arvioija33 Määritelmät4 Tulkinnat146 Nimet zy Interpreter4 2 Laiska ohjelmointi
5 SummaPart IV: Laskennan rajat2C2 1 Mekanisointi päättelyn epätäydellisyyden teoria24022 Pysäytysongelma2
4 Laskemattomuuden todistaminen4525 YhteenvetoIne53253Lista tutkimusten tehosta Kielijärjestelmien reseptejä 丌3 Rekursiiviset määritelmät ja pelit5board-pulmaWebDetLuettelo kuvistaPleasetransition networkn networkn aliverkkojen kanssa5 RTNting“ Alice ajaa26 Järjestelmän tehosuhteita lisää tuotantoa8Tmuuntaa
3 1 Kaavio-ohjelman suorittaminen4e kartoittaa syötteet ulostuloon42 Koostumus43 Pyöreä kokoonpano44 Rekursiivinen kokoonpano5 Corneri5 1 Pegboard PuzzleComputing and with wine62 Comig looginen vai ei kanssa wine63 Computing and3 muodostamalla kaksi ja funktiot65 Säännöt Turingin parinnuksen tarkistamiseksi koneen tasapaino6666
1 Fibo7:n arviointi 2 Joukkojen O(), Q() ja O() visualisointi73 Kasvujärjestykset91 Sarenvironments92 Envirbigger 3 493 Ympäristö arvioinnin jälkeen(define inc(make-adder 1))9 4 Envirent for ee runko (sis. 149)95 Muuttuva pari luotu evaluating(set-mcdr! pari9 6 Mutablelistby evaluating(mlist 1 2 3)6770
osa kirjan kuvista, mukaan lukien kannen laatat, on luotuJotkin kannen ruutukuvista ovat peräisin Flickr Creative Commons -lisenssistä, Dunechaser, MichaelFitz, Wolfie Fox, glingl, jurvetson, KayVee INC, michaeldThe Van Gogh Starry Night -kuva osiosta 122 on peräisin oogle ArtProjectista NASA:n julkaisi osan 1 23 Apollo Guidance Computer -kuvan ja se on julkisessa käytössä. Osan 2 liikennevalo
1 on peräisin iStockPhotosta ja pyörivä liikennevalo Wikimedia Commonsista. Grace Hopperin kuva luvussa 3 on tietokonehistoriasta Muse. Luvun 4 pelikorttien kuvat ovat iStockPhotosta. Kuvat GaussHeronista ja Grace Hoppista 4. lisensoitu United Feature Syndicate, Inc:ltä Pascalin kolmio Ada Lovelace luvussa 6 on peräisin Wikimedia Commonsista, maalauksesta. Luvun 7 matkamittarin kuva on iStockPhethen kuva turhautuneesta opiskelijasta Pythonin käärmeen hurmaaja jaksossa 111 ism iStockPhoto luvun l alanayn paperista xked-sarjakuvaa luvun 1l lopussa käytetään creativeRandall mi:n alla
Esipuhe Tämä kirja alkoi siitä oletuksesta, että tietojenkäsittelytiedettä tulisi opettaa vapaana taiteena, ei teollisena taitona. Minulla oli etuoikeus ottaa 6001 GerrySussmanilta, kun olin ensimmäisen vuoden opiskelija MIT:ssä, ja tämä kurssi herätti voiman ja kauneuden. , ja inspiroi minua ryhtymään mainostutkijaksi tietojenkäsittelytieteessä Kun saavuin uutena tiedekuntana, jonka tarkoituksena oli havaita, että tietojenkäsittelyn johdatuskurssit keskittyivät teollisten taitojen opettamiseen ja teknisen monimutkaisuuden selittämiseen käytettyyn aikaan, apurahan ja National Sdationin läpikäymiseen jäljellä oleva aika myönsi uusi tietojenkäsittelytieteen johdantokurssi, joka tarjottiin ensimmäisen kerran keväällä 2002 poikkeuksellisen apuvalmentajan ryhmän avulla
johtuen jostain ensimmäisellä puoliskolla opiskelija kurssin, mutta pieni, peloton kiitos heidän ponnistelunsa, että tämä kirja on olemassa, että kurssi, ja useat seuraavat tarjoukset, käyttivät Abelson Sussmans outstandg Structure and Interpretation of Computer Programs (SICP) oppikirjaa yhdessä Douglas Hofstadters Godelin kanssa, Escher, Bach: An Eternal Golden braid – Hargaictor Clay Yountront: Grace Deng, Rachel Dada, Jon Erdman (Apulaisvalmentaja ajattelussa SICP on ehkä kaikkien aikojen suurin oppikirja, koska suurella pelolla yritin kehittää uutta toivoa, jonka tuloksena syntyvä kirja vangitsee SICP:n spirimutinyoima, mutta soveltuu paremmin opiskelijoiden johdantokurssiin SICP-analyysiin kuulumattomat kuvat, esineet ja soveltuvuus, vaikka kirja on suunniteltu yhden lukukauden johdantokurssin ympärille, sen pitäisi sopia myös itseopiskelijoille ja henkilöille, joilla on huomattava ohjelmakokemus, mutta ilman vastaavaa tietotekniikan tietämystä
Olen kiitollinen monille ihmisille, jotka auttoivat kehittämään tätä kurssia ja kirjaa Wesey weithe ensimmäinen henkilö, joka opetti tämän kirjan, ja hänen perusteellinen ja oivaltava palaute johti parannuksiin kaikkialla
GregHumphreys, Paul Reynolds ja Mark Sherriff ovat myös opettaneet kiitollisia kaikille apuvalmentajille vuosien varrella, erityisesti Sarah Bergkuistia (2004), Andrew Connorsia (2004), Rachel Dadaa (2003), Paul DiOriota (2an (2002)). , Ethan Fast(2009), David Faulkner(2005), Jacques Fournier(2003)chard Hsu(2007), Rachel Lathbury (2009), Michael Lew(2009), Stephen Lia2002, Dan Marcus(2007), Rachel Rater(2009). ), Spencer Stockdale (2003), DanUpton (2005), Portman Wills (2002), Katie Winstanley (2003 ja 2004) ja Rebecca Zapfel (2009) William Aiello, Anna Chefter, Chris Frost, Jonathan grierThad Hughes, Tim Alan Kay Koogle, Jerry McGann, Gary McGraw, Radhika NagShawn O'Hargan, Mike Peck ja Judith Shatin tekivät myös tärkeitä konuja. Suurin kiitos kuuluu vaimolleni Noralle, joka on jatkuvasti, kiitokseni kaikille menneille, nykyisille ja tuleville. opiskelijat, jotka käyttävät tätä kirjaa elokuu 201