You are on page 1of 4

CSCE 411

Decrease-and-Conquer

4.1 Sắp Xếp Chèn


Đối với thuật toán này chúng ta áp dụng kỹ thuật sắp xếp giảm dần một mảng A[0..n-
1]. Theo kỹ thuật này giả sứ vấn đề nhỏ hơn của việc sắp xếp mảng A[0..n-2] đã được
sắp xếp có kích thước n-1. A [0] ≤ ... ≤ A [n - 2]. Làm thế nào chúng ta có thể tận dụng
của giải pháp này cho vấn đề nhỏ hơn để có được giải pháp cho vấn đề ban đầu bằng cách
tính đến yếu tố A [n - 1]. Điều này thường được thực hiện bằng cách quét các phân đoạn
được sắp xếp từ phải sang trái cho đến khi phần tử đầu tiên nhỏ hơn hoặc bằng A [n - 1]
được bắt gặp để chèn A [n - 1] ngay sau yếu tố đó. Thuật toán kết quả được gọi là sắp xếp
chèn thẳng hoặc đơn giản là sắp xếp chèn.
Đầu vào: Dãy A[0..n − 1] gồm n phần tử theo thứ tự
Đầu ra: Dãy A[0..n − 1] được sắp xếp theo thứ tự không tăng
Thuật toán:
for i ← 1 to n − 1 do
v ← A[i]
j←i−1
while j ≥ 0 and A[j ] > v do
A[j + 1]← A[j ]
j←j−1
A[j + 1] ← v

4.2 Sắp Xếp Tô-Pô


Chúng ta thảo luận về một vấn đề quan trọng đối với đồ thị có hướng, với một nhiều
ứng dụng liên quan đến các nhiệm vụ hạn chế tiên quyết. Trước khi đặt ra vấn đề ta xét
vài sự kiện cơ bản về bản đồ có hướng. Một biểu đồ có hướng, là một biểu đồ với các
hướng được chỉ định cho tất cả các cạnh của nó.Danh sách ma trận kề và danh sách kề
vẫn còn hai phương tiện chính để đại diện cho một máy in. Chỉ có hai đáng chú ý sự khác
nhau giữa các đồ thị vô hướng và hướng trong việc biểu diễn chúng:
(1)ma trận kề của một đồ thị có hướng không phải đối xứng;
(2) một cạnh trong một đồ thị có hướng chỉ có một (không phải hai) nút tương ứng trong
sơ đồ khai thác danh sách kề.

pg. 1
CSCE 411
Decrease-and-Conquer

4.3 Các Thuật Toán Để Tạo Các Đối Tượng Kết Hợp
Tạo hoán vị
Ta giả định tập hợp bên dưới có các phần tử cần hoán vị chỉ đơn giản là tập hợp các
số nguyên từ 1 đến n; tổng quát hơn,có thể được hiểu là chỉ số của các phần tử trong tập
hợp phần tử n {a1, ..., an}. Kỹ thuật giảm dần sẽ gợi ý vấn đề gì tạo ra tất cả n! hoán vị
của {1, ..., n}? Vấn đề nhỏ hơn là tạo ra tất cả (n - 1)! hoán vị. Giả sử rằng vấn đề nhỏ
hơn được giải quyết, chúng ta có thể có được một giải pháp cho giải pháp lớn hơn bằng
cách chèn n vào mỗi n có thể vị trí giữa các phần tử của mọi hoán vị của n - 1 phần tử.
Tất cả các hoán vị thu được trong thời trang này sẽ khác biệt .Và tổng số của chúng sẽ
được n (n - 1)! = n!. Do đó, chúng tôi sẽ có được tất cả các hoán vị của {1, ..., n}. Ta chèn
n trong các hoán vị được tạo trước đó từ trái sang phải hoặc phải sang trái. Nó chỉ ra rằng
có ích khi bắt đầu với việc chèn n vào 12. . . (n - 1) bằng cách di chuyển từ phải sang trái
và sau đó chuyển hướng mỗi khi mới hoán vị của {1, ..., n - 1} cần được xử lý.

Tạo các tập con


Chúng ta thảo luận về các thuật toán để tạo tất cả các tập con 2n của tập trừu tượng
A = {a1, ..., an}.Ý tưởng giảm dần có thể áp dụng ngay cho vấn đề này. Tất cả các tập
hợp con của A = {a1, ..., an} được chia thành hai nhóm: những nhóm không chứa một và
những người làm. Nhóm cũ không là gì ngoài tất cả các tập hợp con của {a1, ..., một −
1}, trong khi mọi yếu tố sau này có thể được lấy bằng thêm một tập hợp con của {a1, ...,
một − 1}. Vì vậy, một khi chúng ta có một danh sách tất cả các tập hợp con của {a1, ...,
một 1}, chúng ta có thể nhận được tất cả các tập hợp con của {a1, ..., an} bằng cách thêm
vào danh sách tất cả các yếu tố của nó với một đặt vào mỗi trong số họ.
Tương tự chúng ta không phải tạo ra các bộ năng lượng của bộ nhỏ hơn. Một cách
thuận tiện để giải quyết vấn đề trực tiếp dựa trên sự tương ứng một chiều giữa tất cả các
tập con 2n của một phần tử n tập A = {a1, ..., an}

4.4 Các Thuật Toán Giảm Dần Theo Yếu Tố Liên Tục
Tìm kiếm nhị phân
Tìm kiếm nhị phân là một thuật toán hiệu quả đáng kể để tìm kiếm trong một mảng
được sắp xếp. Nó hoạt động bằng cách so sánh khóa tìm kiếm K với phần tử trung gian

