AlgDat 12. Forelesning 2. Gunnar Misund



Like dokumenter
AlgDat 10. Forelesning 2. Gunnar Misund

Algoritmeanalyse. (og litt om datastrukturer)

Liste som abstrakt konsept/datatype

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

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

Rekursiv programmering

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

Gruppe 43. Hoved-Prosjekt Forprosjekt

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

Kap3: Klassemodellering

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Rekursjon. Binærsøk. Hanois tårn.

Innhold. Innledning 1

Datastrukturer for rask søking

Definisjon av binært søketre

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

TDT4105 Informasjonsteknologi, grunnkurs

Definisjon: Et sortert tre

Rekursiv programmering

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

INF Algoritmer og datastrukturer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

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

TDT4105 Informasjonsteknologi, grunnkurs

Vi skal se på grafalgoritmer for:

INF Algoritmer og datastrukturer

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

Læringsmål for forelesningen

Inf 1020 Algoritmer og datastrukturer

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

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

MAT1030 Diskret matematikk

IN1010 Objektorientert programmering Våren 2019

INF2220: Forelesning 3

INF1010 notat: Binærsøking og quicksort

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Datastrukturer og Algoritmer

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Velkommen til. INF våren 2017

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

INF Algoritmer og datastrukturer

Generelt om operativsystemer

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

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

Algoritmer og Datastrukturer IAI 21899

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.

UNIVERSITETET I OSLO

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

Algoritmer - definisjon

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Forelesning inf Java 1

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

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

Læringsmål for forelesningen

Rekursjon. Hanois tårn. Milepeler for å løse problemet

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

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

Oppsummering. I. HVA VAR DET? I.1 ADTer og Programutvikling I.2 Datastrukturer I.3 Algoritmer II. PENSUM III.EKSAMEN IV. ØNSKER

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Algoritmer og Datastrukturer

Oppgave 1: Multiple choice (20 %)

Innhold Innledning 1. 5 Løkke som kontrollstruktur Et program med løkke som kontrollstruktur 132. vii

Forelesning inf Java 1

Stack. En enkel, lineær datastruktur

Hvorfor objektorientert programmering?

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Beregninger i ingeniørutdanningen

Forelesning inf Java 1

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Introduksjon til programmering og programmeringsspråk

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

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Algoritmer og Datastrukturer

Transkript:

AlgDat 12 Forelesning 2

Forrige forelesning Følg med på hiof.no/algdat, ikke minst beskjedsida! Algdat: Fundamentalt, klassisk, morsomt,...krevende :) Pensum: Forelesningene, oppgavene (pluss deler av boka) Tårnet i Hanoi Illustrerer to måter å lage algoritmer på: Iterativt Rekursivt Også eksempel på eksponensiell vekst, noe som gjør at det ikke er mulig å løse oppgaven med mange ringer Effektiv søking i mengder er en absolutt forutsetning for de fleste applikasjoner Løses ved varianter av binærsøk, som igjen er avhengig av effektiv sortering Ineffektiv studentsortering ser ut til å medføre N 2 sammenlikninger (N: antall elementer i mengden)

Denne forelesningen Litt mer Google Maps Litt mer sortering Algoritmer og datastrukturer Java repetisjon IDE eller teksteditor + kommandolinje? Java Collections and Generics

Datastrukturer Definisjon 1: En datastruktur er den måten en samling data er organisert på. Definisjon 2: En datastruktur består av en samling elementer, ofte kalt noder, med innbyrdes relasjoner, ofte kalt referanser. Den viktigste oppgaven til en datastruktur er å knytte beslektede elementer sammen på en effektiv og hensiktsmessig måte. Tre hovedtyper: 1. Lineære (en-til-en) 2. Hierarkiske (en-til-flere) 3. Nettverk (flere-til-flere) Ofte en nær sammenheng mellom datastrukturene og algoritmene

Datastrukturer i hverdagen Forslag fra studentene:...

Algoritmer Definisjon: En algoritme er en beskrivelse av hvordan man løser et veldefinert problem med en presist formulert sekvens av et endelig antall enkle, utvetydige og tidsbegrensede steg. Som en god fortelling har en algoritme gjerne en innledende del (hode), en gjennomføringsdel (kropp), ofte med en eller flere løkker og en avslutning (hale)

Algoritmer i hverdagen Forslag fra studentene:...

Programvareutvikling En mengde mer eller mindre veldefinerte metoder (software engineering): Fossefall Iterative metoder Smidig utvikling (Agile Development) Extreme programming SCRUM Felles for alle: Tre hovedkomponenter: 1. Analyse 2. Design 3. Utvikling (programmering)

Analyse Forstå problemet/oppgaven Finne og vurdere ulike løsningsstrategier Finne og vurdere allerede eksisterende løsninger...selvfølgelig i tett kontakt med oppdragsgiver/prosjekteier

Design Skisse av komponenter og data/meldingsflyt (arkitektur) Valg av plattform(er) Funksjonalitet: Veldefinert beskrivelse av input/output Bruk av formelle metoder for beskrivelse, typisk UML

Implementasjon Valg av språk Koding Testing

Hvorfor Java? Plattformuavhengig: Kompilert bytekode kan f.eks. kjøres på Linux, Mac m. fl. uten problemer (hvis man passer på å ikke bruke plattformavhengige mekanismer, f.eks. kall på operativsystem-funksjoner) OO Enkelt Oversiktelig? Mye ferdig: Datastrukturer med algoritmer Filhåndtering, nettverksoperasjoner Grensesnitt-komponenter

OO i et nøtteskall En mer naturlig / intuitiv / virkelighetsnær måte å programmere på (?) Oppmuntrer til modularisering av kode: Oversiktelig, enkelt å bruke: Applikasjoner kan bygges ved å sette sammen ferdige komponenter Arv: Eksisterende klasser kan utvides/spesialiseres for nye anvendelser Interface: Nye klasser kan implementeres som har samme oppførsel, men som utfører oppgavene på andre måter Dermed kan man bytte ut komponenter i eksisterende applikasjoner, uten å endre selve koden Men: Kan paradoksalt nok ble uoversiktelig: Store arvehierarkier kan gjøre det vanskelig å finne ut hva som faktisk skjer, og hvor

Java programmering Java dokumentasjon API Tutorial Kode eksempler Google: Kodesnutter Hjelpepakker Open source prosjekter

Abstrakte datatyper (ADT) Vi kan si at en datatype er en gruppe verdier og operasjonene som er definert for disse verdiene. Skal vi kunne gjøre noe med heltall i en datamaskin, må vi ha en datatype som representerer heltall og operasjoner som kan utføres på datatypen. Tilsvarende: Skal vi kunne bruke samlingen Set, må vi lage en datatype som representerer samlingen. Dette kalles en abstrakt datatype. En abstrakt datatype er en datatype der verdiene og operasjonene i utgangspunktet ikke er definert i programmeringsspråket. Abstrakt fordi detaljer rundt implementasjon bør være skjult for brukeren. I Java kan en abstrakt datatype defineres i et grensesnitt (interface). Her beskriver vi hvilke operasjoner som skal kunne utføres, men ikke hvordan operasjonene skal utføres.

Neste forelesning Mer java Lineære strukturer Tabeller Lenkede lister Java Collections Java Generics