Lineaariset perustietorakenteet
|
|
- Esa-Pekka Kivelä
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Tietorakenteet ja algoritmit Lineaariset perustietorakenteet Ari Korhonen Tietorakenteet ja algoritmit Y 1
2 2. TIETORAKENTEIDEN TOTEUTUS- PERIAATTEITA Peruskäsitteitä pieni kertaus ohjelmoinnin peruskäsitteistä taulukko linkitetty lista esimerkkejä (polynomin toteutus) abstraktit tietotyypit Tietorakenteet ja algoritmit Y 2
3 2.1 Peruskäsitteitä / Muuttujat Muuttujiin talletetaan dataa Muuttujiin liittyy tunnus, osoite ja tyyppi Muuttuja voi olla yksinkertainen tai rakenteinen Muuttujalla on jokin rooli ohjelman suorituksessa int count; /* count: askeltaja */ double sum; /* sum: kokooja */ Sortable table[1000]; /* table: järjestelijä */ Vakiot ovat arvoja, joita ei voi muuttaa final int SIZE = 100; (Java) #define SIZE 100 (C) SIZE = 100 (Python) Tietorakenteet ja algoritmit Y 3
4 2.1 Peruskäsitteitä / Muuttujat Alkeistyyppejä vai tietorakenteita? esim. Double-precision floating-point format (Wikipedia) esim. integer Pythonissa 1 struct _intblock { 2 struct _intblock *next; 3 PyIntObject objects[n_intobjects]; 4 }; 5 typedef struct _intblock PyIntBlock; Tietorakenteet ja algoritmit Y 4
5 2.1 Peruskäsitteitä / Muuttujat Datan lisäksi muuttuja voi sisältää myös osoitteen toiseen muuttujaan: double sum = 0; /* sum: kokooja */ double *p; /* p: askeltaja */ p = &table[0]; /* table: järjestelijä */ for (int i = 0; i < 1000; i++) { /* i: askeltaja */ sum += *p; p=p+1; } Sama kuin double sum = 0; /* sum: kokooja */ for (int i = 0; i < 1000; i++) /* i: askeltaja */ sum += table[i]; /* table: järjestelijä */ Tässä esimerkissä osoitinten käyttö tarpeetonta, mutta C-kielessä esim. merkkijonoja käsitellään usein osoittimien avulla Tietorakenteet ja algoritmit Y 5
6 2.1 Peruskäsitteitä / Muuttujat Osoitinmuuttujien suurin merkitys on mahdollisuus luoda ja käsitellä dynaamisia tietorakenteita, esim. linkitettyjä listoja tai puita. Rakenteen solmut ovat muuttujia, joihin viitataan osoitinmuuttujien avulla. Solmuja voidaan luoda tarpeen mukaan ja niiden keskinäistä järjestystä voidaan vaihtaa. C-kielessä osoitinten käsittely on eksplisiittistä. Javassa ja Pythonissa rakenteet toteutetaan luokkien ja olioiden avulla. Luokka-tyyppinen muuttuja on itse asiassa osoitin muistissa olevaan olioon vrt. SortableKey x; vs. new SortableKey();! Tärkeä erikoistapaus on tyhjä osoitin NULL Tietorakenteet ja algoritmit Y 6
7 2.1 Peruskäsitteitä / Tyypit Tyypit jaetaan alkeistyyppeihin ja rakenteisiin tyyppeihin Alkeistyyppejä ovat kokonaisluvut (int), reaaliluvut (double), merkkitieto (char) ja looginen tieto (boolean) Rakenteista tyyppiä olevat alkiot koostuvat alkeistyypeistä, esimerkiksi taulukot, tietueet, oliot Rakenteisten tyyppien alkiot voivat olla myös muita rakenteisia tyyppejä. Rakenteet voivat olla mielivaltaisen monimutkaisia ja monitasoisia. Taulukot ja tietueet ovat luonteeltaan staattisia tietorakenteita. Niiden koko on sidottu määrittelyyn On olemassa myös dynaamisia taulukoita Dynaamiset tietorakenteet luodaan osoitinmuuttujien avulla (C) tai oliorakenteina (Java, Python) Tietorakenteet ja algoritmit Y 7
8 2.1 Peruskäsitteitä / Ohjelman suoritus Ohjelman suorittamat toiminnot määritellään: Muuttujalle voidaan sijoittaa uusi arvo. Lausekkeissa lasketaan jokin arvo Lausekkeella voi olla myös sivuvaikutuksia muuttujien arvoihin Kontrollilauseet ohjaavat suoritusjärjestystä Ehtorakenteet (if - else, switch) Toistorakenteet (for, while-do, do-while) Isommat kokonaisuudet lasketaan usein funktioiden, proseduurien tai metodien avulla. Laskentaa ohjataan parametreilla Tietorakenteet ja algoritmit Y 8
9 2.2 Yleistä tietorakenteista Tietorakenne voidaan luokitella kahdella tasolla Talletusrakenne on rakenne, joka sisältää joukon dataalkioita jollain tavalla talletettuna (esim. peräkkäin) ottamatta kantaa alkioiden sisältöön Esim. taulukko, linkitetty lista, binääripuu Abstrakti tietotyyppi (ADT) määrittelee tietotyypin, joilla on jokin semanttinen merkitys (tarvittavat operaatiot) Esim. hakemisto, prioriteettijono Abstraktit tietotyypit (määritellyt operaatiot) toteutetaan talletusrakenteiden avulla Esim. haetaan jokin alkio, jolla on tunniste (avain) tai lisätään tiettyä avainta vastaava alkio rakenteeseen Tietorakenteet ja algoritmit Y 9
10 2.2 Yleistä Tietorakenne on lineaarinen, jos kaikki sen alkiot on ryhmitetty peräkkäin. taulukko, linkitetty lista, pino, jono Tällaista rakennetta voidaan käyttää esim. yksinkertaisena hakurakenteena, tilapäisenä tallennusrakenteena Tietorakenteet ja algoritmit Y 10
11 2.2 Yleistä Tietorakenne on staattinen, jos sille varattu muistitila on vakiokokoinen. Tietorakenne on dynaaminen, jos tietorakenteen koko tai muoto voi vaihdella. Mikä seuraavista on staattinen, mikä dynaaminen tietorakenne? Taulukko Tietue Dynaaminen taulukko Linkitetty lista Verkko Binääripuu Muistinvaraus kiinteä tai dynaaminen Tietorakenteet ja algoritmit Y 11
12 2.2 Yleistä Monet ohjelmointikielet tarjoavat valmiina joukon erilaisia tietorakenteita ja abstrakteja tietotyyppejä joko itse kielen rakenteina tai kirjastojen avulla toteutettuna C: Taulukko, dynaaminen taulukko Java: ArrayList, Map, HashMap, Python: Dictionary, List, Tuple, Monia asioita ei tarvitse toteuttaa itse, vaan voi käyttää valmiita kirjastoissa olevia toimintoja. On tärkeää ymmärtää, mitä tekee, koska erilaisia tietorakenteilla on erilaisia ominaisuuksia, jotka vaikuttavat suurestikin tehokkuuteen Tietorakenteet ja algoritmit Y 12
13 2.2 Yleistä Alkion saavutettavuus talletusrakenteissa: Mitä eroa? Taulukko Tietue Linkitetty lista Binääripuu Verkko Alkion paikka voidaan laskea vakioajassa tai sitten ei Tietorakenteet ja algoritmit Y 13
14 2.2 Yleistä Abstraktiotaso Mitä eroa? Binääripuu Jäsennyspuu 1 * A B C D G Binäärinen hakupuu Taulukko Hajautustaulukko Talletusrakenne vai semanttinen rakenne: Rakenne voi olla puhdas talletusrakenne tai abstrakti tietotyyppi, jolla on jokin semantiikka Tietorakenteet ja algoritmit Y 14
15 2.3 Taulukko Kuuluu yleisimpien ohjelmointikielten perusrakenteisiin Alkiot indeksoidaan ensimmäisestä viimeiseen. Mihin tahansa alkioon voidaan heti viitata. Taulukon alkioiden väliin ei voi lisätä uutta alkiota eikä sieltä voi poistaa alkiota. Rakenne on erittäin jäykkä, jos tällaisia toimintoja (päivityksiä) tarvitaan. Joissakin ohjelmointikielissä on taulukon tapaisia rakenteita, joissa näennäisesti voidaan tehdä asioita joustavasti, mutta tehokkuuden hinnalla (esim. Javan ArrayList)! Tietorakenteet ja algoritmit Y 15
16 Taulukko Taulukon määrittely C-kielessä: < type > < name >[<number of elements>] esim. int numbers[10]; numbers[5] = 1;! indeksointi alkaa nollasta (0 - N-1) Moniulotteiset taulukot Dynaaminen taulukko Tietorakenteet ja algoritmit Y 16
17 2.4 Linkitetyn listan (linked list) toteutus Lista toteutetaan tyypillisesti osoitinmuuttujien ja dynaamisen muistinvarauksen avulla. Voidaan toteuttaa myös pelkän taulukon avulla Tyypillinen määrittely C-kielessä: struct node { int data; struct node * next; }; typedef struct node * ListNode; ListNode p, q, r; Esimerkkilista: p K2.1 q Tietorakenteet ja algoritmit Y 17 r
18 Eräs määrittelytapa Java-kielessä: class ListNode { int data; ListNode next; ListNode(int data) { this.data = data; this.next = null; } } ListNode p, q, r; Esim. p q r Tietorakenteet ja algoritmit Y 18 K2.1
19 Alkion lisääminen on helppoa, kun käsillä on osoitin siihen alkioon, jonka jälkeen uusi alkio sijoitetaan p (C) r = malloc(sizeof(node)); r->data = 99; r->next = q->next; q->next = r; (Java) r = new ListNode(99); r.next = q.next; q.next = r; q r 99 p q r Tietorakenteet ja algoritmit Y 19
20 Alkion poistaminen käy helposti, kun on käsillä osoitin poistettavaa alkiota edeltävään alkioon: (C) (Java) r = q->next; q->next = r->next; free(r); r = q.next; q.next = r.next; p K2.2 q r Miten poistaa ensimmäinen alkio? Tietorakenteet ja algoritmit Y 20
21 Header-alkion ansiosta myös ensimmäinen alkio voidaan poistaa samalla koodinpätkällä kuin muutkin. p head K2.4 Samasta syystä (erikoistapausten välttäminen) toisinaan määritellään listan loppuun ylimääräinen alkio z, josta on viittaus itseensä (Sedgewick: Algorithms) p head z Listan loppumisen tarkastaminen: K2.5 if (q == q->next)...; TAI if (q == z) Tietorakenteet ja algoritmit Y 21
22 Esimerkkejä listan käsittelyfunktioiden toteuttamisesta (C): void print_list(listnode head) { ListNode list; /* list: kulkija */ } list = head->next; if (list == z) printf("list is empty\n"); else { while (list!= z) { printf("%d, list->data); list = list->next; } printf("\n"); } Tietorakenteet ja algoritmit Y 22
23 Lisää listan alkuun: void insert(listnode head, int key) { ListNode temp; /* temp: tilapäissäilö */ } temp = get_node(); // malloc temp->data = key; /* temp->data: kiintoarvo */ temp->next = head->next; /* temp->next: kiintoarvo */ head->next = temp; /* head->next: tuoreimman säilyttäjä */ Tietorakenteet ja algoritmit Y 23
24 Esimerkkejä listan käsittelyfunktioiden toteuttamisesta (Java): public void print_list(listnode head){ ListNode list; /* list: kulkija */ } list = head.next; if (list == z) System.out.println("List is empty"); else { while (list!= z) { System.out.print(list.data+" "); list = list.next; } System.out.println(); } Tietorakenteet ja algoritmit Y 24
25 class LinkedList { ListNode header; /* kiintoarvo */ ListNode z = new ListNode(null); /* kiintoarvo */ LinkedList () { header = new ListNode(null); header.next = z; /* tuoreimman säilyttäjä */ } } addfirst(int element) { ListNode temp; /* tilapäissäilö */ temp = new ListNode(element); temp.next = header.next; /* kiintoarvo */ header.next = temp; } Tietorakenteet ja algoritmit Y 25
26 Etsi alkio: ListNode search(listnode head, int key) { ListNode list; /* node: kulkija */ list = head->next; z->data = key; /* z->data: kiintoarvo, vartiosotilas */ while (list->data!= key) list = list->next; } return (list); Tietorakenteet ja algoritmit Y 26
27 boolean delete(listnode head, int key){ ListNode current, previous; z->data = key; /* z->data: kiintoarvo, vartiosotilas */ current = head->next; /* current: kulkija */ previous = head; /* previous: seuraaja, current->previous */ } while (current->data!= key) { previous = current; current = current->next; } if (current!= z) { previous->next = current->next; free (current); return (TRUE); } else return (FALSE); Tietorakenteet ja algoritmit Y 27
28 Lista voidaan toteuttaa myös 2 taulukon avulla (useampi lista voi käyttää samoja taulukoita) data[0..n] arvot next[0..n] osoittimet i data next 0 head 4 1 z 1 2 T 6 3 I 5 4 L 3 5 S 2 6 A 1 p h e a d L I S T A z Tietorakenteet ja algoritmit Y 28 K2.7
29 Kaksisuuntainen linkitetty lista on nopeampi käsitellä, mutta vaatii (vähän) enemmän muistitilaa. p E E S T A A S K2.8 struct node { char data; struct node *next, *previous; }; typedef struct node * DlistNode; Tietorakenteet ja algoritmit Y 29
30 Eräs määrittelytapa Python-kielessä: class ListNode: def init (self, value, previous=none, next=none): self.val = value self.next = next self.previous = previous Tietorakenteet ja algoritmit Y 30
31 Linkitetty lista (ilman header-alkiota) Kotitehtävä: toteuta vastaava luomalla erilliset head- ja z-oliot class LinkedList: def init (self): self.first = None self.last = None self.size = 0 def addfirst(self, item): self.size += 1 old = self.first self.first = ListNode(item, None, self.first) if old: old.previous = self.first if not self.last: self.last = self.first def addlast(self, item): Tietorakenteet ja algoritmit Y 31
32 Linkitetyn listan ominaisuudet Taulukkoa paljon joustavampi rakenne monessa tilanteessa. Lista koostuu yksittäisistä alkioista, joihin kuhunkin on talletettu dataa ja osoitin (referenssi) seuraavaan alkioon. Listan kokoa ei ole ennalta rajoitettu, vaan listaan voidaan lisätä ja siitä voidaan poistaa alkioita ajonaikaisesti. => Listan kokoa rajoittaa vain käytettävissä oleva muisti. Alkioita voi lisätä minne tahansa. Alkioita voi poistaa mistä tahansa. Alkioiden järjestystä voi vaihtaa. Listan alkiot voivat olla samaa tyyppiä tai lista voi olla geneerinen Tietorakenteet ja algoritmit Y 32
33 LINKITETYN LISTAN TÄRKEIN RAJOITUS: Alkioita voi käydä läpi vain yksitellen, ts. alkioihin ei voi viitata suoraan (vrt. taulukko) Linkitetyn listan tärkeimmät operaatiot ovat: TULOSTUS HAKU LISÄYS POISTO PÄIVITYS TYHJÄN LISTAN LUOMINEN N:NNEN ALKION PALAUTTAMINEN ONKO LISTA TYHJÄ? Tietorakenteet ja algoritmit Y 33
34 Eri operaatioitten vaatima aika: TULOSTUS N HAKU N/2 (epäonnistunut: N) LISÄYS 1 POISTO N/2 Lista voidaan pitää järjestyksessä, jolloin (epäonnistunut) haku on nopeampi Tiedetään, ettei enää kannata etsiä, kun oikea kohta on jo ohitettu Lisäys on vastaavasti hitaampi (ei voidakaan lisätä aina listan alkuun) Listasta voidaan muodostaa rengas p Tietorakenteet ja algoritmit Y 34 K2.6
35 2.5 Tapausesimerkki POLYNOMI a i x i i=0...n Jos polynomi on tiheä l. suurin osa kertoimista poikkeaa nollasta => Esitetään kertoimet taulukossa #define MAX 1000 // magic number struct polynomi { int kerroin[max+1]; int asteluku; }; typedef struct polynomi Polynomi; Tietorakenteet ja algoritmit Y 35
36 Jos polynomi on harva (vähän termejä) => Esitetään kertoimet järjestettynä listana struct polynomi { int kerroin, eksponentti; struct polynomi * next; }; typedef struct polynomi * Polynomi; Ei rajaa polynomin asteluvulle! Tietorakenteet ja algoritmit Y 36
37 Toteutetaan polynomeille tulo-operaatio: Polynomi A_kertaa_B(Polynomi a,b) /* Toteutus riippuu valitusta tietorakenteesta */ } Tai Javalla rajapinta... public interface Polynomi { public Polynomi multiply(polynomi A); } => käsitellään polynomia abstraktiona!!! Kutsuvan ohjelman ei tarvitse tietää miten kertoimet on talletettu, toteutustapaa voidaan vaihtaa tarpeen mukaan!! Tietorakenteet ja algoritmit Y 37
38 2.6 Abstrakti tietotyyppi (abstract data type, ADT) Kun talletetulle tiedolle annetaan semanttinen merkitys (mitä tieto tarkoittaa) ja määritellään, mitä tiedolle saa tehdä (operaatiot), saadaan abstrakti tietotyyppi. Määritellään tietorakenteeseen kohdistuvat operaatiot Ei oteta kantaa, miten operaatiot toteutetaan Otetaan kantaa, mitä operaatiot tekevät (riittävä tarkkuustaso!) Mahdollistaa toteutuksen muuttamisen joustavasti Sama abstrakti tietotyyppi voidaan toteuttaa usean eri talletusrakenteen avulla Tietorakenteet ja algoritmit Y 38
39 Abstraktit tietotyypit / Esimerkkejä A) Joukko abstraktina tietotyyppinä Määritellään vaikkapa operaatiot: - Leikkaus Set intersection(set A, Set B) - Unioni Set union(set A, Set B) ^ - Komplementti Set compl(set A, Set superset) - Koko (= alkioiden määrä) int size(set A) - Kuuluu joukkoon? boolean in(element E, Set A) Operaatiot toteutetaan aliohjelmina, metodeina, tms. Muualla ohjelmassa voidaan kutsua em. operaatioita tarvitsematta tietää, miten alkiot on talletettu (taulukko, lista, puu,...) Tietorakenteet ja algoritmit Y 39
40 B) Hakurakenne abstraktina tietotyyppinä Määritellään, että hakurakenne on kokoelma tietueita, jotka voidaan yksiselitteisesti tunnistaa niihin talletetun hakuavaimen arvon perusteella Määritellään esimerkiksi operaatiot Element Search(Key K) Element Insert(Key K, Data D) Element Delete(Key K) Element Next(Key K) [Previous] Etsi annettua tietuetta lähinnä seuraava [edellinen] tietue Element[] Range(Key From, Key To) Etsi tietueet, joiden avainarvot ovat avainarvojen [From,To] välissä Tietorakenteet ja algoritmit Y 40
41 C) Prioriteettijono abstraktina tietotyyppinä Määritellään, että rakenne on kokoelma alkioita, joihin jokaiseen liittyy alkion suhdetta muihin alkioihin kuvaava prioriteetti Määritellään esimerkiksi operaatiot Insert(Element E, int P) Lisää alkio ja aseta sen prioriteetiksi P Element DeleteMax() Poista ja palauta alkio, jonka prioriteettiarvo on suurin (tai deletemin - pienin) DecreaseKey(Element E, int delta) pienennä (tai IncreaseKey -suurenna) alkion prioriteettiä deltalla Tietorakenteet ja algoritmit Y 41
42 3. Lisää lineaarisista perustietorakenteista 3.1 Pino (stack) 3.2 Jono (queue) 3.3 Pakka (deque) Tietorakenteet ja algoritmit Y 42
43 3. Lineaariset perustietorakenteet Tietorakenne on lineaarinen, jos kaikki sen alkiot on ryhmitetty peräkkäin. Tällaista rakennetta voidaan käyttää esim. yksinkertaisena hakurakenteena, tilapäisenä tallennusrakenteena. Taulukko, lista Seuraavaksi tarkastellaan eräitä tärkeitä lineaarisia abstrakteja tietotyyppejä Tietorakenteet ja algoritmit Y 43
44 3.1 Pino (stack) Toimii samaan tapaan kuin pöydällä oleva korttipakka Pino on abstrakti tietotyyppi, jolle on määritelty seuraavat operaatiot: Push(x) - lisää pinon päälle alkion x Pop() - palauttaa ja poistaa pinon päällimmäisen alkion Top() - palauttaa pinon päällimmäisen alkion (poistamatta sitä) IsEmpty() - palauttaa tiedon siitä, onko pino tyhjä Tietorakenteet ja algoritmit Y 44
45 Jonokuri LIFO (Last In - First Out) Kaikki pino-operaatiot voidaan toteuttaa vakioajassa (ei riipu pinon koosta) Pino voidaan implementoida taulukon avulla tai linkitettynä listana Toteutus taulukkona: apuna pino-osoitin (stack pointer), joka osoittaa päällimmäiseen alkioon... 7 isempty() (sp == -1) Taulukkototeutuksessa pinolle varattu tila voi loppua sp K Tietorakenteet ja algoritmit Y 45
46 Toteutus listana: top K2.14 push(): liitä uusi alkio listan alkuun pop(): poista ja palauta alkio listan alusta isempty(): tosi, jos lista on tyhjä top == null tai Header == Z (jos käytetään erillisiä head ja z--alkioita) Tietorakenteet ja algoritmit Y 46
47 Pinon sovelluksia Ohjelmointikielessä lausesulkujen tarkastus: kullekin alkusululle löytyy oikeantyyppinen loppusulku Kielessä voi esiintyä useita eri sulkutyyppejä, esim. C- kielessä (,); [,]; {,} Sulkuvirheet (esim. {(}) ) voivat usein sotkea kääntäjän toiminnan pahoin Syötevirran kääntäminen päinvastaiseen järjestykseen Ajonaikainen pino (aliohjelmakutsut): Kutsuvan ohjelman tila (=rekisterit) ja kutsun paikka (=program counter) pinoon Aliohjelmasta palattaessa voidaan palauttaa alkuperäinen tila Tietorakenteet ja algoritmit Y 47
48 Yksinkertainen lausesulkujen tarkastusperiaate Luetaan syötettä merkki kerrallaan Tutkitaan vain sulkumerkkejä Alkusulku asetetaan pinoon (push) Kohdattaessa loppusulku otetaan pinosta (pop) päällimmäinen sulku ü Jos pino on tyhjä (isempty) tai sulku on väärän tyyppinen virhe Algoritmin päättyessä pinon tulee olla tyhjä Tietorakenteet ja algoritmit Y 48
49 Lausekkeen arvon laskeminen Miten evaluoida lausekkeen arvo? Infix-notaatio: 5 * ( ( ) * 4 * ) Miten tallentaa välitulokset? Mikä on toimintajärjestys, kun lauseke luetaan ohjelmalle merkki merkiltä? Tietorakenteet ja algoritmit Y 49
50 Periaate: 1) Muunnetaan lauseke pinon avulla postfix-muotoon: * 6 * 7 + * 2) Evaluoidaan postfix-lauseke pinon avulla Tietorakenteet ja algoritmit Y 50
51 INFIX-POSTFIX-muunnos pinon avulla Luetaan Infix-lauseketta merkki kerrallaan operandit [0-9]* tulostetaan suoraan ( asetetaan pinoon (PUSH) operaattorit *,+ otetaan pinosta (POP) ja tulostetaan operaattoreita, joilla on sama tai suurempi prioriteetti, sen jälkeen asetetaan viimeksi luettu operaattori pinoon. Sulkumerkkiä ( ei kuitenkaan lueta ) otetaan pinosta ja tulostetaan operaattoreita, kunnes löytyy alkusulku, joka myös luetaan, mutta ei tulosteta Kun syöte loppuu, otetaan pinosta ja tulostetaan loput operaattorit Tietorakenteet ja algoritmit Y 51
52 Esim. Muunnetaan lauseke 5*((9+8)*4*6+7) muotoon 598+4*6*7+* Syöte Pino Tuloste 5 5 * * ( *( ( *(( *((+ 8 8 ) *( + * *(* 4 4 * *(* * *(+ * 7 7 ) * + tyhjä * Tietorakenteet ja algoritmit Y 52
53 POSTFIX-lausekkeen arvo voidaan laskea pinon avulla Esim. lauseke 598+4*6*7+* Input Pino * * * 2075 empty Tietorakenteet ja algoritmit Y 53
54 3.2 JONO (queue) Jono on abstrakti tietotyyppi, jolle on määritelty seuraavat operaatiot: Put(x) tai Enqueue(x) - lisää jonon loppuun alkion x Get() tai Dequeue() - palauttaa (ja poistaa) jonon ensimmäisen alkion First() - palauttaa jonon ensimmäisen alkion IsEmpty() - kertoo, onko jono tyhjä Jonokuri FIFO (First In First Out) Jono voidaan toteuttaa eri tavoin (taulukon avulla tai linkitettynä listana). Toteutetaan usein sirkulaarisena taulukkona (indeksit lasketaan modulo N) Tietorakenteet ja algoritmit Y 54
55 Jonon toteutus sirkulaarisena taulukkona l ast fi r st MAX Jono[0.. MAX-1] put get first osoittaa jonon alkuun last osoittaa 1. vapaaseen paikkaan Jonossa yksi tyhjä paikka, jota ei käytetä Tietorakenteet ja algoritmit Y 55
56 Put(x): Jono[last] = x; /* Jono: säiliö */ last = (last+1) % MAX; /* last: askeltaja */ if (last == first) error; //Jono ei saa mennä täyteen! Get(): tmp = Jono[first]; /* tmp: tilapäissäilö */ first = (first+1) % MAX; /* first:askeltaja */ return tmp; First(): return Jono[first]; IsEmpty(): (last == first); Tietorakenteet ja algoritmit Y 56
57 Jonon toteutus listana struct node { datatype data; /* data: kiintoarvo; hyötykuorma */ struct node *next; /* next: kiintoarvo; seuraava alkio */ }; typedef struct node * Queue; fi r st l ast K Tietorakenteet ja algoritmit Y 57
58 struct node *first, *last; /* first, last: kulkijat */ struct node *temp; /* tmp: tilapäissäilö */ Put(x): temp = (Queue)malloc(sizeof(struct node)); temp->data = x; temp->next = NULL; last->next = temp; last = temp; Get(): temp = first; x = first->data; first = first->next; free(temp) return (x); First(): return(first); IsEmpty(): return (first == NULL); Tietorakenteet ja algoritmit Y 58
59 Jonon sovelluksia Esim. Printterijono Puskuri tiedon välivarasto tietoa tulee tietoa lähtee tiedon järjestys säilyy Esim. tulostettava tiedosto menee puskurin kautta Diskreetti simulointi Esim. liikenne, tietoliikenne, palvelut Verkkoalgoritmit (esim. leveyssuuntainen haku eli BFS) Tietorakenteet ja algoritmit Y 59
60 3.3 PAKKA (deque) Alkioita voidaan asettaa rakenteen molempiin päihin, ja myös ottaa pois Vrt. korttipakka kädessä Määrittely jätetään kotitehtäväksi: Määrittele abstrakti tietotyyppi pakka Tietorakenteet ja algoritmit Y 60
61 Ensi kerraksi Tee viikkojen viikkoharjoitukset Tutustu rekursion käsitteeseen Tutki esim. kalvosetin lopusta löytyviä Fibonacci- ja Hanoiesimerkkejä Piirrä itsenäisesti algoritmien rekursiohistoriapuut pienillä N:n arvoilla (esim. 4) Tietorakenteet ja algoritmit Y 61
62 Tietorakenteet ja algoritmit Algoritmit Ari Korhonen Tietorakenteet ja algoritmit Y 62
63 4.1 Algoritmit suhteessa tietorakenteisiin Useimmat algoritmit käsittelevät jotain tietorakennetta, eikä atomista dataa Käsiteltävä data on siten joukko data-alkioita, jotka muodostavat jonkin kokonaisuuden. Algoritmi käsittelee tätä kokonaisuutta eli tietorakennetta. Esimerkiksi: Lajitellaan tieto suuruusjärjestykseen Etsitään jotain yksittäistä tietoa suuresta tietojoukosta Käsitellään rakennetta, jossa tietojoukon yksittäisten alkioiden välillä voi olla yhteyksiä, jotka yksilöivät alkion suhteen muihin alkioihin (verkot) Käsitellään koordinaattiavaruudessa olevaa kokonaisuutta Tietorakenteet ja algoritmit Y 63
64 4.2 Algoritmien vertailu Jos sama asia voidaan toteuttaa eri tavoin, täytyy jotenkin pystyä arvioimaan, mikä toteutus on kulloinkin hyvä Vertailukriteereitä on monia: 1. Algoritmin askelmäärä suhteessa käsiteltävän tiedon määrään ü ü ü Pahin mahdollinen askelmäärä Keskimääräinen askelmäärä Tasattu askelmäärä => ALGORITMIANALYYSI Tietorakenteet ja algoritmit Y 64
65 Algoritmien vertailu / kriteereitä 2. Algoritmin kuluttama todellinen cpu-aika (usein ongelmallinen arvioitava) 3. Algoritmin/tietorakenteen vaatima muistitila suhteessa käsiteltävän tiedon määrään 4. Laskennalliseen ongelmaan liittyvät kriteerit (esim. vakaus (stabiilius) järjestämismenetelmissä) Tietorakenteet ja algoritmit Y 65
66 4.3 Algoritmien toteutus ja esittäminen Ohjelman ylläpidettävyyden kannalta on ehdottomasti järkevää toteuttaa tärkeä algoritmi siten, että sen mahdollinen vaihtaminen tehokkaampaan vaikuttaa mahdollisimman vähän muuhun ohjelmaan Käytetään abstrakteja tietotyyppejä Usein algoritmit esitetään pseudokielellä (á la Pascal) ja jätetään toteutuksen pienimmät yksityiskohdat avoimiksi Algoritmin perusajatusta on helpompi ymmärtää, kun ei tarvitse kiinnittää huomiota ohjelmointikielen syntaksiin Kuvaus on kieliriippumaton Tietorakenteet ja algoritmit Y 66
67 4.4 Iteratiiviset ohjelmat (vrt. algoritmin määritelmä) syöte peräkkäisyys Esim. print_list public void print_list(listnode head){ ListNode list; /* list: kulkija */ } list = head.next; if (list == z) System.out.print("List is empty"); else { while (list!= z) { System.out.print(list.data+" "); list = list.next; } } System.out.println(); haarau- tuminen toisto peräkkäisyys peräkkäisyys peräkkäisyys tulos(te) Luentotehtävä: Vastaako vuokaavion rakenne em. ohjelmaa? Tietorakenteet ja algoritmit Y 67
68 4.5 REKURSIO Rekursiivinen ohjelma Kutsuu itseään Rekursiivinen rakenne Rakenne sisältyy itseensä Rekursiivinen funktio On määritelty itsensä avulla Esim. Fibonacci-luvut: X(i) = X(i-1) + X(i-2), X(0) = X(1) = Tietorakenteet ja algoritmit Y 68
69 Rekursio ei voi jatkua loputtomiin Täytyy löytyä päätösehto jonka toteutuminen lopettaa rekursion Esim. Kertoma: Rekursio: N! = N(N-1)! Päätösehto: 0! = Tietorakenteet ja algoritmit Y 69
70 Rekursion neljä kultaista sääntöä: 1. Perustapaukset (ratkaistavissa ilman rekursiota) 2. Edistyminen (liikutaan perustapausta kohti) 3. Oletus (kaikki rekursiiviset kutsut toimivat) 4. Vältä turhaa työtä (jokainen tapaus ratkaistaan vain kerran) Tietorakenteet ja algoritmit Y 70
71 Esim. Kertoma rekursiivisena: int factorial(int n) /* n: askeltaja */ { if (n==0) return 1; else return factorial(n-1)*n; } Esim. Kertoma ei-rekursiivisena: int factorial(int n) /* n: kiintoarvo */ { int i,fact; fact = 1; /* fact: kokooja */ for (i=2; i<=n; i++) /* i: askeltaja */ fact = fact*i; return fact; } Tietorakenteet ja algoritmit Y 71
72 Esim. Fibonacci-luvut: int fibonacci(int n) { if (n<=1) return 1; else return fibonacci(n-1)+fibonacci(n-2); } F5 F6 F4 {Rikkoo neljättä sääntöä} F4 F3 F3 F2 Parempi toteuttaa eirekursiivisena F3 F2 F2 F1 F2 F1 F1 F0 F2 F1 F1 F0 F1 F0 F1 F0 F1 F Tietorakenteet ja algoritmit Y 72
73 Rekursiohistoriapuu Puurakenne, jossa solmu jokaista rekursiokutsua kohti Solmut aktivoituvat ns. esijärjestyksessä (ks. puiden läpikäynti) Ensimmäistä kutsua vastaa puun juuri Pinokehys aktiivinen, kunnes kaikki alipuut on käyty läpi Pinokehys poistuu, kun rekursio palaa solmusta Esim. Fibonaccin luvut: int fibonacci(int n) { if (n<=1) return 1; else return fibonacci(n-1)+fibonacci(n-2); } Tietorakenteet ja algoritmit Y 73
74 Esim. Hanoin tornit (Edouard Lucas, 1883): Siirrä renkaat toiseen tappiin yksi kerrallaan niin, että isompi rengas ei koskaan ole pienemmän päällä: Mistä Minne Vi a N K2.17? Tietorakenteet ja algoritmit Y 74
75 Esim. Hanoin tornit (Edouard Lucas, 1883): Ratkaisu rekursion avulla: Mistä Minne Vi a N-1 N-1 1 K Tietorakenteet ja algoritmit Y 75
76 void hanoi(int N, int mista, int minne, int via) { if (N==1) printf( Siirrä rengas tapista %d tappiin %d kiitos\n, mista, minne); else { hanoi(n-1, mista, via, minne); hanoi(1, mista, minne, via); // printf hanoi(n-1, via, minne, mista); } } Mistä Minne Vi a Kotitehtävä: Ohjelmoi hanoi haluamallasi ohjelmointikielellä ja testaa, että se toimii! K Tietorakenteet ja algoritmit Y 76
77 Hanoin tornien rekursiohistoriapuu Esim. hanoin(3, 1, 2, 3) void hanoi(int N, int mista, int minne, int via) { if (N==1) printf( Siirrä rengas tapista %d tappiin %d kiitos\n, mista, minne); else { hanoi(n-1, mista, via, minne); hanoi(1, mista, minne, via); // printf hanoi(n-1, via, minne, mista); } } h(3,1,2,3) Mistä Minne Vi a K2.17 h(2,1,3,2) h(1,1,2,3) Tietorakenteet ja algoritmit Y 77
78 Rekursiohistoriapuu Esim. hanoi(3, 1, 2, 3) void hanoi(int N, int mista, int minne, int via) { if (N==1) printf( Siirrä rengas tapista %d tappiin %d kiitos\n, mista, minne); else { hanoi(n-1, mista, via, minne); hanoi(1, mista, minne, via); // printf hanoi(n-1, via, minne, mista); } } h(3,1,2,3) h(2,1,3,2) h(1,1,2,3) h(2,3,2,1) h(1,1,2,3) h(1,1,3,2) h(1,2,3,1) h(1,3,1,2) h(1,3,2,1) h(1,1,2,3) Tietorakenteet ja algoritmit Y 78
Algoritmien suunnittelumenetelmiä
Tietorakenteet ja algoritmit Algoritmien suunnittelumenetelmiä Ari Korhonen 24.9.2015 Tietorakenteet ja algoritmit 1 Algoritmien suunnittelumenetelmiä Lineaariset talletusrakenteet: taulukko, linkitetty
LisätiedotTietorakenteet ja algoritmit. Kertaus. Ari Korhonen
Tietorakenteet ja algoritmit Kertaus Ari Korhonen 1.12.2015 Tietorakenteet ja algoritmit - syksy 2015 1 Presemosta: 12. Kertaus» Mitkä tekijät, miten ja miksi vaiku1avat algoritmien nopeuteen» Rekursiohistoriapuut
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotREKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla
REKURSIO Rekursiivinen ohjelma Kutsuu itseään Rekursiivinen rakenne Rakenne sisältyy itseensä Rekursiivinen funktio On määritelty itsensä avulla Esim. Fibonacci-luvut: X(i) = X(i-1) + X(i-2), X(0) = X(1)
LisätiedotTIETORAKENTEET JA ALGORITMIT
TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
LisätiedotPino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:
Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)
LisätiedotSisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
Lisätiedot18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
LisätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
Lisätiedot811312A Tietorakenteet ja algoritmit II Perustietorakenteet
811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi
Lisätiedot1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...
1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin
LisätiedotTietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
LisätiedotAlgoritmit 2. Luento 2 To Timo Männikkö
Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento
LisätiedotTieto- ja tallennusrakenteet
Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)
LisätiedotAlgoritmit 1. Luento 4 Ke Timo Männikkö
Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,
LisätiedotT-106.250/253 Tietorakenteet ja algoritmit T/Y
SIS LLYS 1. JOHDANTO 2. OHJELMOINNIN PERUSTEIDEN KERTAUS 3. ALGORITMITEORIAN PERUSAJATUKSIA 4. LINEAARISET PERUSTIETORAKENTEET 5. ALGORITMIANALYYSI 6. PUURAKENTEET 22.1.2002 1 1. JOHDANTO 1.1 MŠŠritelmiŠ
LisätiedotAlgoritmit 2. Luento 2 Ke Timo Männikkö
Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento
Lisätiedot9/18/02 1. Tietorakenteet ja algoritmit Y. Syksy Dipoli T
T-106.253 Tietorakenteet ja algoritmit Y Syksy 2002 - Dipoli 9/18/02 1 Korhonen, A., Malmi, L. Tietorakenteet ja algoritmit / Kurssikuvaus 1. Kurssikuvaus 1.1 Esitiedot 1.2 Tavoitteet 1.3 Opetuksen järjestelyt
LisätiedotAlgoritmit 2. Luento 7 Ti Timo Männikkö
Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko
LisätiedotKaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen
Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai
LisätiedotRakenteiset tietotyypit Moniulotteiset taulukot
C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa
LisätiedotMuuttujien roolit Kiintoarvo cin >> r;
Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,
Lisätiedot3. Binääripuu, Java-toteutus
3. Binääripuu, Java-toteutus /*-------------------------------------------------------------/ / Rajapinta SearchTree: binäärisen hakupuun käsittelyrajapinta / / Metodit: / / void insert( Comparable x );
LisätiedotImperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi
Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 7.-8.2.2018 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: etsipienin(t, n) { pnn = t[0]; for (i = 1; i < n; i++) { pnn = min(pnn, t[i]); return pnn; Silmukka suoritetaan
Lisätiedotuseampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero
Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Elegantti toteutus funktiolle insert_to_list_end Alkion lisäys sisällön mukaan järjestettyyn listaan (insert_to_list) Linkatun listan yleisyys alkiotyypin suhteen source-tasolla
LisätiedotAlgoritmit 2. Luento 4 To Timo Männikkö
Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4
LisätiedotKääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
LisätiedotJakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin
LisätiedotAlgoritmit 1. Luento 6 Ke Timo Männikkö
Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty
LisätiedotTietueet. Tietueiden määrittely
Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään
LisätiedotJava-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero
LisätiedotRajapinta (interface)
1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,
LisätiedotJava-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero
LisätiedotLuento 4 Aliohjelmien toteutus
Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotListarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.
LisätiedotAliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLyhyt kertaus osoittimista
, syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin
LisätiedotSisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman
LisätiedotYleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018
LisätiedotAlgoritmit 2. Luento 4 Ke Timo Männikkö
Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4
LisätiedotJakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotTietorakenteet, laskuharjoitus 3, ratkaisuja
Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut
Lisätiedot2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.
Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen
LisätiedotSisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden
LisätiedotAlkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)
Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,
LisätiedotPythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b
Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')
LisätiedotOhjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
LisätiedotAlgoritmit ja tietorakenteet / HL Copyright Hannu Laine
1 Pino ja jono Yleistä Pino Pino ja jono ovat abstrakteja tietotyyppejä, joilla on yleistä käyttöä. Pino ja jono ovat listan erikoistapauksia. Kummassakin tapauksessa erona on se, että tietotyypin operaatiofunktioita
LisätiedotAlgoritmit 1. Luento 12 Ti Timo Männikkö
Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit
LisätiedotHakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina
Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella
LisätiedotMetodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen
Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus
LisätiedotKysymyksiä koko kurssista?
Kysymyksiä koko kurssista? Lisää kysymyksesi osoitteessa slido.com syötä event code: #8777 Voit myös pyytää esimerkkiä jostain tietystä asiasta Vastailen kysymyksiin luennon loppupuolella Tätä luentoa
Lisätiedot2. Perustietorakenteet
2. Perustietorakenteet Tässä osassa käsitellään erilaisia perustietorakenteita, joita algoritmit käyttävät toimintansa perustana. Aluksi käydään läpi tietorakenteen abstrakti määritelmä. Tämän jälkeen
LisätiedotJava kahdessa tunnissa. Jyry Suvilehto
Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,
LisätiedotAbstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005
Abstraktit tietotyypit TIEA341 Funktio ohjelmointi 1 Syksy 2005 Data abstraktio Abstraktio on ohjelmoinnin tärkein väline Data abstraktio abstrahoi dataa Abstrakti tietotyyppi Koostuu kolmesta asiasta:
LisätiedotTAMPEREEN TEKNILLINEN YLIOPISTO
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Symbolit, derivojaesimerkki, kierroksen 1 ratkaisut (mm. SICP 2.32.3.2) Riku Saikkonen 1. 11. 2011 Sisältö 1 Symbolit ja sulkulausekkeet 2 Lisää Schemestä:
LisätiedotLuento 4 Aliohjelmien toteutus
Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLuento 4 Aliohjelmien toteutus
Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotAlgoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n
LisätiedotOlio-ohjelmointi Syntaksikokoelma
C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja
LisätiedotLuento 4 (verkkoluento 4) Aliohjelmien toteutus
Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivointitietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit
LisätiedotJava-kielen perusteita
Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa
LisätiedotInformaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006
TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa
Lisätiedotlähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa
Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()
LisätiedotSe mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.
Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta
LisätiedotOlion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
LisätiedotJakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLuento 4 (verkkoluento 4) Aliohjelmien toteutus
Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivaatiotietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit
LisätiedotOperaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta
C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus
LisätiedotMuita linkattuja rakenteita
1 Muita linkattuja rakenteita Johdanto Aikaisemmin on käsitelty listan, jonon ja pinon toteutus dynaamisesti linkattuna rakenteena. Dynaamisella linkkauksella voidaan toteuttaa mitä moninaisimpia rakenteita.
LisätiedotTehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003
Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja
LisätiedotAlgoritmit 1. Luento 7 Ti Timo Männikkö
Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017
LisätiedotAliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotAlgoritmit 1. Luento 8 Ke Timo Männikkö
Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin
LisätiedotMetodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet
Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin
Lisätiedottietueet eri tyyppisiä tietoja saman muuttujan arvoiksi
tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,
Lisätiedot2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.
Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma
LisätiedotJakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotJAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin
Lisätiedot