Ladda ner presentationen
Presentation laddar. Vänta.
1
TILLÄMPAD DATALOGI (TILDA) Övning 3 www.nada.kth.se/~mhj/tilda
2
Problemträd Bredden först Djupet först
3
class RekursionPalindrom { public static void main(String [] args) { String n1 = ”david”; String n2 = ”anna”; System.out.println(ärPalindrom(n1)); System.out.println(ärPalindrom(n2)); } public static boolean ärPalindrom(String s) { int len = s.length(); // basfall 1 if (len <= 1) { return true; } // basfall 2 else if (s.charAt(0) != s.charAt(len-1)) { return false; } // rekursion else { String s2 = s.substring(1, len-1); return ärPalindrom(s2); } }}
9
Problemträd
10
Problem: Erhåll talet (100) på kortast sätt med hjälp av talet fyra (4) och de tre räknesätten addition (+), subtraktion (-) och multiplikation (*). Exempel: 4 * 4 + 4 + 4 * 4 + 4 = 100 Problemträd: 4 8160 1232420641240-4 4 4 4 4 4 4 4 4 4 4 4 4
11
Problem: En teknolog som glömt sin tresiffriga portkod tryckte sej igenom alla tusen kombinationer så här: 000001002003004005006007008009010011012...999 Det kräver 3000 tryckningar. Man kan dock börja med 000 och sedan klara sig med 999 tryckningar om man har en supersmart sekvens där varje tresiffrigt tal förekommer någonstans. Hur ser sekvensen ut? Problemträd: 000 000500060007000800090004000300020001 000550005600057000580005900054000530005100050 00052 543219876 59876 04321
12
Sökning i problemträd Bredden först
13
Djupet först Sökning i problemträd
14
Hitta lösning på minimalt avstånd Bredden först
15
Hitta lösning på minimalt avstånd Djupet först
16
Hitta en lösning då lösningarna finns på långt avstånd Bredden först
17
Hitta en lösning då lösningarna finns på långt avstånd Djupet först
18
1 3 42 9875 13121110 6 27242116 383330 18 31 282519 40393734 22232014 353229 26 15 36 1 2 5 3 4 Bredden först görs oftast med en kö 12345678910111213141516 Kö 17 6 18
19
1 3 42 9875 13121110 6 27242116 383330 18 31 282519 40393734 22232014 353229 26 15 36 1 2 5 Djupet först görs oftast med rekursion eller stack 17 6 161415 17
20
Problem: Erhåll talet (100) på kortast sätt med hjälp av talet fyra (4) och de tre räknesätten addition (+), subtraktion (-) och multiplikation (*). Exempel: 4 * 4 + 4 + 4 * 4 + 4 = 100 4 8160 1232420641240-4 4 4 4 4 4 4 4 4 4 4 4 4 Kö 40816-44041232122064-80-16 4 0816 -4
21
Problem: En teknolog som glömt sin tresiffriga portkod tryckte sej igenom alla tusen kombinationer så här: 000001002003004005006007008009010011012...999 Det kräver 3000 tryckningar. Man kan dock börja med 000 och sedan klara sig med 999 tryckningar om man har en supersmart sekvens där varje tresiffrigt tal förekommer någonstans. Hur ser sekvensen ut? 000 000500060007000800090004000300020001 000550005600057000580005900054000530005100050 00052 543219876 59876 04321
22
00010020030040050060070080090110120130140150160170180190210220230240 25026027028029031032033034035036037038039041042043044045046047048049 05105205305405505605705805906106206306406506606706806907107207307407 50760770780790810820830840850860870880890910920930940950960970980991 11211311411511611711811912212312412512612712812913213313413513613713 81391421431441451461471481491521531541551561571581591621631641651661 67168169172173174175176177178179182183184185186187188189192193194195 19619719819922232242252262272282292332342352362372382392432442452462 47248249253254255256257258259263264265266267268269273274275276277278 27928328428528628728828929329429529629729829933343353363373383393443 45346347348349354355356357358359364365366367368369374375376377378379 38438538638738838939439539639739839944454464474484494554564574584594 65466467468469475476477478479485486487488489495496497498499555655755 85595665675685695765775785795865875885895965975985996667668669677678 67968768868969769869977787797887897987998889899900
23
class BreddenForstFindNr { p s v main(String [] args){ FindNr fn=new FindNr(4,100); fn.find(); } class FindNr { int nr, goal; Queue q; public FindNr(int nr, int g) { this.nr = nr; goal = g; q = new Queue(); } public void find() { q.put(new Node(nr, ””, null)); while (! q.isEmpty() ) { makeSons( q.get() ); } public void makeSons(Node n) { if (n.sum == goal) { writeChain(n); } q.put(new Node(n.sum-nr, ”-”, n)); q.put(new Node(n.sum+nr, ”+”, n)); q.put(new Node(n.sum*nr, ”*”, n)); } fn nr 4 q head null tail sum 4 oper ”” father null sum 0 oper - father sum 8 oper + father sum 16 oper * father sum -4 oper - father info null next info null next info null next info null next info null next n goal 100
24
Finn fem fel
25
class FinnFemFel { public static void main(String [] args) { Mio mio = new Mio(); System.out.println("Vad vill du att programmet skriver ut?"); String text = mio.getWord(); System.out.println("Hur många gånger?"); int antal = mio.getWord(); skriv(antal, text); } public static double skriv(String s, int antal) { for (int i = 1; i < antal; i++) { System.out.print(text + ” ”); } Vad vill du att programmet skriver ut? Hej Hur många gånger? 5 Hej Hej Hej Hej Hej
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.