Najkrajši niz

Najkrajši niz

Avtor: Sabina Oražem

Besedilo naloge

Mojca si je v tekstovno datoteko zapisala ducat besed s petimi črkami. Poiskati želi najkrajši niz (ki ni nujno smislena beseda), v katerem lahko najdemo vse besede.

Vnesi ime datoteke: podatki.txt Najkrajši niz je: ...nakupotepkartarok...

(Prikazan je le del rešitve, v katerem razberemo besede nakup, potep, tepka, karta, tarok.)

(primer_najkrajsi_niz.GIF)
Simbolična slika iskanja najkrajšega niza

Ideja rešitve

Najprej je potreben dober pregled datoteke. Ko je prikazano pri razdelku 'Testiranje', je potrebno preveriti ali datoteka obstaja, ali je na njej zapis in ali so besede dolžine 5 znakov.

Ustrezne besede (torej dolžine 5 znakov) zberemo v seznam, to je List<>. Od tega trenutka dalje beremo besede le še iz seznama.

Algoritem naj bo takšen:

Vzamemo poljubno besedo v seznamu in jo primerjamo z vsemi preostalimi. Sproti si zapomnimo najboljše ujemanje, torej za koliko črk se besedi ujemata in katera je tista druga beseda, ki se ujema s tekočo, torej tisto, ki jo trenutno primerjamo z vsemi preostalimi.

Najboljše ujemanje naj bo sedaj trenutno najkrajši niz. Torej besedi že sklenjeni skupaj.

Od tega trenutka dalje naj bo tista beseda s katero primerjamo vse druge, kar trenutno najkrajši niz. Nadaljujemo vse dokler, ne porabimo vseh besed. Če je bila med besedami tudi takšna, ki se ne ujema z nobeno drugo, jo pustimo, na koncu pa le dodamo končnemu najkrajšemu nizu.

Paziti moramo tudi na že sklenjene besede, torej že najkrajše nize, ki jih je lahko več, ki se med seboj ne ujemajo.

Razlaga algoritma

Delamo s tremi seznami, ki hranijo trenutno »aktualne« besede, nize. En seznam hrani besede, ki smo jih prebrali z datoteke. Drugi hrani tekoče besede, ki se še niso ujemale z drugo besedo ali nizom. Tretji pa hrani nize, ki med besedami ali drugimi najkrajšimi nizi niso imeli ujemanja.

Vzamemo prvo besedo s seznama besed, ki smo jih prebrali z datoteke. Besedo s seznamai zbrišemo, saj je bila že »porabljena«. Zanka v kateri ponavljamo algoritem, teče vse, dokler je v prvotnem seznamu še kakšna beseda. Ob vsakem novem koraku v zanki na novo hranimo parametre o tem koliko črk se pri dveh besedah ujema (iščemo takšni dve, pri katerih je to število največje) in pa, kateri sta ti dve besedi. »Porabljeno« besedo moramo izbrisati iz prvotnega seznama, zato hranimo tudi indeks, na katerem mestu v seznamu se ta beseda nahaja.

V zanki je pet korakov. Prvič preverimo ali sta besedi, ujemata v petih znakih, nato ali se morda v štirih, treh, dveh ali v enem. Če najdemo ujemanje, si zapomnimo število znakov, ki se ujemajo in besedo. Podobno ponovimo pri naslednji primerjavi. Ko smo preverili vse možne kombinacije besed, vzamemo tisto najboljšo in besedi sklenemo.

Na koncu sklenemo še besede in najkrajše nize, ki se ne ujemajo s preostalimi najkrajšimi nizi.

Testiranje: Kaj gre lahko narobe?

Napačno so lahko podani podatki, ki jih vnaša uporabnik. Torej ime datoteke ali pa zapis na datoteki.

Uporabnik se lahko na primer zmoti pri vnosu imena tekstovne datoteke, s katere naj beremo. Zato moramo preveriti, ali datoteka obstaja.

Ko vemo, da datoteka obstaja, še vedno ne vemo, ali je zapis na njej ustrezen. Pričakujemo besede dolge po pet znakov, vsako v svoji vrstici. Preverimo, ali je datoteka prazna. Ali ima vsaj eno ustrezno vrstico.

Če so na datoteki tako ustrezne, kot tudi neustrezne vrstice, shranimo le tiste, v katerih je beseda dolžine pet znakov. Neustrezne vrstice izpustimo.

Testiranje: Ustrezna datoteka

Besede na datoteki so velikosti petih znakov. Med njimi ni belih znakov.

Takšno datoteko pričakujemo.

(besede_1.png)
Zaslonska slika ustrezne datoteke

Izpis na konzoli je najkrajši niz, sestavljen iz danih besed.

(besede_2.png)
Zaslonska slika izpisa na konzoli pri ustrezni datoteki

Testiranje: Neustrezna datoteka

Zapis na datoteki ni ustrezen. V dani vrstici ni beseda sestavljena iz petih znakov, pravzaprav sta v vrstici kar dve besedi.

Vrstico izpustimo in preverimo naslednjo. Ker naslednjih vsrtic ni, ne moremo sestaviti najkrajšega niza.

(besede_3.png)
Zaslonska slika neustrezne datoteke

Izpis na konzoli je ustrezno opozorilo.

(besede_4.png)
Zaslonska slika izpisa na konzoli pri neustrezni datoteki

Testiranje: Prazna datoteka

Tokrat je vhodni podatek prazna datoteka, torej na datoteki ni zapisana nobena beseda.

(besede_5.png)
Zaslonska slika prazne datoteke

Izpis na konzoli je ustrezno opozorilo.

(besede_6.png)
Zaslonska slika izpisa na konzoli pri prazni datoteki

Testiranje: Neustrezna vrstica

Na datoteki so besede dolžin petih znakov. Med njimi pa se lahko najdejo tudi vrstice, kjer zapis ni ustrezen. V tem primeru, upoštevamo le besede ustrezne dolžine, tiste druge pa izpustimo.

(besede_7.png)
Zaslonska slika datoteke z eno neutrezno vrstico

Izpis na konzoli je ustrezno opozorilo.

(besede_8.png)
Zaslonska slika izpisa na konzoli pri datoteki z eno neutrezno vrstico

Testiranje: Datoteka ne obstaja

Če datoteka, katere ime smo podali, ne obstaja, se izpiše naslednje opozorilo:

(besede_9.png)
Zaslonska slika izpisa na konzoli ko dana datoteka ne obstaja

Filmček o delovanju

0%
0%