Sissejuhatus algoritmidesse ja UMLi

Mis on algoritm?

Kõige lühidamalt öelduna on algoritm juhis probleemi lahendamiseks. Algoritmideks võivad olla tegevused pärismaailmas – nt kuidas sõita TTÜst lauluväljakule, vahetada ukselukku või valmistada pannkooke. Kõiki neid tegevusi on võimalik kirjeldada samm-sammu haaval, mille järgimisel on võimalik jõuda soovitud tulemuseni.

On oluline, et algoritmi puhul oleks olemas kindel alguspunkt, lõpppunkt, kõik etapid oleksid selgesti kirjeldatud ning juhised ei katkeks ootamatult – st on võimalik jõuda lõppu. Samuti võivad oluliseks kujuneda erinevad eeldused.  Vaadeldes näiteks TTÜst lauluväljakuni sõitmist võivad tekitada probleeme järgnevad puudujäägid, kuid mitte ainult:

  • Eeldused: Milline sõiduvahend meil on? On selleks on auto, jalgratas või miski muu? Kas see sõiduvahend on tehniliselt korras? Kas me oskame või tohime sellega sõita?
  • Lähtekoht: Kas me alustame sõitu peamaja või mõne teise hoone eest?
  • Sihtkoht: Lauluväljakule saab ligi mitmest kohast, kas me soovime nt saada oru või mereväravate juurde? Võimalik, et soovime saada hoopiski laulukaare ette?
  • Ebaselged juhised: pööra vasakule – millal? Mõne ristmiku puhul võib olla mitu teed, mis asetsetvad vasakul.

Enamlevinud on algoritmi mõiste siiski matemaatikas ja arvutiteaduses. Lihtsamatest neist on näiteks avaldise lahendamine jälgides tehete järjekorda, ruutvõrrandi lahendite otsimine, suurima või vähima väärtuse leidmine paljude arvude hulgast, korduvate suuruste eemaldamine, elementide sorteerimine, otsimine, arvusüsteemide teisendamine jne.

Algoritmide juures on esmatähtis ülesande edukas sooritamine, kuid samatähtis on ka selle efektiivsus – st kui palju kulub aega probleemi lahendamiseks? Veelgi enam on see oluline probleemide suurenedes (nt kuidas kasvab ajakulu sorteerides 10 arvu asemel 10 miljardit arvu?). Samuti võib ülesande puhul küsida kui universaalselt seda lahendada tuleb?  Kitsenduste tegemine aitab sageli lahendada probleeme kiiremini, kuid sellisel juhul peab veenduma, et need alati kehtiksid.

Kursuse raames tutvume lihtsamate algoritmidega ning kuidas algoritme esitada pseudokoodis ja modelleerimisvahendite abil.

Hea algoritm on programmeerimiskeelest sõltumatu – st ülesande lahenduseni on võimalik jõuda kasutades erinevaid programmeerimiskeeli, ühele konkreetsele keelele omast süntaksit ei kasutata.

Mis on UML?

UML (universal modeling language), nagu nimigi ütleb, on modelleerimiskeel.  Standardiseeritud modelleerimiskeele peamine eesmärk on kirjeldada olustike, sündmusi, tegevusi, andmestruktuure jm sedasi, et kõik osapooled sellest ühtemoodi aru saaksid. Teisisõnu on see üks võimalustest suurtes organisatsioonides meeskondades siseselt, struktuurüksuste vahel ja kliendiga suheldes kirjeldada loodavat toodet ja selle omadusi nii, et kõik sellest üheselt aru saaksid.

UML standardi alusel jaotuvad diagrammid käitumuslikeks ja struktuurseteks. Antud kursuse raames piirdume tegevusdiagrammidega, mis on üks mitmetest käitumuslikest diagrammidest. Tegevusdiagrammide abil on võimalik visualiseerida algoritme ja protsesse, näidates järjestikkuseid toiminguid soovitud tulemuseni jõudmiseks. Teiste diagrammi tüüpidega tutvute hilisemates kursustes.

Vajalikud märgised

Järgnevalt on välja toodud peamised käesoleva kursuse raames kasutatavad märgised. Loetelu ei ole täielik.

Märgis Selgitus
uml algus Tegevuse algus
uml lopp Tegevuse lõpp
uml tegevus Tegevus
uml tingimus Tingimus, otsus
Koondumine
uml kommentaar Kommentaar
uml paralleel algus Sünkronisatsiooniriba: Paralleeltegevuste algus

järgnevad tegevused peavad olema üksteisest sõltumatud ning kõik järgnevad tegevused toimuvad üheaegselt

uml paralleel lopp Sünkronisatsiooniriba: Paralleeltegevuste lõpp

Paralleelselt toimunud tegevused koonduvad selles punktis. Sellest punktist on edasi võimalik minna vaid juhul, kui kõik siia suubuvad tegevused on lõpetatud!

Soovitusi modelleerimisel

  • Nooled ei tohiks olla veetud diagonaalis. Suunda muutes tuleks nool murda täisnurga all.
  • Võimalusel väldi joonte üksteisest üle viimist. Kui seda on vaja teha, siis ainult täisnurga all.
  • Juhul kui algoritmil eksisteerib mitu võimalikku lõpptulemust, tuleks igale lõpule lisada selgitav kommentaar. Nt Pangakaardiga kaupmehe juures makstes on vaid üks võimalikest lõppudest makse edukas sooritamine.
  • Keerukamate ülesannete puhul mõtle läbi põhilised tegevused ja grupeeri need visuaalselt eraldi. Selleks võivad olla nt sisendandmete lugemised, erinevad töötluse etapid (sorteerimine, otsimine, tulemuste leidmine, väljastamine jne).