Standardlösningar: sekventiell sökning

Relevanta dokument
Algoritmteori - effektivitet

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Datalogi för E Övning 3

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll

Föreläsning 7: Syntaxanalys

Föreläsning 5 Innehåll

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Föreläsning 13 Innehåll

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Exempeltenta GruDat 2002/2003

Tentamen Datastrukturer för D2 DAT 035

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Föreläsning REPETITION & EXTENTA

Tentamen OOP

Användarhandledning Version 1.2

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Programmering A. Johan Eliasson

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Funktionell programmering. Haskell. Ge#ng started...

Filbindningar. Mike McBride Översättare: Stefan Asserhäll

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Språket Python - Del 1 Grundkurs i programmering med Python

2. Välj avancerad sökning (det enda sökalternativ som fungerar ännu).

Föreläsning 13 Testning och strängar

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Inledande programmering med C# (1DV402) Summera med while"-satsen

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning 3.1: Datastrukturer, en översikt

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

tentaplugg.nu av studenter för studenter

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Sortering. Intern/ extern? Antaganden. Vad kan vi kräva? Rank sort. Rank sort. På en nod/ distribuerad? Jämförelsebaserad/ icke jämförelsebaserad?

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

TDIU01 (725G67) - Programmering i C++, grundkurs

Hur man programmerar. Exempel på problemlösning i Python

Övning 1 - Abstrakta datatyper

Tentamen Datastrukturer (DAT036)

Erfarenheter från labben

Datastrukturer. föreläsning 6. Maps 1

SORTERING OCH SÖKNING

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen i Introduktion till programmering

TDDC74 Programmering, abstraktion och modellering. Tentamen

Objektorienterad Programkonstruktion. Föreläsning jan 2016

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Tildatenta Lösningsskiss

Sökning och sortering. Linda Mannila

Magnus Nielsen, IDA, Linköpings universitet

i LabVIEW. Några programmeringstekniska grundbegrepp

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Fredag 10 juni 2016 kl 8 12

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Rekursiva algoritmer sortering sökning mönstermatchning

Tentamen i Grundläggande Programvaruutveckling, TDA548

Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

TDP002 - Imperativ programmering

I ett program hantera man ofta samlingar av objekt av samma typ.

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Grundkurs i programmering, 6 hp (725G61) Dugga 1 tillfälle 3

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Tentamen: Programutveckling ht 2015

TDDC74 Programmering, abstraktion och modellering. Tentamen

Introduktion till programmering SMD180. Föreläsning 8: Listor

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Kap 26 Nukleinsyror och proteinsyntes. Bilder från McMurry

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Dugga Datastrukturer (DAT036)

Objektorienterad programmering D2

Programkonstruktion och Datastrukturer

Programmering II (ID1019) :00-12:00

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Programkonstruktion. Tentamen,

Uppgift 1: Big data och deras användningsutmaningar

Webbgenvägar. Krishna Tateneni Yves Arrouye Översättare: Stefan Asserhäll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Transkript:

Standardlösningar: sekventiell sökning Problem: givet ett, sök fram rätt telefonnummer! rad N tel. T 1 Lisa 040-2451 242 2 Bert 040-2526 734 3 Calle 050-9483 142 4 Jonas 044-2617 567 5 Ville 02-4769 002 6 Heidi 040-2435 789 7 Jona 050-7835 111 8 Heikki 042-3526 765 9 Sara 09-1233 897 10 Lena 040-1425998 Förslag 1: 1. Läs in sök, en i katalogen N1,...,N10000 och respektive telefonnummer T1,..., T10000 2. Om sök = N1 så skriv ut T1 3. Om sök = N2 så skriv ut T2 4. Om sök = N3 så skriv ut T3... 10000. Om sök = N9999 så skriv ut T9999 10001. Om sök = N10000 så skriv ut T10000 10002. Slut Vilka fel eller brister hittar du i algoritmen? Programmering, GK/C 1

