Datastrukturer og Algoritmer



Like dokumenter
INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Liste som abstrakt konsept/datatype

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

IN1010 Objektorientert programmering Våren 2019

Pensum: fra boken (H-03)+ forelesninger

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Pensum: fra boken (H-03)+ forelesninger

Velkommen til. INF våren 2017

AlgDat 12. Forelesning 2. Gunnar Misund

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

INF101 (kun et utvalg av kommentarene er med i denne rapporten)

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Algoritmeanalyse. (og litt om datastrukturer)

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

AlgDat 10. Forelesning 2. Gunnar Misund

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

TDT4105 Informasjonsteknologi, grunnkurs

Stack. En enkel, lineær datastruktur

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Definisjon av binært søketre

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Operativsystemer og grensesnitt

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

INF109 (kun et utvalg av kommentarene er med i denne rapporten)

INF Algoritmer og datastrukturer

Ny 0 0,0% Distribuert 64 66,7% Noen svar 1 1,0% Gjennomført 31 32,3% Frafalt 0 0,0% I alt ,0%

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Velkommen til MAT1030!

MAT1030 Diskret Matematikk

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

INF1020 Algoritmer og datastrukturer

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Binær heap. En heap er et komplett binært tre:

Kap 9 Tre Sist oppdatert 15.03

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Algoritmer - definisjon

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

INF Algoritmer og datastrukturer

Datastrukturer for rask søking

DRI 2001 Systemutviklingsarbeidet et overblikk Forelesning

DRI 2001 Systemutviklingsarbeidet et overblikk Forelesning

VELKOMMEN TIL MAT-INF1100(L) Knut Mørken Rom 1033, Niels Henrik Abels hus

TDT4127 Programmering og Numerikk

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF Algoritmer og datastrukturer

Det første grafteoretiske problem: Broene i Königsberg

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

DRI2001 Offentlige nettsteder. Litt om systemutvikling Torsdag 24 aug Arild Jansen, AFIN, UiO

Uke 7. Magnus Li INF /

... HASHING. Hashing. Hashtabeller. hash(x)

Generelt om operativsystemer

INF2220: Forelesning 1

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

Et eksempel: Åtterspillet

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Velkommen til. INF våren 2016

Definisjon: Et sortert tre

VELKOMMEN TIL MAT-INF1100

INF112(kun et utvalg av kommentarene er med i denne rapporten)

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar I dag skal vi undersøke en rekke velkjente databeholdere i Java:

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

Obligatorisk oppgave 1 INF1020 h2005

INF Algoritmer og datastrukturer

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Obligatorisk oppgave 4: Lege/Resept

Oppgave 1. Sekvenser (20%)

AAR 6024 VITENSKAPLIGE METODER

INF Algoritmer og datastrukturer

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

INF1000 HashMap. Marit Nybakken 2. november 2003

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

En snarvei til INF2100

INF2220: Forelesning 1

TMA4100 Matematikk 1. Høsten 2016

Rekursiv programmering

SIF8010 ALGORITMER OG DATASTRUKTURER

MUSIKALSK TRIKKETUR APRIL

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Grunnmal A uke 44 (partall) 10.trinn

TMA4100 Matema,kk 1. Høsten 2014

Øvingsforelesning i Python (TDT4110)

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

Om Kurset og Analyse av Algoritmer

Systemutvikling. Universitetet i Oslo, Institutt for informatikk Vår 2017

Hashing: Håndtering av kollisjoner

INF Algoritmer og datastrukturer

INF-MAT5370. Grafer og datastrukturer

Velkommen til INF115

Transkript:

TOD 063 Datastrukturer og Algoritmer Forside fra lærebokens Nord Amerikanske utgave Tar for seg praktisk problemstilling: Hvordan håndtere containere som blir lastet fra containerskip i en travel havn på best mulig vis Setter krav til: Effektiv lagringsstruktur Effektive algoritmer for å håndtere Kombinasjonen av de to som er noen av de problemstillingene vi skal se på i dette kurset

Timeplanen TOD 063 08:15 09:55 10:05 11:45 12:15 13:55 Mandag Tirsdag Onsdag Torsdag Fredag Felles foreles A 715au Felles foreles A 715au Data Klasse/Lab A622/Lab INF Klasse/Lab A627/Lab Data Klasse/Lab A622/Lab INF Klasse/Lab A627/Lab Lærere: Sven Olai Høyland Svein Ivar Lillehaug Harald Soleim + labassistenter

Faget på its Learning 1, 2 eller 3 sider.? Vi forsøker med en felles fagside for de to klassene (besluttet etter enighet blant studentene)

Først litt generelt om faget TOD 063 Fag nr. 2 i programmeringsutdanningen Utvikling av mindre programsystem Lage og analysere dt datastrukturer t og algoritmer for generelle problem Lære å implementere ulike datastrukturer (i Java) Lære å analysere effektivitet for algoritmer

Verktøy for programutviklere Maskinutstyr, nett Systemprogram (operativsystem, kompilatorer, editor/ide ) Krever kunnskap om (setter krav til dere ), må kjenne til / kunne beherske: Datastrukturer/algoritmer for generelle problem Metoder/teknikker for programutvikling (modularisering, OOP, topp ned, stegvis forfining, ADT, ) Programtesting/feilfinning

Presentasjon av høgnivå datastrukturer i boka Grensesnitt mot brukere (public metoder, interface ) Eksempel på bruk Implementering i Java (på en eller flere måter) Analyse av effektivitet (tidsbruk, plasskrav) Ev. sammenligning med tilsvarende ferdige klasser i Java API

