I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

Seotud dokumendid
Peafail3_2.dvi

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

(loeng3-ohtlikud_koodiloigud)

PowerPointi esitlus

1. AKE Ajalise keerukuse empiiriline hindamine

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

Relatsiooniline andmebaaside teooria II. 6. Loeng

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

Microsoft Word - requirements.doc

Word Pro - diskmatTUND.lwp

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x

PHP

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

lvk04lah.dvi

SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Wind

Andmed arvuti mälus Bitid ja baidid

E-arvete juhend

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k

Algoritmid ja andmestruktuurid

loeng2

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

MTAT Loeng 11 ( )

Funktsionaalne Programmeerimine

vv05lah.dvi

Matemaatilised meetodid loodusteadustes. I Kontrolltöö I järeltöö I variant 1. On antud neli vektorit: a = (2; 1; 0), b = ( 2; 1; 2), c = (1; 0; 2), d

EUROOPA ÜHENDUSTE KOMISJON Brüssel KOM(2005) 539 lõplik 2005/0215 (CNB) Ettepanek NÕUKOGU MÄÄRUS millega sätestatakse nõukogu määruse (EÜ) n

IVXV võtmerakendus Spetsifikatsioon Versioon jaan lk Dok IVXV-SVR-1.4.0

Tootmine_ja_tootlikkus

Euroopa Liidu Nõukogu Brüssel, 24. september 2015 (OR. en) 12353/15 ADD 2 ENV 586 ENT 199 MI 583 SAATEMÄRKUSED Saatja: Kättesaamise kuupäev: Saaja: Eu

Microsoft Word - Referaat.docx

prakt8.dvi

Mining Meaningful Patterns

lcs05-l3.dvi

Funktsionaalne Programmeerimine

SQL

loeng7.key

Microsoft PowerPoint - EMCS13

Itella Estonia OÜ Uuendatud EXPRESS BUSINESS DAY BALTICS PAKKIDE JA ALUSTE TRANSPORT Express Business Day Baltics paki lubatud maksimaalsed

Süsteemide modelleerimine: praktikum Klassiskeemid Oleg Mürk

Antennide vastastikune takistus

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile

HAJUSSÜSTEEMID HAJUSSÜSTEEMID Kaugprotseduurid IDL kompileerimine ONCIDLnäide CORBAIDLnäide MIDLnäide DCERPCmuidomadusi XML-RPC JSON-RPC REST document

Treeningvõistlus Balti tee 2014 võistkonnale Tartus, 4. novembril 2014 Vastused ja lahendused 1. Vastus: 15, 18, 45 ja kõik 0-ga lõppevad arvud. Olgu

Bild 1

Lisa I_Müra modelleerimine

Praks 1

Microsoft Word - TallinnLV_lihtsustatud_manual_asutuse_juhataja_ doc

Image segmentation

Andmebaasid, MTAT loeng Normaalkujud

Operatsioonisüsteemi ülesanded

6 tsooniga keskus WFHC MASTER RF 868MHz & 4 või 6 tsooniga alaseade SLAVE RF KASUTUSJUHEND 6 tsooniga WFHC RF keskus & 4 või 6 tsooniga alaseade SLAVE

Rahulolu_uuring_2010.pdf

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit

Kiire Paigaldamine Otseühenduse Korral Lühi Manual DS-7000 Seeria NVR Salvestiste Jaoks

TELLIJAD Riigikantselei Eesti Arengufond Majandus- ja Kommunikatsiooniministeerium KOOSTAJAD Olavi Grünvald / Finantsakadeemia OÜ Aivo Lokk / Väärtusi

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo

Microsoft Word - ref - Romet Piho - Tutorial D.doc

Võistlusülesanne Vastutuulelaev Finaal

IMO 2000 Eesti võistkonna valikvõistlus Tartus, aprillil a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a 2, a 3,

Kerala State Haj Committee HAJ 2014 Flight Manifest FLIGHT NO. SV-5731 DATE: 14/09/2014 TIME: 16:35 RETURN FLIGHT NO: SV-5764 DATE: Cov No

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode])

180104komisjon-ekilex.key

Õppematerjalide esitamine Moodle is (alustajatele) seminar sarjas Lõunatund e-õppega 12. septembril 2017 õppedisainerid Ly Sõõrd (LT valdkond) ja Dian

Microsoft Word - HOTSEC kasutusjuhend v1.900.docx

I klassi õlipüüdur kasutusjuhend

untitled

Pealkiri

Kuidas ärgitada loovust?

Microsoft PowerPoint - Andrus Kallastu Muusikaliste parameetrite mudel helilooja töövahendina Tallinn Tropus De profundis

AASTAARUANNE

Microsoft Word - Toetuste veebikaardi juhend

Microsoft Word - Keypad-controller-manual-new_1.docx

ITI Loogika arvutiteaduses

Tallinna Ülikool Digitehnoloogiate instituut JavaFX rakenduste kujundamine CSS abil Seminaritöö Autor: Hendrik Spiegelberg Juhendaja: Jaagup Kippar Au

E-R mudel

Praks 1