Förslag 2: 1. Läs in sök, en i katalogen N1,...,N10000 och respektive telefonnummer T1,..., T10000 2. i 1 3. hittat false 4. Repetera tills hittat = true: 4.1. Om sök = Ni så skriv ut Ti, hittat true annars i i + 1 {nästa } 5. Slut Vilka fel eller brister hittar du i algoritmen? Programmering, GK/C 2

Förslag 3: 1. Läs in sök, en i katalogen N1,...,N10000 och respektive telefonnummer T1,..., T10000 2. i 1 3. hittat false 4. Repetera tills hittat = true eller i > 10000: 4.1. Om sök = Ni så skriv ut Ti, hittat true annars i i + 1 {nästa } 5. Om hittat = false, skriv ut sorry, finns ej 6. Slut Vilka fel eller brister hittar du i algoritmen? Ett enkelt exempel: Hur konvertera Celsius till Fahrenheit? Och tvärtom? 0 C = 32 F, 100 C = 212 F,... C2F.c F2C.c 1. Läs in C 1. Läs in F 2. F C * 9/5 + 32 2. C (F - 32) * 5/9 3. Skriv ut F 3. Skriv ut C 4. Slut 4. Slut Programmering, GK/C 3

Standardlösningar: sökning efter minimum 1. Läs in första tal 2. min tal 3. Så länge det finns tal kvar, repetera: 3.1 Läs in tal 3.2 Om tal < min så min tal 4. Skriv ut min 5. Slut Hur skulle du ändra i algoritmen ovan för att hitta maximum? minmax.c Sökning efter minimum och dess plats i listan, talen finns färdigt i en lista A med n st. element, A1,..., An: 1. min A1 2. minplats 1 3. i 2 4. Så länge i n, repetera: 4.1. Om Ai < min så min Ai, minplats i 4.2. i i + 1 {nästa element} 5. Skriv ut min och minplats 6. Slut Programmering, GK/C 4

Ex. 43 64 12-6 14-78 123 43 13 2 1 2 3 4 5 6 7 8 9 10 1. min A1 min startar från 43 2. minplats 1 3. i 2 4. Så länge i n, repetera: så länge i 10... 4.1. Om Ai < min så min Ai, 12, -6, -78 minplats i 3, 4, 6 4.2. i i + 1 {nästa element} 5. Skriv ut min och minplats 6. Slut Programmering, GK/C 5

Standardlösningar: selektionssortering Problem: vi har en lista med som vi vill sortera i alfabetisk ordning. (Vi antar att teckenuppsättningen i vår dator klarar även av de skandinaviska bokstäverna - detta är någonting som man sällan kan ta för givet.) Tanken bakom algoritmen är att vi söker det största et (det sista i ordningen), placerar det sist, sedan det näst största, placerar det näst sist osv. tills bara det minsta et finns kvar. Det kommer automatiskt att placeras rätt, på första platsen. n 1 Lisa 2 Caj 3 Mats 6 Östen 7 Anna 8 Bo n 1 Lisa 2 Caj 3 Mats 6 Östen 7 Anna 8 Bo max = Östen maxplats = 6 osorterade = 8 Programmering, GK/C 6

n 1 Lisa 2 Caj 3 Mats 6 Bo 7 Anna max = Mats maxplats = 3 osorterade = 7 n 1 Lisa 2 Caj 3 Anna 6 Bo 7 Mats max = Lisa Maxplats = 1 osorterade = 6 n 1 Bo 2 Caj 3 Anna 6 Lisa 7 Mats max = Lenita maxplats = 5 osorterade = 5 Programmering, GK/C 7

n 1 Bo 2 Caj 3 Anna 6 Lisa 7 Mats max = Lena maxplats = 4 osorterade = 4 n 1 Bo 2 Caj 3 Anna 6 Lisa 7 Mats max = Caj maxplats = 2 osorterade = 3 n 1 Bo 2 Anna 3 Caj 6 Lisa 7 Mats max = Bo maxplats = 1 osorterade = 2 Programmering, GK/C 8

