Bài giảng chuyên đề Một số thuật toán tổ hợp: Xếp đặt và hoán vị đưa ra một số bài toán về xếp đặt, các khái niệm cơ bản, thuật toán quay lui, thuật toán đệ quy, thuật toán Heap, thuật toán Steinhauss–Johnson–Trotter của hoán vị.
xếp đặt hoán vị Bài giảng chuyên đề “Một số thuật toán tổ hợp” Lê Hồng Phương1 Khoa Toán–Cơ–Tin học Trường Đại học Khoa học Tự nhiên, ĐHQG Hà Nội 07/2012 Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật tốn Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật tốn Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật tốn Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật tốn Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 / 70 Thuật toán Steinhauss–Johnson–Trotter Cấu trúc đệ quy: Chuỗi hoán vị n phần tử sinh từ chuỗi hốn vị n − phần tử cách đặt phần tử thứ n vào vị trí chuỗi hốn vị theo cách sau: Nếu hốn vị n − phần tử hốn vị chẵn phần tử thứ n đặt vào vị trí theo thứ tự giảm dần, từ n tới 1; Nếu hoán vị n − phần tử hốn vị lẻ phần tử thứ n đặt vào vị trí theo thứ tự tăng dần, từ tới n Lê Hồng Phương (HUS, VNU) 07/2012 60 / 70 Thuật toán Steinhauss–Johnson–Trotter Ta giả sử phần tử số nguyên dương Từ hoán vị với phần tử ta đặt vào vị trí theo thứ tự giảm dần để lập hoán vị hai phần tử: 2 Sau đó, ta đặt phần tử vào vị trí khác hốn vị này, theo thứ tự giảm dần với hoán vị (1, 2) theo thứ tự tăng dần với hoán vị (2, 1): 1 3 2 Lê Hồng Phương (HUS, VNU) 3 2 1 07/2012 61 / 70 Thuật toán Steinhauss–Johnson–Trotter Ở bước tiếp theo, phần tử đặt vào hoán vị (1, 2, 3) theo thứ tự giảm dần, đặt vào hoán vị (1, 3, 2) theo thứ tự tăng dần, đặt vào hoán vị (3, 1, 2) theo thứ tự giảm dần Việc đặt phần tử tiếp tục theo cách vậy, luân phiên thứ tự tăng dần giảm dần, áp dụng cho giá trị n lớn Như vậy, hốn vị đứng sau khác với hốn vị trước di chuyển phần tử thứ n, thay đổi hai phần tử nhỏ n dãy hoán vị gồm n − phần tử trước Trong hai trường hợp này, khác hai hoán vị trước sau hốn đổi vị trí hai phần tử kề Lê Hồng Phương (HUS, VNU) 07/2012 62 / 70 Thuật toán Steinhauss–Johnson–Trotter Ở bước tiếp theo, phần tử đặt vào hoán vị (1, 2, 3) theo thứ tự giảm dần, đặt vào hoán vị (1, 3, 2) theo thứ tự tăng dần, đặt vào hoán vị (3, 1, 2) theo thứ tự giảm dần Việc đặt phần tử tiếp tục theo cách vậy, luân phiên thứ tự tăng dần giảm dần, áp dụng cho giá trị n lớn Như vậy, hốn vị đứng sau khác với hốn vị trước di chuyển phần tử thứ n, thay đổi hai phần tử nhỏ n dãy hoán vị gồm n − phần tử trước Trong hai trường hợp này, khác hai hoán vị trước sau hốn đổi vị trí hai phần tử kề Lê Hồng Phương (HUS, VNU) 07/2012 62 / 70 Thuật toán Steinhauss–Johnson–Trotter Ở bước tiếp theo, phần tử đặt vào hoán vị (1, 2, 3) theo thứ tự giảm dần, đặt vào hoán vị (1, 3, 2) theo thứ tự tăng dần, đặt vào hoán vị (3, 1, 2) theo thứ tự giảm dần Việc đặt phần tử tiếp tục theo cách vậy, luân phiên thứ tự tăng dần giảm dần, áp dụng cho giá trị n lớn Như vậy, hốn vị đứng sau khác với hốn vị trước di chuyển phần tử thứ n, thay đổi hai phần tử nhỏ n dãy hoán vị gồm n − phần tử trước Trong hai trường hợp này, khác hai hoán vị trước sau hốn đổi vị trí hai phần tử kề Lê Hồng Phương (HUS, VNU) 07/2012 62 / 70 Thuật toán Steinhauss–Johnson–Trotter Ở bước tiếp theo, phần tử đặt vào hoán vị (1, 2, 3) theo thứ tự giảm dần, đặt vào hoán vị (1, 3, 2) theo thứ tự tăng dần, đặt vào hoán vị (3, 1, 2) theo thứ tự giảm dần Việc đặt phần tử tiếp tục theo cách vậy, luân phiên thứ tự tăng dần giảm dần, áp dụng cho giá trị n lớn Như vậy, hốn vị đứng sau khác với hốn vị trước di chuyển phần tử thứ n, thay đổi hai phần tử nhỏ n dãy hoán vị gồm n − phần tử trước Trong hai trường hợp này, khác hai hoán vị trước sau hốn đổi vị trí hai phần tử kề Lê Hồng Phương (HUS, VNU) 07/2012 62 / 70 Thuật tốn Steinhauss–Johnson–Trotter Ta viết hàm đệ quy đơn giản để cài đặt thuật toán Nhưng hàm khơng hiệu có độ phức tạp thời gian không gian lớn: Các cấu trúc hoán vị trung gian bị lặp lại nhiều lần; Để sinh hoán vị cấp n cần sinh trước hốn vị cấp n − Vì vậy, ta cài đặt thuật tốn phương pháp lặp thay đệ quy Lê Hồng Phương (HUS, VNU) 07/2012 63 / 70 Thuật toán Steinhauss–Johnson–Trotter Steinhauss, Johnson Trotter độc lập đề xuất thuật toán sinh hoán vị n phần tử phương pháp hoán đổi Mỗi phần tử (số nguyên) dãy hốn vị gắn thêm thơng tin hướng di chuyển Hướng di chuyển nhận hai giá trị logic ứng với “trái” “phải” Nếu hướng di chuyển số k sang trái ta viết k; hướng sang phải ta viết k Lê Hồng Phương (HUS, VNU) 07/2012 64 / 70 Thuật toán Steinhauss–Johnson–Trotter Một số nguyên có hướng gọi di động lớn số bên cạnh theo chiều di chuyển Thuật tốn Steinhauss–Johnson–Trotter: Khởi tạo hốn vị · · · n; Chừng tồn số nguyên di động: Tìm số ngun di động k lớn nhất; Hốn đổi k với số nguyên bên cạnh theo chiều di chuyển k; Đảo chiều di chuyển số nguyên lớn k Các hoán vị ba phần tử 1 3 3 2 Lê Hồng Phương (HUS, VNU) sinh thuật toán này: 3 2 2 1 1 07/2012 65 / 70 Thuật toán Steinhauss–Johnson–Trotter Các hoán vị phần tử sinh thuật toán sau: 4 3 2 1 3 2 1 3 2 1 4 2 1 3 4 4 1 3 2 2 1 1 4 3 4 Lê Hồng Phương (HUS, VNU) 07/2012 66 / 70 Bài tập Bài tập Viết chương trình cài đặt thuật tốn Steinhauss–Johnson–Trotter Input: Một số tự nhiên n < 20 Output: Mọi hoán vị dãy n Bài tập 10 Sử dụng chương trình tìm dấu hốn vị viết Bài tập để kiểm tra xem hốn vị thu từ chương trình cài đặt thuật tốn Steinhauss–Johnson–Trotter có đổi dấu ln phiên hay khơng Input: Các hoán vị sinh thuật toán S–J–T Output: Các dấu ứng với hoán vị Lê Hồng Phương (HUS, VNU) 07/2012 67 / 70 Bài tập Bài tập 11 (Bài toán xếp hậu) Cho bàn cờ vua kích thước n × n Hãy tìm cách xếp n quân hậu bàn cờ cho không quân khơng chế qn khác Ví dụ, với n = 4, ta có cách xếp hậu sau: • • • • Mỗi cột bàn cờ chứa quân hậu nên cách xếp hậu tương ứng với dãy số nguyên a[1 n], a[j] = i hậu thứ j đặt hàng thứ i Cách xếp hậu ứng với dãy a[1 4] = (3, 1, 4, 2) Đây hoán vị dãy (1, 2, 3, 4) Quy việc tìm cách xếp hậu việc tìm hốn vị dãy (1, 2, , n) thỏa mãn điều kiện toán Lê Hồng Phương (HUS, VNU) 07/2012 68 / 70 Bài tập Bài tập 11 (Bài toán xếp hậu) Cho bàn cờ vua kích thước n × n Hãy tìm cách xếp n quân hậu bàn cờ cho không quân không chế quân khác Ví dụ, với n = 4, ta có cách xếp hậu sau: • • • • Mỗi cột bàn cờ chứa quân hậu nên cách xếp hậu tương ứng với dãy số nguyên a[1 n], a[j] = i hậu thứ j đặt hàng thứ i Cách xếp hậu ứng với dãy a[1 4] = (3, 1, 4, 2) Đây hoán vị dãy (1, 2, 3, 4) Quy việc tìm cách xếp hậu việc tìm hốn vị dãy (1, 2, , n) thỏa mãn điều kiện toán Lê Hồng Phương (HUS, VNU) 07/2012 68 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật tốn Steinhauss–Johnson–Trotter Tóm lược Lê Hồng Phương (HUS, VNU) 07/2012 69 / 70 Tóm lược Các nội dung giảng: Ba tốn xếp, tính số cách xếp tương ứng Các khái niệm bản: hốn vị, nghịch thế, tính chẵn lẻ hốn vị Bốn thuật toán sinh hoán vị n phần tử: Thuật Thuật Thuật Thuật toán toán toán toán quay lui đệ quy Heap Steinhauss–Johnson–Trotter Các tập lập trình để hiểu rõ củng cố kiến thức Lê Hồng Phương (HUS, VNU) 07/2012 70 / 70 ... Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược... Phương (HUS, VNU) 07/2012 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược... Phương (HUS, VNU) 07/2012 13 / 70 Nội dung Xếp đặt Bài toán Bài toán Bài toán Hoán vị Các khái niệm Thuật toán quay lui Thuật toán đệ quy Thuật toán Heap Thuật toán Steinhauss–Johnson–Trotter Tóm lược