Hjem Personlig finansiering Java Programmeringsudfordring: Oprettelse af en enkel turingmaskine - dummier

Java Programmeringsudfordring: Oprettelse af en enkel turingmaskine - dummier

Video: Java Tutorial for Beginners [2019] 2024

Video: Java Tutorial for Beginners [2019] 2024
Anonim

I matematikeren Alan Turing blev der opfattet en bedragerisk simpel type beregningsmaskine kaldet en Turing Machine . Turing har aldrig faktisk bygget en Turing Machine. I stedet var det en hypotetisk enhed, som han koncocted til at støtte i undersøgelsen af ​​beregningsevne - det vil sige om komplekse problemer kan løses ved beregningstrin og om en maskine kan udtænkes, der kan løse ethvert beregbart problem. (Hvis du er interesseret i at vide mere om historien eller anvendelsen af ​​Turing-maskiner, kan du finde mange artikler om dem på internettet. Brug bare enhver søgemaskine til at søge efter "Turing-maskine".)

Funktionen af ​​en Turing Machine er enkel. Det er kun et par grundlæggende begreber:

  1. Hjertet i en Turing Machine er et uendeligt langt bånd, som er opdelt i celler, på hvilke oplysninger der kan skrives.

    I egentlig praksis kan selvfølgelig ingen fysisk enhed have et uendeligt antal celler. Men i teorien om en Turing Machine er båndet uendeligt.

  2. De oplysninger, der kan skrives på hver celle, er begrænset til et enkelt symbol, f.eks. En 0 eller en 1. Imidlertid kan oplysninger repræsenteres af de kombinerede værdier af successive celler.

    Du kan for eksempel repræsentere numeriske værdier ved successive forekomster af symbolet 1 efterfulgt af en 0. Således repræsenterer 1110 værdien 3, fordi der er tre 1'er; 111111011110 kan repræsentere værdierne 6 og 4 (seks 1'er efterfulgt af et nul efterfulgt af fire 1'er efterfulgt af et andet nul).

  3. Turing Machine indeholder et læse-skrivehoved , som altid er placeret over en (og kun en) af kassens celler.

    Denne læse skrive hoved kan læse symbolet, der er indeholdt i cellen. Det kan også slette symbolet og, hvis det ønskes, skrive et nyt symbol på sin plads. Cellen, over hvilken læse-skrivehovedet er placeret, betegnes som nuværende celle eller hovedcelle .

  4. Båndet er motoriseret, så det kan flyttes til venstre eller højre under læs-skrivehovedet en celle ad gangen.

  5. Maskinen har en tilstand , som er repræsenteret af et symbol som et bogstav i alfabetet.

Som enhver computer kan en Turing Machine programmeres. Et program til en Turing Machine ligner imidlertid ikke på eksternt et Java-program.

I stedet er et Turing Machine-program simpelthen et sæt regler, som evalueres for at bestemme, hvilke handlinger maskinen skal tage. Hver regel identificerer en handling, der skal tages, når den aktuelle celle indeholder et givet symbol, og maskinen er i en given tilstand.For eksempel kan en regel diktere hvad man skal gøre, hvis den nuværende celle indeholder en 1, og maskinens tilstand er "a".

Hver regel kan angive en af ​​tre handlinger:

  • Slet den aktuelle celle eller skriv en ny værdi til cellen.

  • Flyt båndet en celle til venstre eller en celle til højre.

  • Skift maskinens tilstand til en ny tilstand.

For eksempel kan en regel angive, at hvis den nuværende celle indeholder en 1 og maskinens tilstand er "a", skal turingmaskinen skrive en 0 i den nuværende celle, fremføre båndet en celle til højre og ændre Maskinen tilstand til "b. "

Ud over et program kan Turing Machine's tape have en startværdi.

Det er det; Det er hele definitionen af ​​en Turing Machine. På trods af sin enkelhed kan en Turing Machine beregne alt fra 2 + 2 til bane af en raket til Mars.

Til denne udfordring skal du oprette en meget enkel Turing Machine. For at forenkle problemet accepterer du følgende begrænsninger på denne version af Turing Machine:

  • Båndet behøver ikke at være uendeligt. Du kan bruge en hvilken som helst Java-funktion - et array, en streng eller en samling - for at repræsentere båndet.

    (Bemærk at selvom båndet ikke behøver at være uendeligt, skal du nemt kunne flytte til venstre eller højre fra den aktuelle celle. Hvis du vælger at bruge en matrix, skal du ikke starte med den nuværende celle ved elementet 0 fordi du ikke kan flytte til venstre derfra.)

  • En celle kan være tom, eller den kan indeholde et hvilket som helst bogstav eller tal. En tom celle er repræsenteret af en understregningstegn.

  • Staten kan være en enkelt alfanumerisk karakter.

  • Programmet til Turing Machine læses fra en tekstfil. Denne tekstfil indeholder en regel pr. Linje. Hver regel indeholder fem tegn, adskilt af mellemrum, der angiver detaljerne for hver regel, som følger:

    • Nuværende celle: Den værdi, der skal matches for den nuværende celle.

    • Nuværende tilstand: Den værdi, der skal matches til den aktuelle maskinstilstand.

    • Ny celle: Værdien til at skrive til den nye celle. _ at slette cellen, * forlade cellen uændret

    • Bevægelse: L eller R for at flytte båndet til venstre eller højre; H for at stoppe programmet enhver anden karakter for ikke at flytte båndet.

    • Ny tilstand: Den nye værdi for maskinens tilstand.

  • For eksempel siger følgende, at når den nuværende celle er 1, og staten er "a", skal den nuværende celle indstilles til 0, båndet flyttede en celle til venstre, og staten skal indstilles til " b: "

    1 a 0 L b
    
    • Den første linje i tekstfilen skal indeholde en streng, der repræsenterer de oprindelige værdier for båndet.

    • Den anden linje i tekstfilen skal indeholde den oprindelige status.

