Övning 3 - Tillämpad datalogi 2012

Relevanta dokument
Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Graphs (chapter 14) 1

Övning 1 - Abstrakta datatyper

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Övning 3. Problemträd, breddenförst, djupetförst, hashning. Skriv ett program som läser personers namn och födelsedag från fil.

Föreläsning Datastrukturer (DAT036)

Fredag 10 juni 2016 kl 8 12

Föreläsning Datastrukturer (DAT037)

Calculate check digits according to the modulus-11 method

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Övning 6 - Tillämpad datalogi 2012

Föreläsning Datastrukturer (DAT036)

Övning 2. (Länkade) Listor, noder

LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik

Isometries of the plane

Writing with context. Att skriva med sammanhang

Styrteknik: Binära tal, talsystem och koder D3:1

Pre-Test 1: M0030M - Linear Algebra.

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen i Matematik 2: M0030M.

Tentamen MMG610 Diskret Matematik, GU

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning Datastrukturer (DAT036)

Module 1: Functions, Limits, Continuity

Föreläsning Datastrukturer (DAT037)

Algoritmer och Komplexitet ht 08. Övning 6. NP-problem

Isolda Purchase - EDI

Grundläggande datalogi - Övning 2

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

NP-fullständighetsbevis

Mönster. Ulf Cederling Växjö University Slide 1

This exam consists of four problems. The maximum sum of points is 20. The marks 3, 4 and 5 require a minimum

Support Manual HoistLocatel Electronic Locks

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 6 Datastrukturer (DAT037)

Grundläggande datalogi - Övning 4

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

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Övning 5 - Tillämpad datalogi 2013

Föreläsning 7: Prioritetskö, trappa heapsort, hashning

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Datastrukturer. föreläsning 9. Maps 1

FORTA M315. Installation. 218 mm.

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

12.6 Heat equation, Wave equation

Trädstrukturer och grafer

Ett hållbart boende A sustainable living. Mikael Hassel. Handledare/ Supervisor. Examiner. Katarina Lundeberg/Fredric Benesch

Resultat av den utökade första planeringsövningen inför RRC september 2005

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

VAD SKULLE DU HA VALT PDF

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Workplan Food. Spring term 2016 Year 7. Name:

DD1321, Tentamen i tillämpad programmering och datalogi Lördagen den 18 dexember 2010 kl 13 18

Grundläggande datalogi - Övning 3

Discrete Mathematics (English)

Algoritmer och datastrukturer

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Windlass Control Panel v1.0.1

Kvalitetsarbete I Landstinget i Kalmar län. 24 oktober 2007 Eva Arvidsson

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) + Del omtenta i PK/PK1/PK2/PM1/AD1

Ordlistor, filhantering och ut på webben. Linda Mannila

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

1. (3p) Bestäm den minsta positiva resten vid division av talet med talet 31.

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Uttagning för D21E och H21E

Kelly, Kevin (2016) The Inevitable: Understanding the 12 Technological Forces The Will Shape Our Future. Viking Press.

Algoritmer, datastrukturer och komplexitet

SVENSK STANDARD SS :2010

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Programmering II (ID1019) :00-11:00

Lösningar Datastrukturer TDA

PORTSECURITY IN SÖLVESBORG

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning 13 och 14: Binära träd

Tentamen Datastrukturer (DAT036)

Datasäkerhet och integritet

Preschool Kindergarten

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

ASSEMBLY INSTRUCTIONS

Algoritmer, datastrukturer och komplexitet

Hur fattar samhället beslut när forskarna är oeniga?

Make a speech. How to make the perfect speech. söndag 6 oktober 13

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

F11. Läsanvisning: kap 10 + dessa OH. Kruskals algoritm kortaste vägar en till alla

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Transkript:

/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20121 0 # coding : latin Övning 3 - Tillämpad datalogi 2012 Summering Vi gick igenom problemträd, sökning i problem träd med bredden först, och djupet först. Vi exemplifierade det genom att lösa två uppgifter strykord, med djupet först, och sjuor i rad, med bredden först. Some imports, ignore 20 import s y s, o s 21 s y s. p a t h. append ( o s. getcwd ()) Problemträd, breddenförst, djupetförst Ett problemräd kan ses som en enkelriktad graf med en start nod som sen ger upphov till hela trädet Bredden först söker av problemträdet nivå för nivå Djupet först söker igenom problemträden genom att gå på djupet från vänster till höger Djupet först sökning påminner om trädutskrifen Preordning: (noden) (vänster träd) (höger träd), med skillnaden att vi nu kan ha fler kanter än två till en nod. Regeln blir då istället (noden) (träd längst till vänster),...,(träd längst till höger träd) Bredden först sökning Djupet först sökning Start Start 1. Strykord Ordet orkan är ett strykord eftersom man kan stryka sista bokstaven om och om igen och bara få riktiga ord. orkan - orka - ork - or - o Uppgiften är att finna det längsta strykordet i svenska språket. Ordlistan finns på fil. Rita problemträdet och jämför olika tänkbara algoritmer. Börja med tomt ord, skapa sedan barn genom att lägga på en bokstav och kolla ifall det ordet finns. Vi vill ha uttömmande sökning, så breddenförst är inte nödvändigt. Vi använder därför en rekursiv djupetförstsökning. Orden läggs i en dict - kan använda binärträd eller något smartare som sparar minne. Problemträdet vi får ser ut på följande sätt:

/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20122 Tomt a b... ö ar al 59 arm ark art 60 # coding : iso -8859-1 61 62 def l a n g s t a _ s t r y k o r d ( ord, o r d l i s t a ) : 63 """ Rekursiv djupetförst som hittar längsta strykordet givet orden 64 i ordlista """ 65 66 a l f a b e t=" a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö " 67 g l o b a l r e k o r d 68 i f l e n ( o r d ) > l e n ( r e k o r d ) : 69 r e k o r d = o r d 70 f o r t k n i n a l f a b e t : 71 i f o r d l i s t a. has_key ( o r d + t k n ) : 72 l a n g s t a _ s t r y k o r d ( o r d + tkn, o r d l i s t a ) 73 74 r e k o r d=" " 75 s v e n s k a={} # Dictionary 76 77 s v e n s k f i l = open (" s s 1 0 0. t x t ") 78 f o r r a d i n s v e n s k f i l. r e a d l i n e s () : 79 s v e n s k a [ r a d. s t r i p (). l o w e r () ]=True #Ta bort returtecknet och gör om till upper 80 81 82 l a n g s t a _ s t r y k o r d (" ", s v e n s k a ) 83 p r i n t " Längsta s t r y k o r d : None" L ä n g s t a s t r y k o r d : None 82 s= 83 f o r b i n r e k o r d : 84 s +=b 85 p r i n t >, s, -> s -> s k -> s k a -> s k a r -> s k a r p -> s k a r p a -> s k a r p a s -> s k a r p a s t -> s k a r p a s t e -> s k a r p a s t e s 2. Sjuor till hundra Det gäller att skriva talet 100 med enbart sjuor och dom fyra räknesätten, till exempel så här: 7 +7 /7 *7 *7 =98 Det var ett gott försök som inte nådde ända fram. För att man ska få använda / måste divisio- nen gå jämnt ut. Rita problemträdet och diskutera bästa algoritm för att avgöra OM problemet är lösbart. Om man dessutom vill veta hur lösningen ser ut krävs en mer komplicerad datastruktur. Be- skriv den och

