1. Trang chủ
  2. » Công Nghệ Thông Tin

Mathematics for the analysis of algorithms

10 16 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 344,92 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong thuật toán “sắp xếp sủi bọt”, ta có một danh sách gồm n số phân biệt (để đơn giản ta xét ntập n số nguyên dương đầu tiên) cần được sắp xếp theo thứ tự (tăng). Trước hết ta so sánh hai số đầu tiên, nếu chúng không theo thứ tự thì ta đổi chỗ cho nhau để được thứ tự mong muốn. Tiếp theo ta so sánh số thứ hai và thứ ba với nhau rồi đổi chỗ nếu cần thiết, và cứ tiếp tục như thế

Trang 1

MỘT VÍ DỤ NHỎ về ỨNG DỤNG của

HÀM SINH trong PHÂN TÍCH THUẬT TOÁN

Nguyễn An Khương

1 Trong thuật toán “sắp xếp sủi bọt”, ta có

một danh sách gồm n số phân biệt (để đơn giản ta xét [n]-tập n số nguyên dương đầu

tiên) cần được sắp xếp theo thứ tự (tăng)

Trước hết ta so sánh hai số đầu tiên, nếu chúng không theo thứ tự thì ta đổi chỗ cho nhau để được thứ tự mong muốn Tiếp theo

ta so sánh số thứ hai và thứ ba với nhau rồi đổi chỗ nếu cần thiết, và cứ tiếp tục như thế

Sau n − 1 lần so sánh, ta quay lại đầu danh

sách và tiếp tục quy trình trên

Trang 2

Bài toán: Trong số n! hoán vị của n số phân

biệt có bao nhiêu trường hợp ta thu được thứ

tự như mong muốn ngay trong lượt đầu tiên?

Lời giải Ta sẽ giải bài toán tổng quát hơn,

với 𝑘 ≤ 𝑛, ta sẽ chứng tỏ rằng số hoán vị

sao cho sau không quá k lượt xếp bằng thuật

toán sắp xếp sủi bọt ta sẽ thu được thứ tự cần thiết là

1 2 3    k k 1 n k !k k1)n k (1.1)

Xét một hoán vị a1a2 · · · a n của [n], và ta sẽ

xem liệu nó có thể được xếp sau ≤ k lượt hay không Lưu ý rằng ta có thể đẩy a n về

phía trước tối đa k lần Do đó, nếu a n <

n−k, thì dĩ nhiên ta không thể xếp xong sau

Trang 3

k lượt

Bây giờ giả sử a n ≥ n−k Trước hết ta chứng tỏ

rằng a1a2 · · · a n được xếp xong sau không quá

k lượt khi và chỉ khi a1a2 · · · a n-1 cũng được

xếp xong sau không quá k lượt

Đặt a n =n–t, với 1≤ t ≤ k Gọi 𝑎1𝑖 𝑎2𝑖 … 𝑎𝑛−1𝑖 là

kết quả sau lượt xếp thứ i của a1a2 · · · a n-1 Khi

đó, sau lượt đầu trên n-1 phần tử đầu tiên a1

a n−1, ta thu được 𝑎11𝑎21 … 𝑎𝑛−11 a n, và trong phép so sánh cuối cùng của lượt này ta so

𝑎𝑛−11 với a n, ta có 𝑎𝑛−11 = 𝑛 nên 𝑎𝑛−11 và a n đổi chỗ cho nhau

𝑎11𝑎21 … 𝑎𝑛−21 (𝑛 − 𝑡)𝑛

Trang 4

Tương tự, sau lượt 2 ta có

𝑎12𝑎22 … 𝑎𝑛−32 (𝑛 − 𝑡)(𝑛 − 1)𝑛

Cứ tiếp tục như thế, sau t lượt ta có

𝑎1𝑡𝑎2𝑡 … 𝑎𝑛−𝑡−1𝑡 (𝑛 − 𝑡)(𝑛 − 𝑡 + 1) … (𝑛 − 1)𝑛

Sau đó, thực hiện tiếp k – t lượt còn lại ta sẽ thu được

𝑎1𝑘𝑎2𝑘 … 𝑎𝑛−𝑡−1𝑘 (𝑛 − 𝑡)(𝑛 − 𝑡 + 1)(𝑛 − 1)𝑛

Vậy ta thấy rằng a1a2 · · · a n được xếp xong sau

≤k lượt khi và chỉ khi a1a2 · · · a n-1 cũng được

xếp xong sau ≤ k lượt và a n ≥ n−k

Gọi 𝑆𝑛𝑘 là số hoán vị sao cho sau không quá

k lượt xếp trong sắp xếp sủi bọt ta sẽ thu

được thứ tự cần thiết Ta mô tả một hoán vị thỏa mãn điều này như sau

Trang 5

Một hoán vị như thế có thể xây dựng được

bằng cách chọn a n là một trong số min(k +

1, n) phần tử {n − k, n − k + 1, , n}, và với mỗi cách chọn được a n như thế ta phải

chọn một hoán vị xếp được sau k lượt của

n – 1 phần tử còn lại

Vậy ta có 𝑆𝑛𝑘 = (𝑘 + 1)𝑆𝑛−1𝑘 với n ≥ k + 1

và thu được (1.1)

