Hình 2.1.7.1.1: Lưu đồ giải thuật xác định hệ số chia tối ưu
Giải thuật này nhằm xác định hệ số chia tối ưu cho bài toán Tháp Hà Nội với bốn cọc. Giải thuật này sẽ nhận vào một giá trị n (là số lượng đĩa) rồi xét n có phải là
32 GVHD: ThS. Võ Huỳnh Trâm SVTH: Nguyễn Thanh Phi
số tam giác hay không. Để hiểu rõ hơn về giải thuật này, ta sẽ tìm hiểu về tam giác Pascal. p x 2 3 4 5 6 7 8 0 1 1 1 1 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1 5 1 5 10 10 5 1 6 1 6 15 20 15 6 1 ..
Ta có thể thấy rằng với p = 3 (trường hợp 3 cọc) thì n = 1, 2, 3,… đều là số tam giác. Ngược lại với trường hợp 4 cọc tương ứng với p = 4 thì chỉ có các giá trị 1, 3, 6, 10, 15, .. là số tam giác.
Theo thuật toán Frame-Stewart thì hệ số chia tối ưu sẽ phụ thuộc và số đĩa. Nghĩa là phụ thuộc vào n có phải là số tam giác hay không. Như vậy, đối với giải thuật xác định hệ số chia tối ưu ta cần lưu một mảng giá trị arrayPascal là giá trị của các số tam giác trong trường hợp bốn cọc.
arrayPascal [] = {0, 0, 1, 3, 6, 10, 15, 21} Ý nghĩa của giải thuật:
Duyệt qua từng phần tử của mảng arrayPascal nếu n bằng một giá trị trong mảng thì n là số tam giác nên sẽ trả về số chia tối ưu là n − i + 1
Ngược lại, nếu arrayPascal > n đồng nghĩa với x(x−1)
2 < n <x(x+1)
2 thì trả về giá trị số chia tối ưu n − i + 2
33 GVHD: ThS. Võ Huỳnh Trâm SVTH: Nguyễn Thanh Phi