Hanne Niels Edith Harald Carsten Jørgen Henrik.

Relaterede dokumenter
Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

O l e \n I b \n. Ole Ib TT_EOF. Ole Ib Overview Tekstfiler, tegn og brikker

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Skriftlig eksamen i Datalogi

Dynamisk programmering

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

BRP Sortering og søgning. Hægtede lister

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

Der er fejl i programmer. Ikke-trivielle programmer er næsten altid fejlbehæftede.

Dynamisk programmering

Rekursion og dynamisk programmering

DANMARKS TEKNISKE UNIVERSITET

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Løsning af møntproblemet

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Algoritmer og invarianter

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Dynamisk programmering

Majoritetsproblemet Problem Præcisering af inddata Præcisering af uddata

Virkefeltsregler i Java

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Tree klassen fra sidste forelæsning

Sortering. Eksempel: De n tal i sorteret orden

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

BRP Kursusintroduktion og Java-oversigt

DATALOGI 0GB. Skriftlig eksamen mandag den 7. juni 2004

Forelæsning Uge 5 Mandag

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Sortering ved fletning (merge-sort)

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Divide-and-Conquer algoritmer

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Kursusarbejde 3 Grundlæggende Programmering

Sortering af information er en fundamental og central opgave.

Danmarks Tekniske Universitet

Programmering og Problemløsning, 2017

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Søgning og Sortering. Philip Bille

Divide-and-Conquer algoritmer

Parallelle algoritmer

Databaseadgang fra Java

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Vejledende løsninger

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

DM502. Peter Schneider-Kamp

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Introduktion. Philip Bille

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Analyse af ombytningspuslespil

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Kursus navn: Indledende programmering Kursus nr

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 10

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet.

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

Analyse af ombytningspuslespil

Forelæsning Uge 4 Torsdag

DRONNINGER (QUEENS) Opgave 1

Eksempel på en database: studenter, kurser, eksamener

Vejledning. Indlæsning af studerende til gruppedannelse i STADS. Indhold. Studie-IT Tlf.:

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Datalogi C + Datastrukturer og Algoritmer

Skriftlig eksamen i Datalogi

Forelæsning Uge 3 Torsdag

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Skriftlig eksamen i Datalogi

SWC eksamens-spørgsmål. Oversigt

Rekursion C#-version

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

Test af It-komponent

Forelæsning Uge 4 Torsdag

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Løsning af skyline-problemet

DM507 Algoritmer og datastrukturer

Forelæsning Uge 2 Torsdag

Anvendelse af del og hersk princippet involverer altså problemopdelning og løsningskombination.

Ugeseddel 4 1. marts - 8. marts

Transkript:

Programmering 1999 Forelæsning 18, fredag 5 november 1999 Anvendelse af udvalgssortering Quicksort Rapportopgave Programmering 1999 KVL Side 18-1 Eksempel 2 på anvendelse af udvalgssortering Sortering af poster En fødselsdagskalender 19640627 Carsten 19470206 Niels 19031001 Edith 19660106 Carsten 19070206 Ingeborg 19360114 Kirsten 19360630 Henrik 19551202 Harald 19340930 Jørgen 19641209 Hanne Man kan enten sortere efter alder (fødselsdag eller navn Programmering 1999 KVL Side 18-2 Hvordan repræsentere poster i Java Lav en klasse Person med to felter class Person int date; String name; En Person har navn og fødselsdag Person p1 = new Person(; p1date = 19640627; p1name = "Carsten"; Programmering 1999 KVL Side 18-3 Sortering af personer Metode swap skal kunne ombytte personer private static void swap(person[] arr, int s, int t Person tmp = arr[s]; arr[s] = arr[t]; arr[t] = tmp; Metode udvsort skal kunne sammenligne personer (feks på fødselsdag public static void selsort(person[] arr, int n /* pp1 */ for (int i = 0; i < n; i++ /* pp2 */ int least = i; for (int j = i+1; j < n; j++ if (arr[j]date < arr[least]date least = j; swap(arr, i, least; /* pp3 */ /* pp4 */ Programmering 1999 KVL Side 18-4

Indlæsning af personer fra tekstfil public static int readfile(person[] arr, String filename throws FileNotFoundException, IOException int n = 0; Reader inp = new FileReader(filename; StreamTokenizer tstream = new StreamTokenizer(inp; tstreamparsenumbers(; tstreamnexttoken(; while (n < arrlength && tstreamttype!= StreamTokenizerTT_EOF arr[n]date = (inttstreamnval; tstreamnexttoken(; arr[n]name = tstreamsval; tstreamnexttoken(; n++; return n; Programmering 1999 KVL Side 18-5 Hovedprogram Indlæs, sorter og udskriv public static void main(string[] args throws FileNotFoundException, IOException Person[] people = new Person[100]; for (int i=0; i<peoplelength; i++ people[i] = new Person(; int n = readfile(people, "birthdaytxt"; selsort(people, n; printout(people, n; Programmering 1999 KVL Side 18-6 Programmering 1999 KVL Side 18-8 Helt små problemer En tabel med 0 eller 1 element er allerede sorteret Del og hersk Opdel i mindre problemer og løs dem hver for sig Rekursiv Sortering af tabel kræver sortering af deltabeller Kombinér til sorteret hele Sortér hver gruppe for sig Opdel ne i to grupper små og store Grundidé i Quicksort Programmering 1999 KVL Side 18-7 emærk at udregning af rfak(n forudsætter udregning af rfak(n-1; metoden rfak kalder sig selv static int rfak(int n if (n == 0 return 1; else return n * rfak(n - 1; Den kan også programmeres rekursivt i Java hvis hvis Fakultetsfunktionen kan defineres rekursivt således Repetition Rekursive funktioner, fakultetsfunktionen

! Programmering 1999 KVL Side 18-10 Fortsæt opdelingen indtil Ombyt ne ved og, så de kommer på plads Stop når fundet venstre-element og højre-element Gennemløb tabellen fra venstre ( og højre ( samtidig Opdelingsfasen Programmering 1999 KVL Side 18-9 Sortér venstre og højre del hver for sig Opdeling Flyt til venstre; til højre?? Vælg et element fra tabellen pivotelementet Hvis, så Hvis så er tabellen allerede sorteret (trivielt delproblem Quicksort for en tabel Programmering 1999 KVL Side 18-12 ( * er, dvs asymptotisk proportional med * "# $&% Værste tilfælde for Quicksort Programmering 1999 KVL Side 18-11 Ialt ca runder Sidste runde een sortering med 1 element Tredje runde een sortering med Anden runde een sortering med Værste tilfælde altid skæv opdeling Opdelingsfasen kræver ca sammenligninger Tidsforbrug for sortering af

( 6 ; => < 87? 9 4 4 Programmering 1999 KVL Side 18-14 Quicksort er meget hurtig i praksis Gennemsnitlige tilfælde også er, dvs asymptotisk proportional med led 5 3 3 2tilfælde edste for Quicksort Programmering 1999 KVL Side 18-13 Højst runder, da antal halveres hver gang Sidste runde sorteringer med hver 1 element Tredje runde fire sorteringer med hver Anden runde to sorteringer med hver hvis Heldigste tilfælde en opdeling og derefter to heldige sorteringer edste tilfælde altid ligelig opdeling Hjælpemetoden ombyt Ombyt ne i @og A static void swap(int[] arr, int s, int t int tmp = arr[s]; arr[s] = arr[t]; arr[t] = tmp; Programmering 1999 KVL Side 18-15 private static void qsort(int[] arr, int a, int b // sort the subtable arr[ab] if (a < b int i = a, j = b; int x = arr[(i+j / 2]; /* pp1 */ do /* pp2 */ while (arr[i] < x i++; /* pp3 */ while (arr[j] > x j--; /* pp4 */ if (i <= j swap(arr, i, j; i++; j--; /* pp5 */ while (i <= j; /* pp6 */ qsort(arr, a, j; /* pp7 */ qsort(arr, i, b; /* pp8 */ /* pp9 */ Programmering 1999 KVL Side 18-16

Programmering 1999 KVL Side 18-18 Ellers er og vi har ved pp1 OK at metoden bare returnerer Enten er, og så har nul eller ét element Men så er allerede sorteret Det er derfor Der er to muligheder arbejdsområde for qsort(arr, a, b Vi kigger derfor kun på dette område (røres ikke arbejdsområde for qsort(arr, a, b (røres ikke 0 Et kald qsort(arr, a, b berører kun ne Invarianter for quicksort Programmering 1999 KVL Side 18-17 public static void quicksort(int[] arr, int n qsort(arr, 0, n-1; Sorter hele tabellen ved at kalde qsort Quicksort Programmering 1999 KVL Side 18-20 Men så er hele tabelafsnittet jo sorteret! Ved pp8 og pp9, efter kaldet qsort(arr, i, b Ved pp7, efter kaldet qsort(arr, a, j Ved pp6, når løkken er stoppet, gælder Programmering 1999 KVL Side 18-19 Ved pp5, efter ombytning Ved pp4, efter j-løkken Ved pp3, efter i-løkken Ved pp2

og Programmering 1999 KVL Side 18-22 Løkkeinvarianter hjælper til at forstå effektive løkker de simplere problemer løses ved rekursive kald et komplekst problem løses ved opdeling i simplere problemer Quicksort bygger på del-og-hersk De ekstreme tilfælde er sjældne Quicksort kan være langsom i ekstreme tilfælde Quicksort er meget hurtig i praksis, langt hurtigere end udvalgssortering Husk Læs noterne Searching and sorting with Java, side 19 24 Programmering 1999 KVL Side 18-21 Øjebliksbilleder kan altså give hurtigere programmer I praksis bidrager det væsentligt til quicksorts effektivitet Øjebliksbillederne gør det muligt at undvære indekstjek i de indre løkker Alle senere gange følger det af pp5 idet og derfor Første gang følger det af pp1 med C Hvordan ved vi at de indre løkker stopper? while (arr[i] < x i++; De indre løkker Rapportopgave Form Enkeltvis eller i grupper på 2 4 personer Indhold Helst noget fra jeres studier (eller fritidsinteresser Eksempler Web-baseret reservation af grupperum Spil, feks tetris eller minestryger Matching og sammenkædning af DNA-sekvenser Simulering af en blandet bøge/aske-skov Automatisk generering af optimeringsproblem ud fra bevoksningsliste At generere, vise, og løse en 3-dimensional labyrint eregning af stammesidelinier og vedmasse ud fra givne parametre Simulering af svinebesætning (drægtighed, faring Simulering af malkekvægsbesæetning (kælvning, mælkeydelse, udskiftning Simulering af stoftransport i jord Visualisering af vækstmodeller for danske træarter Udarbejdelse af webside og appletter med undervisningsmæssigt formål Programmering 1999 KVL Side 18-23 Rapportstruktur Forord Indledning aggrund og problemstilling rugervejledning og eksempel Teknisk beskrivelse af programmet Afprøvning Konklusion Rettesnor for sidetal (enmandsopgave/4, 1, 2, 2, 2, 2, 1/2 side Skøn over programlængde 2 5 sider (Et kort program er bedre end et langt der gør det samme Programmering 1999 KVL Side 18-24