n 1 Anna 2 Bo 3 Caj 6 Lisa 7 Mats osorterade = 1 Som vi ser, när antalet osorterade når 1 har det sista kvarstående et hamnat på sin rätta plats. Algoritm: 1. Läs in n st. i tabellen (som heter ) 2. Osorterade n 3. Repetera tills osorterade = 1 (repetera n-1 ggr): 3.1. Sök max och maxplats bland de osorterade en ([1]..[osorterade]) 3.2. Låt [maxplats] och [osorterade] byta plats med varandra (swap). 3.3. osorterade osorterade -1 4. Slut Samma sorteringsalgoritm duger för alla datatyper som kan jämföras med relationsoperatorer (<,>,...). Programmering, GK/C 9

Genetikalgoritmen (sökning efter delsträngar) (Extra om det finns tid på kursen) Det finns fyra olika nukleotider: Adenin (A), Cytosin (C), Thymin (T) och Guanin (G). Våra gener består av dessa. Den biologiska bindningen är A-T, C-G. För en genetisk analys denatureras bindningarna öppna. För att hitta olika mönster i en gensträng använder man en probe (eller två st. primers för en PCR-analys). Ex. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Genom: T C A G G C T A A T C G T A G G Probe: T A A T C Problem: Givet ett genom att analysera och en probe försök ta reda på om proben i fråga förekommer i genomenet. I uppgiften antar vi att det kan finnas flera förekomster, och att dessa delvis kan överlappa. För varje förekomst ska du ange startplatsen (7 i exemplet ovan). Grov idé: 1. Försök matcha mönstret med sekvensen ovanför parvis, tecken för tecken. Är paret lika? Ja försök med nästa par! Nej Flytta mönstret ett steg åt höger, börja från början! 2. Lyckas man matcha hela mönstret så har vi en match: skriv ut startplatsen, fortsätt från följande plats (startplats + 1) Programmering, GK/C 10

Lösningen: Variabler: T[1]..T[n] texten som ska analyseras (genom) P[1]..P[m] mönstret som ska hittas (probe) n = antalet tecken i texten m = antalet tecken i mönstret k = en potentiell startplats (vi håller på tills k > (n - m + 1). Då har vi för få tecken kvar i texten T) i = räknar tecken i mönstret P. Blir i > m så har vi gått genom hela mönstret. Formeln k + (i - 1) ger det motsvarande tecknet i texten T ( tecknet ovanför ) när vi ska testa tecknen i mönstret mot tecknen i texten. (Hur kommer man fram till detta? i = 1 motsvarar en startplats k. Nästa tecken i mönstret, i = 2, motsvarar då k+1, nästa, i = 3, motsvarar k +2 osv. Ska vi då para ihop i och k + i? Nej, då kastar det med 1. Tecknet P[i] ska testas mot tecknet T[k+(i-1)], det är tecknet ovanför.) Algoritm: Givet: Texten T (längd n) och mönstret P (längd m) 1. k 1 {första plats är första potentiella startplats} 2. Repetera tills texten T tar slut (antalet tecken kvar i T är mindre än m): 2.1. Försök matcha varje tecken i mönstret P mot texten T ovanför, börjande från plats k 2.2. Om det blev en match (alla paren var lika), skriv ut k 2.3. k k + 1 {vi går ett steg åt höger} 3. Slut Programmering, GK/C 11

En mera detaljerad algoritm: Givet: Texten T (längd n) och mönstret P (längd m) 1. k 1 {första plats är första potentiella startplats} 2. Repetera tills k > (n - m + 1): 2.1. i 1 {i räknar genom tecknen i mönstret P} 2.2. missmatch false {optimistiskt antagande} 2.3. repetera tills (i > m) eller (missmatch = true) {mönstret gick genom eller vi fick fel par}: 2.3.1. Om P[i] T[k+(i-1)] så missmatch true annars i i + 1{nästa tecken} 2.4. Om missmatch = false, skriv ut k 2.5. k k + 1 {vi går ett steg åt höger i texten T} 3. Slut Programmering, GK/C 12