Matemaatiline analüüs III 1 4. Diferentseeruvad funktsioonid 1. Diferentseeruvus antud punktis. Olgu funktsiooni f : D R määramispiirkond D R selles p

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

Pealkiri

GSMG UK.indd

Eksam õppeainetes "Andmebaasid I" (IDU0220) ja "Andmebaaside projekteerimine" (IDU3381)

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1

Tartu Ülikool

Ostmine e-poes Võlumaa e-pood pakub ilutooteid juustele ja kogu kehale, naistele ning meestele, tuntud kaubamärkidelt üle maailma. Kaupade valikul on

Word Pro - digiTUNDkaug.lwp

Word Pro - digiTUNDkaug.lwp

Panganduse tekkimine Loe läbi tekst lk Panganduse tekkimisest ja vasta järgmistele küsimustele: 1. Millisest itaaliakeelsest sõnast tul

(Microsoft Word - \334levaade erakondade finantsseisust docx)

Load Ehitise kasutusluba Ehitusseaduse kohaselt võib valminud ehitist või selle osa kasutada vaid ettenähtud otstarbel. Kasutamise

Tala dimensioonimine vildakpaindel

TOIMIVUSDEKLARATSIOON Disboxid 464 EP-Decksiegel

Keskkonnaministri määruse lisa 3

Avaandmed Eesti Hariduse Infosüsteemis

Microsoft Word - Järvamaa_KOVid_rahvastiku analüüs.doc

