1. Trang chủ
  2. » Khoa Học Tự Nhiên

Toán rời rạc chương 5 bài toán liệt kê

50 412 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 1,16 MB

Nội dung

Thu t toán quay lui.

Trang 1

TOÁN R I R C

Lecturer: PhD Ngo Huu Phuc

Tel: 0438 326 077 Mob: 098 5696 580

BÀI TOÁN LI T KÊ

Trang 2

N I DUNG CH NG 5

5.1 Gi i thi u bài toán

5.2 Nh c l i ki n th c đ quy

5.3 Sinh hoán v - Sinh t h p

5.4 Thu t toán quay lui Bài toán x p h u 5.5 Bài t p ch ng 5

Trang 3

5.1 Gi i thi u bài toán (1/3)

 C n có gi i thu t đ l n l t xây d ng đ c t t c các

c u hình đang quan tâm BÀI TOÁN LI T KÊ

 i v i bài toán li t kê, c n đ m b o 2 nguyên t c:

Không đ c l p l i m t c u hình

Không đ c b sót m t c u hình

 Khó kh n chính c a ph ng pháp này là s

bùng n t h p ”!

Trang 4

5.1 Gi i thi u bài toán (2/3)

Trang 5

5.1 Gi i thi u bài toán (3/3)

Trang 6

 Các gi i thu t đ qui th ng đ c xây d ng qua hai b c:

b c phân tích

Trang 9

5.2 Nh c l i ki n th c đ quy (4/9)

5.2.1 nh ngh a b ng đ quy (4/4)

Ví d 5.2.5: T p h p đ nh ngh a b ng đ quy:

 nh ngh a đ quy t p các xâu: Gi s * là t p các xâu trên

b ch cái Khi đó * đ c đ nh ngh a b ng đ quy nh sau:

 *, trong đó là xâu r ng

 wx * n u w * và x *

Trang 15

5.3 Sinh hoán v - Sinh t h p (1/20)

5.3.1 Gi i thi u thu t toán sinh (1/4)

a. Xây d ng m t c u hình t h p ban đ u tho mãn các đi u

ki n đã cho

b. a ra c u hình đã có

c. T các thông tin c a c u hình đã có, xây d ng c u hình

m i c ng tho mãn các đi u ki n đã cho:

 n u sinh đ c c u hình m i ta ti p t c l p l i b c b,

đ c thì d ng l i

Trang 16

5.3 Sinh hoán v - Sinh t h p (2/20)

5.3.1 Gi i thi u thu t toán sinh (2/4)

Gi mã c a ph ng pháp sinh :

void Generate( void ) {

<Xây d ng c u hình ban đ u> ; stop = false;

< a ra c u hình đang có> ; Sinh_K _Ti p;

}

}

Trang 17

5.3 Sinh hoán v - Sinh t h p (3/20)

5.3.1 Gi i thi u thu t toán sinh (3/4)

Ví d 5.3.1 : Li t kê các dãy nh phân có đ dài 3

Trang 18

5.3 Sinh hoán v - Sinh t h p (4/20)

5.3.1 Gi i thi u thu t toán sinh (4/4)

Trong ví d 5.3.1, gi mã thu t toán sinh k ti p đ c mô t trong th t c sau:

