Tải bản đầy đủ (.pdf) (6 trang)

Slide thuật toán ứng dụng chương 5 phần 2 quy hoạch động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (177.61 KB, 6 trang )

.c
om

an

co

ng

THUẬT TOÁN ỨNG DỤNG

cu

u

du
o

ng

th

QUY HOẠCH ĐỘNG
Range Minimum Query

Phạm Quang Dũng
Bộ môn KHMT

1

CuuDuongThanCong.com



/>

.c
om

Bài toán Range Minimum Query
RMQ
 Cho dãy a[0], a[1], …, a[N-1]. Với mỗi bộ chỉ số 0 ≤ i < j

2
6

3
1

4
6

5
8

6
7

th

1
4


7
3

8
3

9
5

10 11 12
8 9 1

du
o

ng

0
2

an

co

ng

≤ N -1, hãy thực hiện truy vấn RMQ(i, j) tìm và trả về
chỉ số của phần tử nhỏ nhất trong dãy con a[i],
a[i+1],…, a[j].


cu

u

RMQ(1,7) = 3
RMQ(6,11) = 7

2

CuuDuongThanCong.com

/>

.c
om

Bài toán Range Minimum Query
RMQ
 Ký hiệu M[j, i] là chỉ số phần tử nhỏ nhất của dãy a[i],

7

8

9

10

11


12

13

14

15

3

an

3

5

8

9

1

2

6

4

ng


6

7

8

9

10

11

12

13

14

15

5

6

7

8

9


10

11

12

13

14

15

cu

1

2

3

4

5

6

2

4


6

1

6

8

0

1

2

3

4

5

0

0

1

2

3


4

1

0

1

3

3

4

6

7

8

8

9

10

12

12


13

15

-

2

3

3

3

3

7

8

8

8

8

12

12


12

12

-

-

-

3

3

3

3

3

8

12

12

12

12


-

-

-

-

-

-

-

4

12

-

-

-

-

-

-


-

-

-

-

-

-

-

-

-

7

u

du
o

th

0

co


ng

a[i+2],…, a[i+2j -1] (dãy bắt đầu từ chỉ số i và có độ dài
là 2j).

3

CuuDuongThanCong.com

/>

.c
om

Bài toán Range Minimum Query
RMQ
 Bài toán con nhỏ nhất M[0,i] = i, i = 0,…, N-1

co

M[j-1,i] nếu a[M[j-1,i]] < a[M[j-1,i+2j-1]
M[j-1,i+2j-1], ngược lại

th

an

 M[j,i] =


ng

 Công thức truy hồi

i

i + 2j-1

i + 2j - 1

cu

u

du
o

ng

i+2j-1 -1

M[j-1,i + 2j-1]

M[j-1,i]

4

M[j, i]
CuuDuongThanCong.com


/>

preprocessing(){

ng

for (i = 0; i < N; i++) M[0,i] = i;

.c
om

Bài toán Range Minimum Query
RMQ

co

for (j = 0; 2j ≤ N; j++){

an

for(i = 0; i + 2j -1 < N; i++){

ng

M[j,i] = M[j-1,i];

th

if a[M[j-1,i]] < a[M[j-1,i+2j-1]] then{


du
o

}else{

}

cu

}

u

M[j,i] = M[j-1,i+2j-1];

}
}
5

CuuDuongThanCong.com

/>

.c
om

Bài toán Range Minimum Query
RMQ
 Truy vấn RMQ(i,j)


ng

 k = [log(j-i+1)]

co

 RMQ(i,j) = M[k,i] nếu a[M[k,i]] ≤ a[M[k, j-2k+1]]

ng

th

an

M[k, j-2k+1]], ngược lại
 RMQ(4,14) = ?

du
o

 k = [log(14-4+1)]=3

 a[7] > a[12]  RMQ(4,14) = 12
0

1

cu

u


M[3,7] = 12

2

3

4

5

6

7

8

9

10

11

12

13

14

15


2

4

6

1

6

8

7

3

3

5

8

9

1

2

6


4

6

M[3,4] = 7
CuuDuongThanCong.com

/>


×