V računalništvu je abeceda končna neprazna množica, torej množica z omejenim številom elementov in vsaj enim elementom. Elementi abecede se imenujejo črke ali simboli abecede. Abeceda je osnovni gradnik pri definiranju nizov, jezikov in formalnih modelov v teoriji računanja.

Primeri abeced

Primer preproste abecede je { - , } {\displaystyle \{-,\cdot \}}{\displaystyle \{-,\cdot \}}, ki se lahko uporablja za Morsejevo abecedo, ali {begin, if, else, for, while}, ki so lahko ključne besede programskega jezika. Pogoste praktične abecede vključujejo binarno abecedo {0,1}, množico ASCII znakov ali Unicode nabore znakov za besedila.

Zakaj množica naravnih števil ni abeceda

Množica naravnih števil ni abeceda, ker ni končna — vsebuje neskončno mnogost elementov. V definiciji abecede je ključna zahteva končnosti; brez nje ne moremo govoriti o običajnih lastnostih, kot so izračun dolžine niza ali konstrukcija formalnih jezikov na standarden način.

Binarna abeceda in nizi

Abeceda, ki se najpogosteje uporablja v računalništvu, je {0,1}. Imenuje se binarna abeceda, ker vsebuje dva simbola. Abecedo lahko uporabimo za sestavo niza (ali besede). Niz je končno zaporedje črk iz abecede. Na primer, niz dolžine 5 nad {0,1} je 01101. Dolžino niza w označimo s |w| (npr. |01101| = 5).

Prazen niz

Prazen niz je niz brez črk (pogosto se zapiše kot λ {\displaystyle \lambda }{\displaystyle \lambda }). Prazen niz je veljaven niz nad katero koli abecedo in ima dolžino 0. Pomembno je ločiti prazen niz od prazne množice – prazen niz je element (niz), medtem ko je prazna množica množica, ki ne vsebuje nobenega niza.

Operacije nad nizi

Pomembna operacija nad nizi je konkatenacija: če sta a in b niza, je ab njihov zaporedni spoj. Konkatenacija je asociativna in ima enoto v obliki praznega niza λ. Za abecedo Σ je moč definirati potence zbirk:

  • Σ^0 = {λ} (množica, ki vsebuje le prazni niz).
  • Σ^n za n ≥ 1 je množica vseh nizov dolžine n, sestavljenih iz črk iz Σ.
  • Σ^* je množica vseh končnih nizov nad Σ (vse Σ^n za n ≥ 0 združeno) — to je Kleenova zvezda (ali Kleenovo zaprtje).
  • Σ^+ = Σ^* \ {λ} (imenovana Kleenov plus) je množica vseh neniceljnih (neničnih) nizov nad Σ.

Če imamo abecedo Σ {\displaystyle \Sigma } {\displaystyle \Sigma }. Potem zapišemo množico vseh nizov, ki jih lahko sestavimo iz Σ {\displaystyle \Sigma }{\displaystyle \Sigma }, kot Σ {\displaystyle \Sigma ^{*}} {\displaystyle \Sigma ^{*}}. To imenujemo Kleenova zvezda (ali Kleenovo zaprtje) Σ {\displaystyle \Sigma } {\displaystyle \Sigma }. Imenuje se po matematiku Stephenu Coleu Kleenu.

Primer Kleenove zvezde

Kleenova zvezda binarne abecede je { λ , 0 , 1 , 00 , 01 , 10 , 11 , 000 , 001 , ... . } {\displaystyle \{\lambda ,0,1,00,01,10,11,000,001,...\}} {\displaystyle \{\lambda ,0,1,00,01,10,11,000,001,...\}}. Tri pike za 001 kažejo, da Kleeneove zvezde abecede ne moremo zapisati v celoti, ker je to neskončna množica.

Jeziki in uporaba

Abecede so pomembne, ker se uporabljajo pri preučevanju formalnih jezikov, končnih avtomatov in zelo zahtevnih vprašanj v računalništvu o tem, kaj je mogoče izračunati in česa ne. Formalen jezik je preprosto podmnožica Σ^* — torej množica izbranih nizov nad neko abecedo. Jeziki se uporabljajo za modeliranje programskih jezikov, protokolov, izrazov v iskanju in mnogih drugih področij.

Dodatne opombe in lastnosti

  • Veljavne operacije nad jeziki vključujejo unijo, presek, razliko, konkatenacijo jezikov in zvezdo (L^* = ∪_{n≥0} L^n).
  • Kleenova zvezda ohranja lastnosti glede regulativnosti: če je L regularen jezik, je tudi L^* regularen.
  • Abeceda je pogosto definirana eksplicitno (npr. Σ = {a,b,c}) ali implicitno (npr. niz znakov ASCII). Pri praktičnih aplikacijah se običajno uporablja velik, a še vedno končen nabor simbolov (npr. Unicode za besedilne obdelave).
  • Pomembna je ločnica med simbolom, znakom in bajtom — en simbol iz abecede je abstrakten element; njegova implementacija v računalniku lahko zasede en ali več bajtov.

Skupaj abeceda, nizi in operacije nad njimi tvorijo osnovo teorije formalnih jezikov in avtomatov, kar je temelj za razumevanje prevajalnikov, regularnih izrazov, analize programov in mnogih drugih področij računalništva.