Følgende figur viser brugergrænsefladen til prøveopløsningen, men du er velkommen til at bruge ethvert brugergrænseflade design, du gerne vil have til dette projekt.

En potentiel Turing Machine-grænseflade.

Her er nogle overvejelser for at oprette grænsefladen:

  • Værdi og nuværende celle: I det mindste skal du vise værdien af ​​båndet og markere den aktuelle celle.

  • Værktøjer og display: Du bør også give mulighed for at starte, stoppe eller genstarte programmets udførelse, og du skal vise resultaterne af hvert trin i programmet.

  • Programudførelse: Du kan give brugeren mulighed for at køre det indlæste program fra start til slut samt en måde, hvorpå brugeren kan gennemgå et enkelt trin gennem programmet ved at klikke på en knap for at udføre hvert trin af programmet.

  • Indlæser programmet : Du skal angive knapper, der giver brugeren mulighed for at indlæse et Turing Machine-program fra en tekstfil, og det giver brugeren mulighed for at nulstille maskinen for at køre programmet igen.

Her er et tip til implementering af det uendelige bånd: Brug tre strengvariabler til at holde båndværdierne, en for det enkelte tegn gemt i den aktuelle celle, et sekund for tegnene til venstre for den aktuelle celle og en tredje for tegnene til højre for den aktuelle celle. Du kan så nemt flytte den aktuelle celle til venstre eller højre ved at bruge den rigtige kombination af sammenkædnings- og substringsoperationer.

Du kan finde løsningen på denne udfordring på fanen Downloads i Java All-in-One for Dummies, 4. udgave produktside.

Held og lykke!

Java Programmeringsudfordring: Oprettelse af en enkel turingmaskine - dummier

Valg af editor

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld fotoredigeringsfunktion tilbyder bundter af værktøjer, som du kan bruge at redigere dine billeder, fra korrektionsværktøjer til fastsættelse af farve og klarhed til filtre, lag og meget mere for at ændre eksisterende fotos eller skabe helt originale billeder fra bunden. Men alle disse værktøjer gør også Komplet fotoredigeringstilstand kompleks. Du kan flytte ind i ...

Generelle blandingsformer i Photoshop Elements - dummies

Generelle blandingsformer i Photoshop Elements - dummies

Elementer spænder over 25 blandingstilstande. Blend modes påvirker hvordan farver interagerer mellem lag og også hvordan farver interagerer, når du anvender maling på et lag. Ikke alene gør blandingstilstande interessante effekter, men du kan også nemt anvende, redigere eller fjerne blandingsfunktioner uden at røre dine billedpixel. De forskellige blandingstilstande ...

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriindstillinger hjælpe med at definere, hvordan dine figurer ser ud. Klik på nedpegepilen i værktøjsindstillingerne i Elements for at få adgang til de geometriske indstillinger, der beskrives i det følgende. Rektangulære og afrundede rektangel geometriske indstillinger Her er geometriske indstillinger for rektangel og afrundede rektangelformer: Ubegrænset: Giver dig mulighed for at få fri tøj til at tegne en ...

Valg af editor

Sådan bygger du tabeller i HTML5 - dummies

Sådan bygger du tabeller i HTML5 - dummies

Sommetider indeholder din webside data bedst fremlagt i et bord . Du kan bruge HTML5's komplette bordsystem til at oprette tabeller som den i dette eksempel: Den grundlæggende struktur i et bord i HTML-format er rimeligt let at forstå; Tjek koden, der oprettede tabellen i eksemplet:

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Der er situationer, hvor man kun vil en enkelt kopi af et baggrundsbillede på dit CSS3-websted. Det kan være, at billedet du har brugt er noget, der ikke gentager sig godt eller er stort nok til, at du virkelig ikke vil have det gentaget. Følgende procedure viser en teknik, du kan bruge til at fortælle ...

Hvordan man opbygger en webside skabelon fra scratch-dummies

Hvordan man opbygger en webside skabelon fra scratch-dummies

Standardværktøjet på tværs af digitalt agenturer og interne afdelinger til opbygning af website grafik er Adobe Photoshop. Selvom fyrværkeri er optimeret og målrettet til at producere web-grafiske kildefiler, er det bare ikke fanget, sandsynligvis på grund af den massive genoplæringsindsats ville det medføre, at hele afdelinger gør omskifteren. At oprette et nyt ...

Valg af editor

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Som flere og flere mennesker finder ud af din ny LinkedIn-gruppe, og som medlemmer begynder at deltage, kan du opleve, at nogle af de personer, der har klikket på linket for at deltage, ikke er på din forhåndsgodkendte liste. Måske er de mennesker, du ikke har forstået var på LinkedIn, eller du var ikke klar over, at de var gyldige grupper ...

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Ud over et profilbillede giver LinkedIn brugere mulighed for at forbedre de visuelle sociale markedsføringselementer i deres profiler ved at tilføje billeder til deres profilprofil. Du kan tilføje billeder til ethvert afsnit i din LinkedIn-profil. Tilføjelse af billeder til din profil kan hjælpe dig med at fortælle din historie visuelt og ...

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

, Når du har opfyldt kravene til oprettelse en virksomhedsside på LinkedIn, er det tid til at komme i gang ved at tilføje selskabets side til Linkedins system. For at oprette din virksomhedsside skal du blot følge disse trin: