You are on page 1of 25

BI 11.

THUT TON QUY (1 TIT)

Ni dung
Thut ton quy v hm quy l g?
Thut ton quy hot ng nh th no?
Mt s thut ton quy n gin

1. THUT TON QUY L G?

Khi nim quy

Droste
effect

Sierpinksi
triangle

i tng quy: l i tng m mt phn hoc ton

b i tng c nh ngha thng qua chnh n


Quy np ton hc

Qu trnh quy: l qu trnh m mt phn hoc ton b

qu trnh t lp li theo cng mt cch


4

quy V d
nh ngha s t nhin:
0 l s t nhin
n l s t nhin nu n-1 cng l s t nhin
Dy s:
Dy s l mt s
Dy s l mt s v sau l mt dy s

Mt s thut ng:
PHP = PHP: Hypertext Preprocessor
GNU = GNUs Not Unix

Thut ton quy


Thut ton quy l thut ton m trong cc bc thc

hin t thc hin li chnh n vi u vo nh hn(kch


thc, gi tr, mc phc tp)
T tng ca thut ton quy l a bi ton cn gii
v bi ton ng dng nhng mc thp hn
V d: Tnh dy s Fibonacci, n!
Ti sao dng quy:
Mt s thut ton trong cch thc thc hin mc nhin c tnh

quy
Mt s thut ton rt kh tm ra li gii c th s dng k thut
quy gii quyt. V d: Bi ton thp H Ni

Thut ton quy(tip)


xy dng thut ton quy, cn xc nh:
Trng hp c bn: (Cc) trng hp khng cn thc
hin li thut ton, c th xc nh c ngay kt qu
u ra
Phn tng qut: C yu cu gi quy
Cn xc nh nguyn l a trng hp tng qut v trng

hp c bn
m bo tnh dng ca gii thut quy - chc chn t trng
hp tng qut s n c trng hp c bn

Hm/Phng thc quy: Hm/Phng thc c li gi

ti chnh n

Cc thc hot ng ca thut ton quy


hiu cc thc thc hin ca thut ton quy, xem

xt v d tnh n! sau

S dng vng lp

S dng quy

int fact(int n) {
int result = 1;
for (int i=1;i<=n;i++)
result *= i;
return result;
}

int fact(int n) {
if (n == 0)
return 1;
else
return n * fact(n1);
}

Trng
Li gi quy hp c
8
s

quy tnh n!
120
fact(5)

5* fact(4)

24

4* fact(3)

fact(n):
if (n == 0) return 1;
else return n * fact(n-1);

3* fact(2)

2* fact(1)

1* fact(0)

1
1
9

Tnh n!
public class Factorial{
public int fact(int n){
if n == 0 return 1;
else return n*fact(n-1);
}
public static void main(){
System.out.println(n + ! = + fact(n));
}
}

10

Lp t kt tp chnh n
public class MyClass<E>{
private E element;
private MyClass<E> reference;//cha tham chiu c kiu MyClass
public MyClass(E item){
element = item;
reference = null
}
public setReference(MyClass<E> ref){
reference = ref;
}
public MyClass<E> getReference(){
return reference;
}
public void showElement(){
System.out.println(element.toString());
}
}
11

Lp t kt tp chnh n
B nh stack

B nh heap

aObj

A
reference

bObj
B
reference

MyClass<String> aObj = new MyClass<String>(A);


MyClass<String> bObj = new MyClass<String>(B);
aObj.setReference(bObj);
bObj.setReference(bObj);
bObj.setReference(aObj);
//--12

Lp t kt tp chnh n
public class TestMyClass {
public static void main(String[] args){
MyClass<String> aObj = new MyClass<String>("A");
MyClass<String> bObj = new MyClass<String>("B");
aObj.setReference(bObj);
aObj.getReference().showElement();
bObj.setReference(aObj);
bObj.getReference().getReference().showElement();
bObj.setReference(bObj);
bObj.getReference().showElement();
bObj.getReference().setReference(
bObj.getReference().
getReference());
bObj.getReference().showElement();
}
}//Ch : Khng c li gi no trn l quy

Kt qu hin th l g?

13

2. MT S V D

14

Tnh s Fibonacci
Dy s Fibonacci: 1, 1, 2, 3, 5 ,8, 13
Tnh s Fibonacci th n:

Fn = 1 nu n 2
Fn = Fn-1 + Fn-2 nu n > 2
int fib(int n) {
if (n <= 2)
return 1;
else
return fib(n-1) + fib(n-2);
}

15

Qu trnh thc hin

Li gi fib(3)
thc hin 3 ln!

fib(6)

fib(5)

fib(4)
fib(3)
fib(2)

fib(4)

fib(3)
fib(2)

fib(2)

fib(2)

fib(3)
fib(1)

fib(2)

fib(1)

fib(1)

16

Fibonacci Kh qui vi vng lp


int fib(int n) {
if (n <= 2)
return 1;
else {
int prev1=1, prev2=1, curr;
for (int i=3; i<=n; i++) {
curr = prev1 + prev2;
prev2 = prev1;
prev1 = curr;
}
return curr;
}
}

17

Chuyn i c s
Chuyn mt gi tr nguyn dng N t h thp phn sang

h m khc vi c s 2 b 10
Cch thc hin:
Bc 1:Ly phn nguyn ca N(10) chia cho b, ta c thng l

T1 s d d1.
Bc 2: Nu T1 khc 0, Ly T1 chia tip cho b, ta c thng s
l T2 , s d l d2
(C lm nh vy cho ti bc th n, khi ta c Tn =0)
Bc n: Nu Tn-1 khc 0, ly Tn-1 chia cho b, ta c thng s l
Tn =0, s d l dn
Kt qu ta c s N(b) l s to bi cc s d (c vit theo
th t ngc li) trong cc bc trn
Phn nguyn ca N(10) = dndn-1d1 (b)
18

Chuyn i c s
public static void displayInBase(int n, int base) {
if (n > 0) {
displayInBase(n / base, base);
System.out.print(n % base);
}
}

V d 1:
n = 123,
base = 10
123/10 =12 123 % 10 = 3
12/10 = 1 12 % 10 = 2
1/10 = 0 1 % 10 = 1
Kt qu: 123

V d 2:
n = 123,
base = 8
123/8 = 15 123 % 8 = 3
15/8 = 1 15 % 8 = 7
1/8 = 0 1 % 8 = 1
Kt qu: 173
19

Bi ton thp H Ni

C 3 cc A, B, C.
Trn cc A c mt chng a, tm cch di chuyn
sang chng a khc.
Lut: a ln khng c t ln a nh
A

20

Bi ton thp H Ni
Trng hp c s l g?
A: 1 a
B: 0 a
Bc quy?
A: chuyn n-1 a trn sang cc khc
B: chuyn n-1 a di sang cc khc

Cn gi bao nhiu bc quy?


A: 1
B: 2
C: 3

21

Bi ton thp H Ni
public static void Towers(int numDisks, char A, char C,
char B) {
if (numDisks == 1) {
System.out.println("Move top disk from pole " + A
+ " to pole " + C);
} else {
Towers(numDisks 1, A, B, C);

// Gi quy ln

Towers(1, A, C, B);
// Gi quy ln 2
Towers(numDisks 1, B, C, A); // Gi quy ln

3
}
}

22

Tm kim nh phn trn mng


Gi s mng arr c sp xp tng dn
Phng thc tm kim nh phn c th gi nh sau: so

snh phn t ang duyt vi phn t trung v


Trng hp c s 1: phn t ang duyt bng kha ang tm kim
Trng hp c s 2: khng tm thy kha
Thc hin li gi quy:
Nu kha ln hn phn t ang duyt: tm kim na tri
Nu kha nh hn phn t ang duyt: tm kim na phi

15
0

10

11

-4

-1

10

14

15

19

20

23

Tm kim nh phn trn mng


public int binarySearch (int [] a, int x){
return binarySearch(int [] a, int x, 0, a.length-1);
}
private int binarySearch(int [] a, int x,
int low, int high) throws ItemNotFound
// low: index of the low value in the subarray
// high: index of the highest value in the subarray
if (low > high)
// Base case 1: item not found
throw new ItemNotFound("Not Found");

int mid = (low + high) / 2;


if (x > a[mid])
return binarySearch(a, x, mid + 1, high);
else if (x < a[mid])
return binarySearch(a, x, low, mid - 1);
else
return mid; // Base case 2: item found
}

24

Ti liu tham kho


Bi ging s dng hnh nh v m ngun minh ha t bi

ging ca i hc QG Singapore (NUS)

25

You might also like