Väljavõte:

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Konstruktorile antakse andmed, mis iseloomustavad mingit abstraktset, veel mitte eksisteerivat andmekogumit. Olgu loodud ehk konstrueeritud generaator-klassi isend, nt nimega gen, andmekogumi D jaoks. Siis igal järjekordsel pöördumisel gen.next() tagastab (annab välja) järjekordse elemendi andmekogumist D, juhul kui viimane ei ole veel ammendatud. Ammendatuse kontrollimiseks kirjeldatakse generaatori klassis tavaliselt ka loogilist tüüpi isendimeetod hasnext(), mis tagastab väärtuse true parajasti siis, kui vaadeldav andmekogum ei ole veel ammendatud. Generaator võimaldab mingi andmekogumi elemendikaupa läbivaatamist, seda ilma vajaduseta kõiki elemente eelnevalt valmistada ja mällu salvestada. Näiteks, while(gen.hasnext()){ // valmistada jrk elemendi väärtus, omistada muutjale e: T e = gen.next(); // töödelda D element e: Üks üldisematest Java generaatori klassi kujudest on esitatud järgmisel leheküljel. Selle kasutamine: Generaator<T> gen = new Generaator<T>(<D parameetrid>); for(t e : gen){ // andmekogumi D iga elemendi e korral // töödelda element e: Java generaatori klassi lihtsustatud skeem on toodud ülejärgmisel leheküljel. Ainukeseks avalikuks isendimeetodiks selles on meetod next(), mis annab välja (tagastab) järjekordse elemendi andmekogumist (juhul kui viimane ei ole veel ammendatud), või tühiviida null ammendatuse tunnusena. Sellise generaatori (nt nimega Gen_ )kasutamine: Gen_<T> gen = new Gen_<T>(<andmekogumi parameetrid>); T e; while((e = gen.next())!= null){ // e on andmekogumi järjekordne element, töödelda see:

2 1. VARIANTIDE LÄBIVAATAMINE import java.util.iterator; import java.util.nosuchelementexception; public class Generaator<T>implements Iterator<T>,Iterable<T>{ // isendimuutujad: protected ; Generaator<T>(<andmed hulga D kohta>){ // konstruktor //isendimuutujate sätestamine: //konstruktor /////// liideses Iterator ettenähtud meetodid: @Override public boolean hasnext(){ // tagastatakse true või false (isendimuutujate põhjal): //hasnext @Override public T next(){ if(hasnext()){ // tagastada jrk element(isendimuutujate põhjal): throw new NoSuchElementException("Juba ammendatud!"); //next @Override public void remove(){ throw new UnsupportedOperationException ("Eemaldamise tehet ei toetata."); //remove /////// liideses Iterable ettenähtud meetod: @Override public Iterator<int[]> iterator(){ return this; //iterator /////// abimeetodeid (isendimuutujate käitlemiseks): protected //class

1. VARIANTIDE LÄBIVAATAMINE 3 public class Gen_<T>{ // lihtsustatud skeemiga generaator // isendimuutujad: protected protected boolean ammendatud; // ammendatuse tunnus public Gen_<T>(<andmekogumi parameetrid>){ // konstruktor ammendatud = false; //konstruktor public T next(){ if(ammendatud) return null; <leida andmekogumi järjekordne element e> if(<seda enam ei leidunud>){ ammendatud = true; return null; return e; //next /////// abimeetodeid (isendimuutujate käitlemiseks): protected //class Ülalesitatud lihtsustatud skeemi kohaselt on programmeeritud kõik käesolevas materjalis välja pakutud generaatorid. Programm Algarvukaksikud. java esitab näitegeneraatori antud lõigul asuvate algarvukaksikute (twin primes) leidmiseks.

2. Permutatsioonid Antud listi kõikide permutatsioonide generaator: Gen_Permut. java. Tegemist on rekursiivse generaatoriga: järjekordne n-elemendilise listi a permutatsioon saadakse sel teel, et listi a viimase elemendita (n 1 elemendiga) listi mingisse permutatsiooni mingile kohale lisatakse listi a viimane element, vt joonis 1. Joonis 1: Permutatsioonide rekursiivselt leidmise idee.

3. Kombinatsioonid Joonis 2 selgitab võimalust kombinatsioonide leidmiseks; võib olla aluseks kombinatsioonide koostamisel nii rekursiivsel kui ka mitterekursiivsel moel. Joonis 2: Kombinatsioonide leidmise idee. I Indeksite kombinatsioonid Paljudel juhtudel sobib tugineda indeksite kombinatsioonide genereerimisele. Kui on olemas generaator-klass indeksite hulgast {0,1,2,,n 1 antud arvu k kaupa kombinatsioonide genereerimiseks, siis mingi n-elemendilise listi (L) elementide järjekordne kombinatsioon (KL) k kaupa on määratud järjekordse k kaupa kombinatsiooniga (KI) indeksite hulgast {0,1,2,,n 1: KL saadakse valikuna listist L indeksite KI järgi. Fikseeritud k korral saab vastava indeksite kombinatsiooni genereerida k- kordse tsükliga, näiteks juhul k=3 tsükliga Iga i1 korral, i1 = 0.. n k: Iga i2 korral, i2 = i1+1.. n k+1: Iga i3 korral, i3 = i2+1.. n k+2: anda välja [i1, i2, i3]

6 3. KOMBINATSIOONID Sellest lähtudes on võimalik välja töötada nii mitterekusiivne kui ka rekursiivne üldine indeksite kombinatsioonide valmistamise meetod. Rekursiivne meetod: ArrayList<ArrayList<Integer>> tehaindkomb(int n, int k){ // Antud: n ja k, 0 <= k <= n // Tulemus: tagastatakse list, mille elementideks on listid // kombinatsioonid k kaupa arvudest 0,1,, n 1 ArrayList<ArrayList<Integer>>tulem = new ArrayList<ArrayList<Integer>>(); if (k == 0) // baasjuht return tulem; ArrayList<ArrayList<Integer>> tulem0 = tehaindkomb(n 1, k 1); if (tulem0.isempty()) tulem0.add(new ArrayList<Integer>()); for(arraylist<integer> x : tulem0){ int algus = (x.size() > 0)? x.get(x.size() 1) + 1: 0; for( int i = algus; i <= n 1; i++ ){ ArrayList<Integer> xuus = new ArrayList<Integer>(x); xuus.add(i); tulem.add(xuus); return tulem; Mitterekursiivse lähenemise näiteks on generaator-klass Gen_IndKombin. java indeksite hulgast {0, 1, 2,, n 1 kombinatsioonide genereerimiseks. II Kombinatsioonid listi elementidest Generaator-klass listist antud arvu k kaupa kombinatsioonide leidmiseks: Gen_Kombin. java. Abiks on generaator-klass Gen_IndKombin. java: n-elemendilise listi a elementide järjekordse kombinatsiooni k kaupa määrab abi-generaatorist Gen_Kombin saadav järjekordne indeksite 0,1,,n 1 kombinatsioon k kaupa: listist a valitakse just nende indeksitega elemendid.

4. Alamhulgad Tähistame: P(A) - hulga A kõigi alamhulkade hulk. I Alamhulgad rekursiivselt Alamhulkade genereerimise rekursiivse skeemi aluseks on võrdus P(B {x)=p(b) X, kus X on hulk, mille iga element on saadud elemendi x lisamisel ühele hulga P(B) elemendile (vt joonis 3). Joonis 3: Näitehulga A alamhulkade hulk rekusiivselt. Selline skeem on realiseeritud antud hulga kõigi alamhulkade generaatoris Gen_Ah. java. II Alamhulgad mitterekursiivselt Hulga (A) alamhulkade hulk on selle kõikvõimalike kombinatsioonide ühend, P(A)= A k=0 Komb(A, k) kus Komb(A,k) on hulga A kõigi k kaupa kombinatsioonide hulk (vt joonis 4). Sellest lähtuvalt võib näiteks leida ja töödelda hulga a alamhulgad suuruse (ele- Joonis 4: Näitehulga alamhulkade hulk kombinatsioonide ühendina.

8 4. ALAMHULGAD mentide arvu) kahanemise järjekorras tsükli täitmise käigus: ArrayList<T> komb; for(int k = a.size(); k >= 0; k ){ Gen_Kombin<T> gen = new Gen_Kombin<T>(a, k); // generaator while((komb = gen.next())!= null){ // komb on jrk kombinatsioon a elementidest k kaupa <töödelda komb> Veel üks mitterekursiivne moodus oleks alamhulgad P(A) valida hulgast A maskide abil. Maskideks on bitijärjendid arvude 0,1,,2 A 1 esitused kahendsüsteemis. (Siin üksikasjalikumalt ei käsitle.)