/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20123 skissa ett program. Vi vill hitta kortaste sättet att komma fram till hundra. Som gjort för bredden- först, där man använder en kö med heltal för att stoppa i alla tal man får från n (division omm. n = 0 (mod 7)): n n + 7 n - 7 n * 7 n/7 110 111 (n + 7) + 7 (n + 7) - 7 (n + 7) * 7 112 from queue import Queue 113 114 q = Queue () 115 def makesons ( t a l ) : 116 g l o b a l q 117 i f t a l==100 : 118 p r i n t " Hundra! ", 119 r e t u r n F a l s e 120 q. put ( t a l +7) 121 q. put ( t a l -7) 122 q. put ( t a l *7) 123 i f ( t a l %7==0) : 124 q. put ( t a l /7) 125 r e t u r n True 126 127 m=true 128 q. put (0) 129 w h i l e ( not q. i s e m p t y ()) and m: 130 m=makesons (q. g e t ()) Hundra! Notera dock att vi kommer att testa samma tal många ggr: 0 [7, -7, 0, 0] 7 [14, 0, 49, 1] -7 [0, -14, -49,...] Notera att vi får ett stort span av tal med många dubletter: Totalt antal: 19568 Antal unika: 809 Med många stora och små tal [ 823543. 235298. 134456.]...[ 1.0.1.2.]...[252105.352947.823543.] För att få ut kedjan måste varje nod minnas sin "far", dvs varifrån den kom- mer. Det lättaste är att returnera den noden istf. False från makesons (istf. True returnerar man None), men det går även att använda ett Exception. 152 153 c l a s s Node : 154 def init ( s e l f, t a l = 0, f a r = None, op=? ) : 155 s e l f. t a l = t a l 156 s e l f. f a r = f a r

/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20124 157 s e l f. op = op 158 159 from queue import Queue 160 from s y s import e x i t 161 162 q=queue () 163 N=7 164 165 166 def makesons ( f a r ) : 167 g l o b a l N, q 168 t a l = f a r. t a l 169 i f t a l == 100 : 170 r a i s e S t o p I t e r a t i o n ( f a r ) 171 q. put (Node( t a l +N, f a r, + )) 172 q. put (Node( t a l -N, f a r, )) 173 q. put (Node( t a l *N, f a r, * )) 174 i f ( t a l %N==0) : 175 q. put (Node( t a l /N, f a r, / )) 176 177 def w r i t e c h a i n (p) : 178 i f p!= None : 179 w r i t e c h a i n (p. f a r ) 180 p r i n t p.op, N, >, p. t a l 181 182 q. put (Node ()) 183 184 t r y : 185 w h i l e not q. i s e m p t y () : 186 makesons (q. g e t ()) 187 except S t o p I t e r a t i o n a s s i : 188 w r i t e c h a i n ( s i. a r g s [ 0 ] )? 7 -> 0 + 7 -> 7 + 7 -> 14 * 7 -> 98 * 7 -> 686 + 7 -> 693 + 7 -> 700 / 7 -> 100 Misc Graph A graph in this this context is a collection of vertices or nodes and a collection of edges that connect pairs of vertices. Complexity bredden först, O(V)+O(E)=O(V+E) där V är antalet noder(vertex) och E antalet kopplingar (edges). Complexity djupet först, O(V)+O(E)=O(V+E) där V är antalet noder(vertex) och E antalet kopplingar (edges). Searching Even though a binary search is generally better than a sequential search, it is important to note that for small values of n, the additional cost of sorting is probably not worth it. In fact, we should always consider whether it is cost effective to take on the extra work of sorting to gain searching benefits. If we can sort once and then search many times, the cost of the sort is not so significant. However, for large lists, sorting even once

/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20125 can be so expensive that simply performing a sequential search from the start may be the best choice. [ref http://interactivepython.org/courselib/static/pythonds/sortsearch/searching.html#lst-binarysearchpy] Hash table A hash table is a collection of items which are stored in such a way as to make it easy to find them later. Each position of the hash table, often called a slot, can hold an item and is named by an integer value starting at 0. For example, we will have a slot named 0, a slot named 1, a slot named 2, and so on. Initially, the hash table contains no items so every slot is empty. Load factor lambda=numberofitems/tablesize Creating hashfunctions Folding, divide and add. For 436-555-4601, divide digits into groups of 2 (43,65,55,46,01) and add 43+65+55+46+01, giving the hash number 210 Collision resolution linear probing, rehash(pos)= (pos+1)% sizeoftable rehash(pos)= (pos+3)% sizeoftable rehash(pos)= (pos+skip)% sizeoftable quadratic probing rehash(pos)= (pos+skip)% sizeoftable, skip =1,3,5,7