Video: Java Tutorial for Beginners [2019] 2025
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:
-
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.
-
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).
-
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 .
-
Båndet er motoriseret, så det kan flyttes til venstre eller højre under læs-skrivehovedet en celle ad gangen.
-
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!