void Next_Bit_String( int *B, int n ){

Trang 19

5.3 Sinh hoán v - Sinh t h p (5/20)

5.3.2 Sinh các hoán v (1/9)

 M i ph n t c a t p n ph n t  b t k đ u có th t ng ng m

t-m t v i t p các s nguyên

A = 1, 2, …, n

 li t kê các hoán v c a t p  ta có th sinh ra các hoán v c a

t p A , sau đó thay th các s nguyên b ng các ph n t c a  có

ch s t ng ng

 Ph ng pháp li t kê các hoán v c a t p A đ c s d ng: ph ng

Trang 20

5.3 Sinh hoán v - Sinh t h p (6/20)

5.3.2 Sinh các hoán v (2/9)

Khái ni m v ph ng pháp sinh hoán v theo th t t đi n :

 Hoán v a1a2…an đ c g i là đi tr c (nh h n) hoán v b1b2…bn

Trang 21

5.3 Sinh hoán v - Sinh t h p (7/20)

5.3.2 Sinh các hoán v (3/9)

Ví d 5.3.2:

 Xét t p A = 1, 2, 3, 4, 5, khi đó:

 Hoán v 23145 c a t p là đi tr c hoán v 23514,

 vì nh ng hoán v này trùng nhau hai v trí đ u tiên, nh ng s 1 v trí th ba c a hoán v đ u nh h n s 5 c ng v trí th ba c a hoán

v sau

 Hoán v 41532 là đi tr c 52143

Trang 22

5.3 Sinh hoán v - Sinh t h p (8/20)

5.3.2 Sinh các hoán v (4/9)

Thu t toán sinh ra các hoán v :

Ph ng pháp d a trên vi c xây d ng hoán v k ti p theo th t t đi n c a hoán v cho tr c a 1 a 2 …a n

Phân tích bài toán:

1. Gi s a n-1 < a n, n u đ i ch a n-1a n s nh n đ c hoán v m i đi

ngay sau hoán v đã cho

2. N u a n-1 > a n thì không th nh n đ c hoán v l n h n b ng cách đ i

ch hai s h ng này trong hoán v đã cho

3. V i tr ng h p c a ý 2: xem xét ba s h ng cu i cùng trong hoán

Trang 23

5.3 Sinh hoán v - Sinh t h p (9/20)

5.3.2 Sinh các hoán v (5/9)

Phân tích bài toán (ti p):

4. N u a n-2 < a n-1 thì có th s p x p l i ba s cu i cùng đ có th nh n

đ c m t hoán v m i li n sau hoán v xu t phát Trong hai s a n-1

a n ta ch n s nh h n đ t vào vào v trí n - 2, sau đó đ t s nguyên còn l i và s a n - 2 vào hai v trí cu i cùng theo th t t ng d n

5. N u a n-2 > a n-1 (và a n-1 > a n), thì không th nh n đ c hoán v l n h n

Trang 24

5.3 Sinh hoán v - Sinh t h p (10/20)

5.3.2 Sinh các hoán v (6/9)

1 Tìm c p s nguyên li n k đ u tiên tính t ph i sang bên trái

c a hoán v mà s đ u nh h n s sau, t c là tìm các s nguyên ajaj+1 sao cho aj < aj+1aj+1 > aj+2 > …>an

2 nh n đ c hoán v li n sau, ta đ t vào v trí th j s nguyên

nh nh t trong các s > aj c a t p aj+1, aj+2, …, an, r i li t kê

theo th t t ng d n c a các s còn l i c a a , a , …, a vào

Trang 25

5.3 Sinh hoán v - Sinh t h p (11/20)

5.3.2 Sinh các hoán v (7/9)

Thu t toán sinh hoán v k ti p:

Trang 26

5.3 Sinh hoán v - Sinh t h p (12/20)

Trang 27

5.3 Sinh hoán v - Sinh t h p (13/20)

 Ti p theo, vì 3 > 2 và 1 < 3 nên ph i xét c 3 s trong nhóm hoán v này

 t s nh nh t trong hai s 3 và 2 (s 2) vào v trí th nh t, sau đó là hai s còn l i (1 và 3) vào v trí th 2 và th 3 theo th t t ng d n, t c là ta có 213

 i ch 1 và 3 cho nhau vì 1 < 3 đ c 231 Vì 2 < 3 nên đ c đ t 3 vào v trí đ u tiên và sau đó là 1 và 2, t c là 312

Trang 28

5.3 Sinh hoán v - Sinh t h p (14/20)

 M t xâu nh phân ng v i m t t p con, t i ví trí k , s có s 1 ho c

s 0 tu theo ph n t ak thu c vào t p con đó hay không

 N u có th li t kê t t c các xâu nh phân đ dài n thì ta s nh n

đ c t t c các t p con c a t p n ph n t (và c ng chính là các t

Trang 29

5.3 Sinh hoán v - Sinh t h p (15/20)

5.3.3 Sinh các t h p (2/9)

Gi i thi u chung v sinh các t h p (ti p):

 M t khác, m t xâu nh phân đ dài n c ng là khai tri n nh phân c a m t

Trang 30

5.3 Sinh hoán v - Sinh t h p (16/20)

5.3.3 Sinh các t h p (3/9)

Thu t toán t o t h p ch p k t n ph n t {1, 2,…, n}:

 M i t h p ch p k có th bi u di n b ng m t xâu t ng, do v y có th li t kê các t h p theo th t t đi n

 Theo th t t đi n:

 T h p đ u tiên là (1, 2, , k) và

 T h p cu i cùng là (n-k+1, n-k+2, ,n)

 Gi s (a1a2…ak) là t h p đang có ch a ph i là t h p cu i cùng theo th t

t đi n, có th xây d ng b ng cách th c hi n các quy t c bi n đ i sau đ i v i

t h p đang có:

Trang 31

5.3 Sinh hoán v - Sinh t h p (17/20)

5.3.3 Sinh các t h p (4/9)

Thu t toán li t kê t p con k ti p m ph n t c a t p n ph n t :

void Next_Combination( int *A, int n){

Trang 32

5.3 Sinh hoán v - Sinh t h p (18/20)

5.3.3 Sinh các t h p (7/9)

Ví d 5.3.5:

Tìm xâu nh phân li n sau c a 1 0001 1111

L i gi i:

 Bit đ u tiên t bên ph i sang b ng 0 là bit th 6,

 Thay nó b ng s 1 và 5 bit 1 bên ph i nó đ c thay b ng s 0,

 T đó ta đ c xâu nh phân li n sau c a xâu đã cho là:

1 0010 0000

Trang 33

5.3 Sinh hoán v - Sinh t h p (19/20)

Trang 34

5.3 Sinh hoán v - Sinh t h p (20/20)

Trang 35

5.4 Gi i thu t quay lui Bài toán s p h u (1/15)

5.4.1 Gi i thu t quay lui (1/9)

Trang 36

5.4 Gi i thu t quay lui Bài toán s p h u (2/15)

5.4.1 Gi i thu t quay lui (2/9)

Chú ý:

 i m quan tr ng c a thu t toán là ph i ghi nh t i m i

b c đã đi qua, nh ng kh n ng nào đã th đ tránh trùng

l p

 Nh ng thông tin này c n đ c l u tr theo c c u ng n

x p (stack)

Trang 37

5.4 Gi i thu t quay lui Bài toán s p h u (3/15)

5.4.1 Gi i thu t quay lui (3/9)

Gi mã c a gi i thu t quay lui, xác đ nh ph n t th i:

void Try( int i ) {

int j;

for ( j = 1; j < n i ; j ++) {

if ( <Ch p nh n j >) { <Xác đ nh x i theo j>

if (i==n)

else Try(i+1);

Trang 38

5.4 Gi i thu t quay lui Bài toán s p h u (4/15)

5.4.1 Gi i thu t quay lui (4/9)

Trang 39

5.4 Gi i thu t quay lui Bài toán s p h u (5/15)

5.4.1 Gi i thu t quay lui (5/9)

Ví d 5.4.1 (ti p): Li t kê các dãy nh phân đ dài n

Gi i thích b ng đ th :

Trang 40

5.4 Gi i thu t quay lui Bài toán s p h u (6/15)

5.4.1 Gi i thu t quay lui (6/9)

Ví d 5.4.1 (ti p): Li t kê các dãy nh phân đ dài n

Mã ch ng trình:

#include <conio.h>

#include <iostream>

void Result( int *B, int n){

for ( int i=0;i<n;i++)

cout<< " " <<B[i]<< " " ;

cout<<endl;

}

void Init( int *B, int n){

void Try( int i, int *B, int n){

void main( void ){

Trang 41

5.4 Gi i thu t quay lui Bài toán s p h u (7/15)

5.4.1 Gi i thu t quay lui (7/9)

 Sau khi gán j cho pi c n đ c ghi nh n false cho bj và ph i gán l i

true khi th c hi n xong vi c in giá tr ho c khi th ti p ph ng án m i

Trang 42

5.4 Gi i thu t quay lui Bài toán s p h u (8/15)

5.4.1 Gi i thu t quay lui (8/9)

B[j]=FALSE;

if (i==n) In_K t_Qu ; else Try(i+1);

B[j]=TRUE;

Trang 43

5.4 Gi i thu t quay lui Bài toán s p h u (9/15)

5.4.1 Gi i thu t quay lui (8/9)

Ví d 5.4.2:

Li t kê các hoán v c a {1,2, ,n}

Minh h a b ng đ th :

Trang 44

5.4 Gi i thu t quay lui Bài toán s p h u (10/15)

5.4.1 Gi i thu t quay lui (9/9)

 Các giá tr đ c cho ci : { ci-1+1 , n-k+i }

 đi u này đúng cho c tr ng h p i = 1, c n thêm vào c0 v i

c0 = 0

 Các giá tr đ c này m c nhiên đ c ch p nh n

Trang 45

5.4 Gi i thu t quay lui Bài toán s p h u (11/15)

5.4.1 Gi i thu t quay lui (9/9)

Trang 46

5.4 Gi i thu t quay lui Bài toán s p h u (12/15)

5.4.2 Bài toán s p h u (1/4)

Bài toán: Li t kê t t c các cách x p 8 quân H u trên bàn c 8x8

sao cho chúng không n đ c l n nhau

Trang 47

5.4 Gi i thu t quay lui Bài toán s p h u (13/15)

5.4.2 Bài toán s p h u (2/4)

M t vài cách đ t 8 con h u lên bàn c (trong s 92 l i gi i)

Trang 48

5.4 Gi i thu t quay lui Bài toán s p h u (14/15)

Trang 49

5.4 Gi i thu t quay lui Bài toán s p h u (15/15)

Trang 50

5.5 Bài t p ch ng 5

Bài 1 Li t kê t t c các t p con c a t p 1, 2, ,n

Bài 2 Li t kê t t c các xâu nh phân đ dài n có t ng các bít 1 đúng b ng

Ngày đăng: 06/12/2015, 20:49

TỪ KHÓA LIÊN QUAN

w