Ladda ner presentationen
Presentation laddar. Vänta.
1
TILLÄMPAD DATALOGI (TILDA) Övning 2 www.nada.kth.se/~mhj/tilda
3
Rekursion Tidskomplexitet Hemtal
4
Rekursion
5
Ex 1: Fakultet t.ex. fakultet(5) = 5 * 4 * 3 * 2 * 1 = 120 Basfall: fakultet(1) = 1 Rekursion (annars): fakultet(5) = 5 * fakultet(4) fakultet(4) = 4 * fakultet(3) fakultet(3) = 3 * fakultet(2) fakutlet(2) = 2 * fakultet(1) fakultet(1) = 1 1 2 6 24 120
6
Ex 1: Fakultet fakultet(n) = n * n-1 * … * 2 * 1 Basfall: fakultet(1) = 1 Rekursion (annars): fakultet(n) = n * fakultet(n-1)
7
class Ex1Rekursion { public static void main(String [] args) { System.out.println(fakultetA(3)); } public static int fakultetA(int tal) { if (tal == 1) return 1; else return tal * fakultetB(tal-1); } public static int fakultetB(int tal) { if (tal == 1) return 1; else return tal * fakultetC(tal-1); } public static int fakultetC(int tal) { if (tal == 1) return 1; else return tal * fakultetD(tal-1); } 6 1 2 6 tal 3 2 1
8
class Ex1Rekursion { public static void main(String [] args) { System.out.println(fakultet(2)); System.out.println(fakultet(4)); } public static int fakultet(int tal) { if (tal == 1) { return 1; } else { int f; f = tal * fakultet(tal-1); return f; } 2 2 tal 0 f 1 2 0 f 6 2 0 f 2 1 3 24 4 1 2 6
9
class Ex1Rekursion { public static void main(String [] args) { System.out.println(fakultet(2)); System.out.println(fakultet(4)); } public static int fakultet(int tal) { if (tal == 1) return 1; else return tal * fakultet(tal-1); }
10
Ex2 : Palindrom t.ex. rar, alla, r, ””, naturrutan Basfall: 1. om första och sista tecknet i ordet är olika är ordet inte ett palindrom 2. om ordet har 0-1 tecken är det ett palindrom Rekursion (annars): ordet är ett palindrom om texten mellan första och sista bokstaven i ordet är ett palindrom Ex. naturrutan är ett palindrom om och endast om aturruta är ett palindrom
11
class Ex2Rekursion { 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(); if (len <= 1) { return true; } else if (s.charAt(0) == s.charAt(len-1)) { String s2 = s.substring(1, len-1); return ärPalindrom(s2); } else { return false; } false true s ”david” len 5 s2 ”avi” s len 3 s2 ”” s len 0 2 4 ”nn” ”anna”
12
Ex3 : Längden på en stack Basfall: En tom stack har längd 0 Rekursion (annars): En stack har längd 1 + resten av stackens längd
13
class Ex3Rekursion { public static void main(String [] args) { Stack stack = new Stack(); stack.push(3); stack.push(5); stack.push(4); System.out.println(stack.lenght()); } class Node { public int nr; public Node next; public Node(int nr) { this.nr = nr; next = null; } class Stack { private Node top; public Stack() { top = null; } public int lenght() { return lenght(top); } private int lenght(Node n) { if (n == null) return 0; else return 1 + lenght(n.next); } public void push(int nr) { Node node = new Node(nr); node.next = top; top = node; } public int pop() { int nr = top.nr; top = top.next; return nr; } stack null top 3 nr null next null 5 nr next 4 nr null next 3 n null n n n
14
Tidskomplexitet
15
for (int i = 0; i < n; i++) { a = a + 2; a--; } k n k * n = O(n)
16
Tidskomplexitet for (int i = 0; i < n; i++) { a = a + 2; a--; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a = a + 2; a-- } k n k nn k * n + k * n * n <= k * n 2 + k * n 2 = 2 * k * n 2 = O(n 2 )
17
Tidskomplexitet for (int i = 0; i < n; i++) { a = a + 2; a--; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a = a + 2; a-- } O(n) O(n 2 ) O(n) + O(n 2 ) = O(n 2 )
18
Tidskomplexitet for (int i = 0; i < n; i++) { a = a + 2; a--; } for (int i = 0; i < n; i++) { sum++; } O(n) O(n) + O(n) = O(n)
19
Tidskomplexitet for (int i = 0; i <= n; i++) { for (int j = 0; j <= i; j++) { sum++; } k + 2k + … + nk = k * (1+2 + … + n) = k * (n 2 +n)/2 = O(n 2 ) k
20
Tidskomplexitet Algoritmn = 100n = 500 k 1 * n0,5 ms2,5 ms5x längre k 2 * n 2 0,5 ms12,5 ms25x längre k 3 * n 3 0,5 ms62,5 ms125x längre k 4 * 2 n 0,5 ms1,3*10 120 ms = 4,1*10 109 år 2,6 * 10 120 x längre jämförtid
21
Ex) Gotland Runt har en databas med information om 512 båtar. Lista fördelar och nackdelar med linjärsökning resp. binärsökning i datat. Linjärsökning: Fördelar: Kan använda länkad lista eller vektor för att lagra informationen Nackdelar:Lång tid att söka O(n), medel 250 jämförelser Binärsökning: Fördelar:Snabbt att söka O(log n), medel ~9 jämförelser Nackdelar:Kräver en array. Kräver att arrayen är sorterad. AnneBeatriceDaniellaVictoriaYlvaZandra... 0 12509 510511 512, 256, 128, 64, 32, 16, 8, 4, 2, 1
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.