Gruppering av stoffet ti boken det som kurset skal dekke Intro, analyse (kap. 1 og 2) Grunnleggende elementogteknikker: teknikker: Mengder, tabell, lenket struktur, rekursjon, søk/sorter (kap. 3, 4, 7, 8) Lineære høgnivå strukturer: Stabel, kø, lister (kap. 3, 5, 6,11) Ikkje lineære høgnivåstrukturar: Tre, haug, hash tabell, graf (kap. 9, 10, 11, 12, 13, 14) Gir grovt sett pensum: Det meste frem til og med kap. 14 Læreboken er helt fersk, så endelig pensum bestemmes underveis.

Bokas kapittel 1: Intro Identifisere forskjellige aspekt rundt programvare og kvalitet Motivere for bruk/valg av datastrukturer basert på kvalitative vurderinger Introduksjon av begrepet datastruktur og introduksjon av flere enkle datastrukturer

Utvikling av programvare (software development) Software Engineering i (Programvareutvikling) er studiet av de teknikker og teorier som støtter utviklingen av programvare av høy kvalitet Har som fokus å kontrollere utviklingsprosessen for til enhver til å oppnå gode resultat Vi skal etterstrebe å: tilfredsstille våre klienter de personer eller det firma/ organisasjon som har bestilt produktet møtebehovene til brukerne folket som skal bruke produktet

Mål med programvareutvikling Løse de rette problemene krever ofte litt å finne ut av hva disse er god kommunikasjon mot brukerne er et must husk: som oftest vanskeligere enn hva en først tror Levere løsninger i tide og i samsvar med budsjett alltid noen trade offs å ta stilling til Levere høy kvalitets løsninger må her også ta hensyn til forskjellige stakeholders og at alle disse skal komme best mulig ut av det hele (de med interesse i produktet: brukere, oppdragsgiver, investorer, osv )

Karakteristikker for god kvalitet i SW I bold: fokus TOD063 Korrekthet Pålitelighet Robusthet Brukervennlighet Lett å vedlikeholde Gjenbrukbarhet Plattformeruavh. Effektivitet Husk1: Pålitelig programvare feiler sjelden, og når den feiler minimaliseres følgene av feilen/avbruddet/programkræsjet Husk2: Kvalitet har forskjellig betydning for forskjellige folk

Et praktisk eksempel Problemstilling: Containere som losses i en havn Kunne kanskje laste disse direkte over på ventende trailere og tog? effektivt for de som jobber på kaien (får ting unna) menikkespesielt effektivt for befraktningsselskapene og jernbanen som kanskje ikke alltid er klar for å være der (ikke i korrespondanse med deres optimale logistikk)

eksempel forts. Hva vet vi om hver enkelt container? samme størrelse og form hver enkelt har sin unike ID ID gir en del informasjon, blant annet om hvor containeren skal havnearbeiderne har ikke behov for å vite hva som er i hver enkelt klcontainer

eksempel forts.. Containerne kan kanskje lastes rett av og settes på kaia? Effektivt med tanke på lossing av båt Ikke effektivt med tanke på å finne igjen containerne for å få dem på rette trailere/tog når disse er klare for å hente dem Krever i verste fll fall et lineært søk over hl hele ki kaiområdet når en container søkes for avhenting

eksempel forts Hva om vi maler et stort tabellsystem på kaien med nummerering og det hele slik at hver lagret container kan indekseres på dens ID? ID er unik for alle lagrede containere kaitabellen ville bli svært STOOOR (sannsynligvis ikke plass for den) kaitabellen ville være stort sett tom en betydelig sløsing med kaiplass!

eksempel forts. Hva om vi mekker om løsningen med ki kaitabell bllslik at denne kan ekspandere og trekke seg sammen for å unngå tomme plasser? vil alltid ha rekkefølge på IDer, og ingen tomme plasser enkelt å finne container etter ID MEN, vil tvinge containere til å flyttes flere ganger frem og tilbake ettersom nye containere kommer til og andre fjernes altså en hel masse overhead i arbeid!

eksempel forts.. På tide å tenke litt på hva vi vet om hver container ID nummeret gir oss også destinasjonen for hver container Hva om vi lager en kaitabell hvor hver celle i tabellen representerer en ny tabell med plass for containere?

eksempel forts Med vår nye løsning kan vi lagre containerne for hver destinasjon på en rekke forskjellige måter: lagre i den rekkefølge de lastes av med den første losset som den første som skal fraktes videre (kø) lagre i den rekkefølge de lestes med den siste it losset som den første som skal fraktes videre (stabel/stack) lagre på ID for hver destinasjon (ordnet liste) Eksempelet gir en liten pekepinn på hvordan forskjellige datastrukturer har sine fordeler/bakdeler for forskjellige problemstillinger

Algoritmer og effektivitetsanalyse Generelt: Finne tidsforbruk og krav til ekstra lagerplass l ved utføring av en algoritme Ofte: Ser bare på tidsforbruk df (nå: tid viktigere enn billig lagerplass) Ved analyse: Prøver å regne ut antall viktige/ dominerende operasjoner når en algoritme blir utført mest relevant ved store datamengder Ved testkjøring: Generer store mengder kunstige data og tar tiden ved kjøring av to eller flere alternative algoritmer for et problem på en bestemt PC.

Algoritmer og effektivitetsanalyse, forts. Ved analyse av kjøring av en metode på n data prøver en å finne en formel for tidsforbruk der konstanter og funksjoner av n inngår Eksempel: tid = k 1 + k 2 *n tid = k 1 + k 2 * n + k 3 * n 2 tid = k 1 + k 2 *log 2 n Det viktigste resultatet er størrelsesordenen på det største leddet når n blir svært stor. Eks.: O(1), O(n ), O(n 2 ), O(log 2 n )

Neste gang Mandag 11. januar Kap. 2. Effektivitetsnalyse av algoritmer (en intro) Se litt på første obligatoriske øvingsoppgave