2 Trong thuật toán sắp xếp “cocktail-shaker (trộn/lắc?)”, ta thực hiện từng lượt cũng giống như trong sắp xếp sủi bọt nhưng ngay sau khi kết thúc mỗi lượt ta bắt đầu lượt kế tiếp theo chiều ngược lại kể từ vị trí ngay trước khi kết thúc lượt đó Chẳng hạn sau khi kết thúc lượt

đầu, ta so sánh hai số ở vị trí thứ (n − 2) và thứ

Trang 6

(n − 1) với nhau; tiếp theo đó, so sánh các số

ở vị trí (n − 3) và vị trí (n − 2) với nhau; và cứ

tiếp tục như thế

Bài toán: Gọi 𝑥𝑛 là số trường hợp trong số

n! hoán vị của n số phân biệt sao cho chỉ trong

2 lượt sắp ngược chiều nhau ta thu được thứ

tự như mong muốn Hãy tìm công thức truy hồi và công thức tường minh cho 𝑥𝑛 nếu

x 1 =1

Lời giải Xét một hoán vị a1a2 · · · a n of [n],

và ta sẽ chia thành 2 trường hợp, tùy theo

giá trị của a1 Nếu a1 = 1 thì a1a2 · · · a n được

xếp xong sau 2 lượt ngược chiều nhau nếu như

hoán vị a2 · · · a n của n-1 phần tử còn lại cũng

thế Vậy ta có x n−1 hoán vị thỏa mãn yêu cầu trong trường hợp này

Trang 7

Bây giờ xét a1 = t, với t > 1 Giả sử rằng các số a2, · · ·, a i đều không lớn hơn t và

a i+1 >t Khi đó trong lượt xếp đầu thì t bị

đẩy về phía sau đúng i − 1 lần, đến vị trí thứ i Trong lượt xếp ngựợc lại, t di chuyển

0 hoặc thêm 1 lần nữa Vậy ta chỉ có được

phép sắp xếp mong muốn nếu i = t, hoặc i

= t-1 (hay t=i+1) Ta xét hai trường hợp con

như sau

a) Xét i = t

Lượt xếp đầu sẽ bắt đầu đẩy t sang phải để

có a2a3 · · · a t ta t+1 · · · a n Sau đó ta thực hiện

sắp xếp hai lượt ngược chiều đối với a t+1 · ·

· a n Có x n−t hoán vị như thế Cuối cùng, ta chỉ còn cần sắp nổi bọt một lượt trên a2a3 · · ·

a t Theo Bài toán 1 có 2t−2 hoán vị như thế

Trang 8

(thay k=1 và n=t-1 vào (1.1)) Vậy trong

trường hợp này ta có 2t−2

x n−t hoán vị

b) Xét i = t-1 (hay t=i+1)

Chọn

u ∈ {1, 2,· · · , t−1}\{a2, a3, · · · , a t−1} Khi đó lượt đầu cho ta

a2a3 · · · a t−1 ta t · · · a n Sau đó sẽ thực hiện hai lượt ngược chiều

trên a t · · · a n Khi kết thúc, vị trí của t (vị trí thứ t-1) giờ sẽ là phần tử u Cho nên u đổi chỗ với t (sau 2 lượt, khi kết thúc)

Cuối cùng ta thực hiện một lượt xếp nổi

bọt còn lại đối với a2a3 · · · a t−1 u Có 2 t-2

cách thực hiện điều này

Ta có thể lầm rằng sẽ có x n−t+1 cách để xếp

Trang 9

được a t · · ·a n sau hai lượt ngược chiều Tuy nhiên lưu ý rằng ta chỉ tính những

cách mà a t khác với u; trường hợp a t =

u đã được tính vào trong trường hợp a)

rồi

Số trường hợp mà ta phải loại ra chính là

số trường hợp mà trong đó a t = u và a t+1 ·

· · a n có thể được xếp sau 2 lượt ngược

chiều nhau, nó chính bằng x n−t Vậy

trường hợp này có 2 t-2 (x n−t+1 − x n−t )

hoán vị thỏa yêu cầu

Vậy ta có tổng cộng

x n =𝑥𝑛−1 + ∑𝑛𝑡=2 2𝑡−2(𝑥𝑛−𝑡 +

𝑥𝑛−𝑡+1 − 𝑥𝑛−𝑡)

=𝑥𝑛−1 + ∑𝑛𝑡=2 2𝑡−2𝑥𝑛−𝑡+1

Trang 10

=2x n−1 + 2x n−2 + 4x n−3 + 8x n−4 +

16x n−5 + · · · +2n-2x1

Để tìm công thức tường minh cho x n ta xét hàm sinh F(z) của nó Từ hệ thức truy hồi trên, ta có

𝐹(𝑧) = 𝑧𝐹(𝑧)

+ (𝑧 + 2𝑧2 + 4𝑧3 + 8𝑧4 + 16𝑧5 + ⋯ )𝐹(𝑧) + 1

Cho nên

1 − 4𝑧 + 2𝑧2

= 1

2 (

1

1 − 𝛼𝑧 −

1

1 − 𝛽𝑧), với 𝛼, 𝛽 là hai nghiệm của 1 − 4𝑧 + 2𝑧2 Vậy 𝑥𝑛 = 𝛼𝑛+𝛽𝑛

2

Ngày đăng: 13/01/2021, 21:14