pg. 2
CSCE 411
Decrease-and-Conquer
mảng A [m]. Nếu họ phù hợp, thuật toán dừng lại; mặt khác, hoạt động tương tự được lặp
lại đệ quy cho nửa đầu của mảng nếu K <A [m] và cho nửa sau nếu K>A [m].
Thuật toán Brinary search (A [0..n - 1], K)
+ Thực hiện tìm kiếm nhị phân không lợi nhuận
+Đầu vào: Một mảng A [0..n - 1] được sắp xếp theo thứ tự tăng dần và khóa tìm kiếm K
+ Kq: Một chỉ mục của phần tử mảng bằng K hoặc −1 nếu không có phần tử như vậy.

Vấn Đề Đồng Xu Giả


Trong số n đồng tiền trông giống nhau, một là giả. Với thang điểm cân bằng,
chúng ta có thể so sánh bất kỳ hai bộ tiền xu. Đó là, bằng cách nghiêng sang trái, sang
phải hoặc giữ nguyên, cân bằng tỷ lệ sẽ cho biết các bộ có trọng lượng như nhau hay bộ
nào nặng hơn cái khác nhưng không bao nhiêu Vấn đề là thiết kế một thuật toán hiệu quả
để phát hiện tiền giả. Một phiên bản dễ dàng hơn của vấn đề mà người mà chúng ta thảo
luận .Giả sử giả định rằng đồng tiền giả được biết là, nhẹ hơn so với tiền thật một.Ý
tưởng tự nhiên nhất để giải quyết vấn đề này là chia n xu thành hai mỗi đống n / 2 xu, để
lại một đồng xu thừa nếu n là số lẻ và đặt hai đồng xu cọc trên thang đo. Nếu các cọc
nặng như nhau, đồng xu đặt sang một bên phải là giả. Trường hợp xấu quá thì ta nên
dung thuật toán :
W (n) = W (n/2) + 1 for n > 1, W(1) = 0.

Phép nhân nông dân Nga


Bây giờ chúng tôi xem xét một thuật toán phi chính thống để nhân hai số nguyên
dương gọi là phép nhân `a la russe hoặc phương pháp nông dân Nga. Cho n và m là số
nguyên dương có sản phẩm chúng tôi muốn tính toán và để chúng tôi đo lường kích
thước cá thể bằng giá trị của n. Bây giờ, nếu n chẵn, một thể hiện của một nửa kích thước
có để giải quyết n / 2 và chúng tôi có một công thức rõ ràng liên quan đến giải pháp cho
vấn đề lớn hơn đối với giải pháp cho vấn đề nhỏ hơn: n.m=n/2.(2n)
Nếu n là số lẻ, chúng ta chỉ cần điều chỉnh một chút công thức này:n.m=(n-1)/2.2n+m.

pg. 3
CSCE 411
Decrease-and-Conquer

Vấn đề Josephus
Vấn đề là một người nổi tiếng Nhà sử học người Do Thái tham gia và ghi lại
cuộc nổi dậy của người Do Thái chống lại người La Mã. Và cuộc chiến thua có hơn 40
người chết hãy xác định số người sống xót thứ j. Vì vậy, hãy để n người được đánh số từ
1 đến n đứng thành một vòng tròn. Bắt đầu đếm số nghiệt ngã với người số 1, chúng tôi
loại bỏ mọi người thứ hai cho đến khi chỉ còn một người sống sót.
+Nếu n là chẵn, tức là, n = 2k : J (2k) = 2J (k) − 1.
+Trường hợp của một số lẻ n (n> 1), tức là, n = 2k + 1 : J (2k + 1) = 2J (k) + 1.

4.5 Variable-Size-Decrease Algorithms


Tính toán một trung vị và vấn đề lựa chọn
Thời gian của một thuật toán được xác định bởi hiệu quả của thuật toán sắp xếp được sử
dụng. Do đó, với một thuật toán sắp xếp nhanh chẳng hạn như mergesort (được thảo luận
trong chương tiếp theo), hiệu quả của thuật toán là trong O (n log n).

Tìm kiếm nội suy


Tìm kiếm nội suy tính đến giá trị của khóa tìm kiếm để tìm phần tử mảng mảng để được
so sánh với khóa tìm kiếm

Tìm kiếm và chèn trong cây tìm kiếm nhị phân


Viết một phương trình chuẩn cho đường thẳng đi qua điểm (l, A [l]) và (r, A [r]), thay thế
v cho y và giải nó cho x dẫn đến công thức sau:

Trò Chơi của Nim


Có một số trò chơi nổi tiếng chia sẻ các tính năng sau. Có hai người chơi, người lần lượt
di chuyển. Không có thông tin ngẫu nhiên hoặc ẩn được cho phép:tất cả người chơi biết
tất cả thông tin về trò chơi. Một trò chơi là vô tư: mỗi người chơi có cùng một động thái
có sẵn từ cùng một vị trí trò chơi. Mỗi cái hữu hạn số lượng di chuyển có sẵn dẫn đến
một phiên bản nhỏ hơn của cùng một trò chơi. Trò chơi kết thúc với một chiến thắng bởi
một trong những người chơi (không có ràng buộc). Người chiến thắng là người chơi cuối
cùng có khả năng di chuyển.

pg. 4

You might also like