Lý do chọn đề tài Toán học tổ hợp là một ngành toán học rời rạc, nghiên cứu về các cấu hình kết hợp các phần tử của một tập hợp hữu hạn phần tử.. Ý nghĩa khoa học và thực tiễn của đề tà
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM -
HUỲNH LÊ ĐẠI NGỌC
TÍNH TOÁN SONG SONG VÀ ỨNG DỤNG VÀO BÀI TOÁN TỔ HỢP
LUẬN VĂN THẠC SĨ
HỆ THỐNG THÔNG TIN
Đà Nẵng - Năm 2019
Trang 2ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM -
HUỲNH LÊ ĐẠI NGỌC
TÍNH TOÁN SONG SONG VÀ ỨNG DỤNG VÀO BÀI TOÁN TỔ HỢP
Chuyên ngành: Hệ thống thông tin
Mã số: 8480104
LUẬN VĂN THẠC SĨ
Người hướng dẫn khoa học: TS NGUYỄN ĐÌNH LẦU
Đà Nẵng - Năm 2019
Trang 4LỜI CẢM ƠN
Lời đầu tiên tôi xin cảm ơn đến các quý thầy cô, khoa Công Nghệ thông tin, trường Đại học Sư Phạm đã tận tình giảng dạy, truyền đạt những kiến thức, kinh nghiệm quý báu trong suốt thời gian tôi theo học tại chương trình Các kiến thức, kinh nghiệm quý báu của thầy cô giáo không chỉ giúp cá nhân tôi hoàn thiện hệ thống kiến thức trong học tập mà còn giúp tôi ứng dụng các kiến thức đó trong công việc hiện tại Đặt biệt, tôi xin gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy giáo hướng
dẫn TS Nguyễn Đình Lầu, người thầy đã tận tình hướng dẫn và tạo điều kiện tốt nhất
để tôi hoàn thành luận văn này
Tôi cũng xin được bày tỏ tình cảm với gia đình, đồng nghiệp, bạn bè đã tạo điều kiện để tôi có thể dành thời gian cho khóa học Xin chân thành cảm ơn các anh chị em trong lớp K34, đã luôn hỗ trợ tôi trong quá trình học tập để có được kết quả như ngày hôm nay, tôi sẽ nhớ mãi lớp K34 thân thương này
Tuy có nhiều cố gắng, nhưng chắc chắn luận văn này không tránh khỏi những thiếu sót nhất định Tôi rất mong nhận được ý kiến đóng góp quý báu của các thầy cô giáo và các anh chị, các bạn để luận văn ngày càng hoàn thiện hơn
Trân trọng cảm ơn!
Trang 7MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
TÓM TẮT iii
MỤC LỤC v
DANH MỤC CÁC BẢNG viii
DANH MỤC CÁC HÌNH ix
DANH MỤC CÁC BIỂU ĐỒ x
MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục tiêu nghiên cứu 1
3 Đối tượng và phạm vi nghiên cứu 2
4 Phương pháp nghiên cứu 2
5 Ý nghĩa khoa học và thực tiễn của đề tài 2
CHƯƠNG 1 TỔNG QUAN TÍNH TOÁN SONG SONG 3
1.1 Tính toán song song và các mô hình tính toán song song 3
1.1.1 Mô hình SISD (Single Intruction, Single data) 3
1.1.2 Mô hình SIMD (Single Intruction, Multiple data): 4
1.1.3 Mô hình MISD (Multiple Intruction, Single data) 4
1.1.4 Mô hình MIMD (Multiple Intruction, Multiple data) 5
1.2 Mô hình máy tính PRAM 6
1.3 Thuật toán song song 8
1.3.1 Quy trình xây dựng thuật toán song song 8
1.3.2 Nguyên lý thiết kế thuật toán song song 9
1.3.3 Các cách tiếp cận trong thiết kế 9
1.3.4 Phân rã 10
1.3.4.1 Phân rã đệ quy 10
1.3.4.2 Phân rã dữ liệu: 10
1.3.4.3 Phân rã thăm dò 11
1.4 Phân tích và đánh giá thuật toán song song 11
CHƯƠNG 2 TOÁN HỌC TỔ HỢP 12
2.1 Tập hợp và các nguyên lý cơ bản 12
2.1.1 Tập hợp 12
2.1.2 Các nguyên lý cơ bản 13
2.1.3 Các cấu hình tổ hợp 14
Trang 82.1.3.1 Chỉnh hợp 14
2.1.3.2 Tổ hợp 15
2.1.3.3 Hoán vị 16
2.2 Bài toán liệt kê 17
2.2.1 Các phương pháp liệt kê 17
2.2.1.1 Liệt kê từ điển 17
2.2.1.2 Phương pháp sinh 17
2.2.2 Các bài toán liệt kê thường gặp 18
2.2.2.1 Dãy bị chặn 18
2.2.2.2 Bài toán tập con 19
2.2.2.3 Hoán vị n phần tử 20
2.2.2.4 Bài toán phân hoạch 20
CHƯƠNG 3 ỨNG DỤNG TÍNH TOÁN SONG SONG VÀO BÀI TOÁN TỔ HỢP 21
3.1 Bài toán sinh dãy bị chặn 21
3.1.1 Xây dựng thuật toán tuần tự 21
3.1.2 Xây dựng thuật toán song song 21
3.2 Bài toán tìm tập con 23
3.2.1 Xây dựng thuật toán tuần tự 23
3.2.2 Xây dựng thuật toán song song 24
3.2.3 Ví dụ minh họa tìm tất cả tập con con của tập có 4 phần tử 25
3.2.4 Phân tích 25
3.3 Bài toán liệt kê hoán vị 26
3.3.1 Phép thế, nghịch thế 26
3.3.2 Xây dựng thuật toán tuần tự 27
3.3.3 Xây dựng thuật toán song song 28
3.3.4 Ví dụ minh họa cho thuật toán 30
3.3.4.1 Ví dụ 1: tìm tất cả các hoán vị của dãy s có 3 phần tử 30
3.3.4.2 Ví dụ 2: tìm tất cả các hoán vị của dãy s có 4 phần tử 31
3.3.5 Chứng minh thuật toán song song là đúng 31
CHƯƠNG 4 THỬ NGHIỆM VỚI THƯ VIỆN THREAD 33
4.1 Thread 33
4.1.1 Giới thiệu chung 33
4.1.2 Các hàm trong thư viện Thread 33
4.2 Cơ chế Socket 36
4.3 Lập trình thử nghiệm tìm tập con 39
Trang 94.4 Lập trình thử nghiệm bài toán tìm hoán vị n phần tử 42
CHƯƠNG 5 TỔNG KẾT 49
5.1 Kết luận 49
5.2 Hướng phát triển 49
DANH MỤC TÀI LIỆU THAM KHẢO 50
QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN (Bản sao)
Trang 103.1 Bộ xử lý phụ sinh dãy nhị phân bị chặn với tập 4 phần tử 25 3.2 Hoán vị, dãy nghịch thế, dãy nghịch thế ngược 3 phần tử 27 3.3 Bộ xử lý phụ sinh dãy bị chặn với dãy s có 3 phần tử 31 3.4 Bộ xử lý phụ sinh dãy bị chặn với dãy s có 3 phần tử 31 4.1 Kết quả thời gian tính toán tuần tự và song song 41
Trang 11DANH MỤC CÁC HÌNH
Số hiệu
4.10 Giao diện phần server của chương trình tính toán song song tìm
Trang 12DANH MỤC CÁC BIỂU ĐỒ
Số hiệu
4.1 Biểu đồ thời gian tính toán tuần tự, tính toán song song 42 4.2 Biểu đồ so sánh thời gian tính toán giữa hai thuật toán 48
Trang 13MỞ ĐẦU
1 Lý do chọn đề tài
Toán học tổ hợp là một ngành toán học rời rạc, nghiên cứu về các cấu hình kết hợp các phần tử của một tập hợp hữu hạn phần tử Toán tổ hợp có liên quan đến rất nhiều lĩnh vực khoa học như đại số, xác xuất, thống kê, hình học, vật lý thông kê và đặt biệt được ứng dụng nhiều trong ngành khoa học máy tính Các bài toán cơ bản của toán tổ hợp như: bài toán dãy bị chăn, bài toán hoán vị phần tử, bài toán tập con, bài toán phân hoạch,… là cơ sở phát triển các thuật toán cho bài toán sắp xếp, phân rã, hoán vị Thế nhưng các bài toán tổ hợp thường là các bài toán có độ phức tạp cao, khối lượng tính toán lớn và thời gian tính toán khá dài gây ra những khó khăn cho việc tính toán
Trong phương pháp tính toán truyền thống, các máy tính, cũng như chương trình phần mềm được lập trình xử lý bài toán phương pháp tính toán tuần tự Để giải quyết một yêu cầu, bài toán thì thuật toán được xây dựng và thực hiện theo các lệnh tập lệnh một cách tuần tự, tại mỗi thời điểm chỉ có một lệnh được thực hiện Sau khi lệnh kết thúc thì lệnh tiếp theo mới thực hiện
Xã hội hiện đại, phát triển liên tục như hiện nay đặt ra cho chúng ta nhiều vấn đề, nhiều bài toán ngày một phức tạp, nhu cầu tính toán xử lý ngày càng lớn Việc tính toán tuần tự theo truyền thống không còn đáp ứng tốt nhu cầu lượng tính toán khổng lồ này nữa Cùng với đó là sự phát triển của các bộ xử lý đa nhân, đa luồng có thể thực hiện đa nhiệm, đa tác vụ cùng lúc Nhiều hệ thống máy tính lớn là sự liên kết của rất nhiều máy tính với nhau để có thể xử lý tính toán một bài toán phức tạp Tất cả đã mở
ra một thời đại mới, thời đại của tính toán song song
Tính toán song song là một hình thức tính toán, trong đó nhiều phép tính được thực hiện đồng thời Dựa trên nguyên tắc chính là một bài toán lớn chia thành những phần nhỏ có thể tính toán độc lập với nhau một cách đồng thời
Tính toán song song và ứng dụng tính toán song song vào bài toán tổ hợp mang lại nhiều ý nghĩa lớn cho ngành khoa học máy tính cũng như các ngành khoa học liên quan khác Trước đây đã có những đề tài nghiên cứu về tính toán song song cũng như nghiên cứu về bài toán tổ hợp, nhưng chỉ là những nghiên cứu tách biệt và việc nghiên cứu ứng dụng tính toán song song vào bài toán tổ hợp vẫn chưa thực sự được quan tâm theo đúng sự quan trọng của nó Thế nên tôi, được sự đồng ý của cán bộ hướng dẫn, lựa chọn đề tài này để làm luận văn
2 Mục tiêu nghiên cứu
- Nghiên cứu tính toán song song và bài toán tổ hợp
Trang 14- Đề xuất giải pháp tính toán song song để tính toán bài toán tổ hợp nhằm tăng hiệu quả tình toán, tăng hiệu suất tính toán trên máy tính, hỗ trợ tính toán cho các lĩnh vực khác có liên quan
- Thử nghiệm các giải pháp trên môi trường java với thư viện Thread tính toán song song song
3 Đối tượng và phạm vi nghiên cứu
Đối tượng:
- Nghiên cứu lý thuyết tính toán song song, các mô hình máy tính, các mô hình tính toán song song, các bước để xây dựng thuật toán song song, các phương pháp
phân rã bài toán
- Các bài toán tổ hợp: Dãy bị chặn, tập con, hoán vị của tập hợp
- Ứng dụng tính toán song song vào bài toán tổ hợp, thử nghiệm trên môi
trường java với thư viện Thread
Phạm vi nghiên cứu:
- Đề xuất giải pháp thuật toán tính toán song song trên bài toán tổ hợp
- Lập trình ứng dụng tính toán song song vào bài toán tổ hợp bằng thư viện Thread để thử nghiệm thuật toán
4 Phương pháp nghiên cứu
Trong luận văn có sử dụng các phương pháp nghiên cứu như sau:
- Phương pháp nghiên cứu tài liệu
- Phương pháp phân tích
- Phương pháp tổng hợp
- Phương pháp thực nghiệm nêu ví dụ
5 Ý nghĩa khoa học và thực tiễn của đề tài
Luận văn trình bày lý thuyết tính toán song song, các mô hình tính toán song song, cách xây dựng thuật toán song song, cách phân tách bài toán phân rã để thực hiện song song và các bài toán tổ hợp Từ đó đề xuất các giải pháp tính toán bằng phương pháp song song cho bài toán tổ hợp tăng hiệu xuất tính toán cho các máy tính Thử nghiệm thực tiễn trên môi trường Java sử dụng thư viện Thread
Trang 15CHƯƠNG 1 TỔNG QUAN TÍNH TOÁN SONG SONG
1.1 Tính toán song song và các mô hình tính toán song song
Trong thực tế có rất nhiều vấn đề mà đòi hỏi chúng ta phải xử lý lượng dữ liệu cũng như số lượng phép toán là cực kỳ lớn cùng với yêu cầu tốc độ cao Do đó cần phải có những hệ thống máy tính lớn, mạnh mẽ để thực hiện những vấn đề đó Thế nhưng hệ thống máy tính lớn lại gặp nhiều vấn đề vì giới hạn về thiết bị cũng như tính vật lý Từ đó người ta đề ra hướng giải pháp xử ly song song từ các bộ xử lý đa nhân hoặc từ các hệ thống nhiều các máy tính nhỏ ghép lại với nhau
Tính toán song song là một hình thức tính toán mà trong đó nhiều phép toán được thực hiện đồng thời với nhau, những tính toán này trên những hệ thống đa bộ xử
lý cùng gia giải quyết một vấn đề nào đó Tính toán song song hoạt động dự trên nguyên tắc là phân chia những vấn đề lớn thành những bài toán nhỏ hơn để giải quyết đồng thời trên các bộ xử lý
Cùng với sự phát triển của khoa học kỹ thuật ngày nay mà hầu hết các hệ điều hành hiện tại đã hỗ trợ đa xử lý, đa nhiệm tạo điều kiện rất thuật lợi cho phương pháp lập trình song song phát triển Nhiều bộ xử lý cùng tính toán độc lập song, trong một khoản thời gian sẽ thực hiện được nhiều công việc hơn
Trong xử lý song song, có nhiều cách phân loại kiến trúc khác nhau nhưng phân loại kiến trúc theo M.Flynn là được sử dụng phổ biến nhất Theo Flynn thì phân loại kiến trúc máy tính dựa trên các đặt trưng về số lượng bộ xử lý, số lượng các chương trình chúng có thể thực hiện và cấu trúc bộ nhớ Và từ đó ta có các các mô hình tính toán như sau:
1.1.1 Mô hình SISD (Single Intruction, Single data)
Máy tính một luồng lệnh, một luồng dữ liệu Các máy tính này chỉ có một bộ xử
lý, tại một thời điểm chỉ thực hiện duy nhất một lệnh đối với một đối tượng dữ liệu SISD là môn hình máy tính truyền thống theo kiểu Von Neunann
Hình 1.1 Mô hình kiến trúc song song SISD
Trang 161.1.2 Mô hình SIMD (Single Intruction, Multiple data):
Máy tính có một luồng lệnh, một bộ điều khiển Nó chỉ thực hiện một lệnh tại một thời điểm nhưng chúng có nhiều phần tử cùng xử lý trên những tập dữ liệu khác nhau, đến từ các luồng dữ liệu khác nhau Những thành phần xử lý này được giám sát bởi một đơn vị điều khiển
Hình 1.2 Mô hình kiến trúc song song SISD
Các máy tính thuộc mô hình này có những đặt điểm sau:
- Xử lý phân tán trên một số lượng lớn các phần cứng
- Thực hiện đồng thời trên nhiều thành phần dữ liệu khác nhau
- Thực hiện cùng một câu lệnh trên các thành phần dữ liệu đó
1.1.3 Mô hình MISD (Multiple Intruction, Single data)
Máy tính loại này có thể thực hiện nhiều chương trình nhiều lệnh trên cùng một nguồn dữ liệu, kiến trúc này có thể chia làm 2 nhóm:
- Máy tính yêu cầu những bộ xử lý khác nhau có thể nhận được các lệnh khác nhau và cùng thực hiện trên một mục dữ liệu
Hình 1.3 Mô hình kiến trúc song song MISD
- Máy tính có các luồng dữ liệu được chuyển vào tuần tự theo dãy các CPU liên tiếp
Trang 17Hình 1.4 Mô hình kiến trúc song song MISD dãy CPU
1.1.4 Mô hình MIMD (Multiple Intruction, Multiple data)
Máy tính đa bộ xử lý hoặc đa máy tính, mỗi một bộ xử lý trong hệ thống có một
bộ điều khiển riêng, thực hiện nhiều câu lệnh khác nhau trên luồng dữ liệu riêng biệt, chia sẻ tài nguyên chứa trong hệ thống của bộ nhớ chính Các hệ thống MIMD này thực hiện các phép toán theo dạng song song không đồng bộ
Các hệ thống MIMD có đặt trưng:
- Phân tán tiến trình cho một số bộ xử;
- Tất cả các bộ xử lý chia sẻ tài nguyên được lưu trữ trong bộ nhớ chính;
- Các bộ xử lý hoạt động đồng thời và độc lập với nhau;
- Mỗi một bộ xử lý chạy một chương trình riêng biệt
Mô hình này có thể chia ra làm 2 loại theo cách thức mà các bộ xử lý truy cập vào bộ nhớ:
- Loại các bộ kết nối chặt Những bộ xử lý kết nối chặt được chia sẻ từ một hệ thống bộ nhớ chung gọi là hệ thống chia sẻ bộ nhớ
Hình 1.5 Mô hình MIMD chia sẻ bộ nhớ
- Loại các bộ kết nối rời là những hệ thống chia sẻ từ bộ nhớ hệ thống nhưng mỗi bộ xử lý cáo một bộ nhớ riêng gọi là hệ thống truyền thông điệp Những máy tính truyền thông điệp gửi đến nhiều máy tính trong đó mỗi bộ xử lý có bộ nhớ riêng và truy cập đến bộ xử lý đó
Trang 18Hình 1.6 Mô hình MIMD truyền thông điệp
1.2 Mô hình máy tính PRAM
PRAM (Parallel Random Access Machine) là mô hình máy truy cập ngẫu nhiên song song được đưa ra vào năm 1978 và được đề cập, phát triển nhiều trong xử lý song song, thuật toán song song, lý thuyết và tính toán [16]
PRAM không phải là một mô hình máy tính vật lý cụ thể, mà là một mô hình máy tính song song trừu tượng Thông thường trong việc xây dựng các thuật toán song song, chúng ta quy ước là phát triển thuật toán cho mô hình trừu tượng này để tạo điều kiện thuận lợi cho việc tính toán trên thuật toán
PRAM có cấu trúc bao gồm: k bộ xử lý có bộ nhớ cục bộ riêng, một bộ nhớ dùng chung với một mô hình truy xuất bộ nhớ được quy định và không có thời gian liên lạc Những xử lý được lưu trong bộ nhớ toàn cục và một bộ xử lý được kích hoạt để xử lý Tại mỗi bước, một bộ xử lý đang hoạt động có thể thực hiện một trong các thao tác: đọc dữ liệu từ bộ nhớ riêng cục bộ hay bộ nhớ toàn cục, ghi dữ liệu vào bộ nhớ riêng cục bộ hay toàn cục hoặc kích hoạt bộ xử lý khác Các mô hình PRAM khác nhau ở chỗ làm thế nào để giải quyết được các xung đột từ thao tác ghi và đọc vào bộ nhớ toàn cục
Theo Seyed H Roosta [16], Behrooz Parhami [17] mô hình PRAM được chia thành 3 loại:
- EREW (Exclusive Read, Exclusive Write): Không cho phép xung đột trong việc đọc và ghi
- CREW (Concurrent Read, Exclusive Write): Cho phép xung đột đọc và không cho phép xung đột ghi Tại cùng một thời điểm, nhiều bộ xử lý có thể đọc đến cùng một địa chỉ trong bộ nhớ toàn cục nhưng không có quá một bộ nhớ được phép ghi
Trang 19- CRCW (Concurrent Read, Concurrent Write): Cho phép xung đột đọc và cho phép xung đột ghi Tại cùng một thời điểm, nhiều bộ xử lý có thể đọc hoặc ghi cùng một địa chỉ trong bộ nhớ toàn cục
(spanning tree) trên đồ thị n đỉnh là: T k =O(n 2 /k)+O(n log k) Với O(n log k) là độ phức
tạp bởi số bước gửi và nhận kết quả, O(n2/k) là thời gian tính toán Tương tự như vậy, thuật toán song song tìm đường đi ngắn nhất của mọi cặp đỉnh trên đồ thị, ông cũng đã
chỉ ra độ phức tạp bởi số bước gửi và nhận kết quả là O(n 2 log k) và thời gian tính toán
là O(n3/k)
Bên cạnh đó, chúng ta cần lưu ý rằng thời gian tính toán và thời gian truyền thông được quy định bởi số bước gửi và nhận kết quả là để phân tích đánh giá thời gian thực hiện song song, còn về mặt lý thuyết thì độ phức tạp của thuật toán tuần tự
và song song là như nhau Hơn nữa, thời gian thực hiện thuật toán song song trong môi trường thực tế còn phụ thuộc vào rất nhiều tham số khác như: kích cỡ thông điệp, cấu hình kết nối mạng đường truyền và cách thức truyền thông điệp Nên trong mô hình PRAM mức độ tăng tốc (speedup) không thể lên cao được khi tăng số lượng bộ xử lý lên nhiều lần
Như vậy, mục đích chính của mô hình PRAM là để xây dựng mô hình lý thuyết
Trang 20
Dựa trên mô hình này, chúng ta có thể đánh giá độ phức tạp về mặt thời gian của thuật toán Đây là mô hình tổng quát cho máy tính song song kiểu MIMD
1.3 Thuật toán song song
1.3.1 Quy trình xây dựng thuật toán song song
Việc xây dựng, thiết kế một chương trình tính toán song song từ một thuật toán tuần tự đã có chúng ta cần trải qua 4 giai đoạn là: phân rã, truyền thông, tích tụ và ánh
xạ Các giai đoạn nối tiếp nhau và được Seyed H Roosta biểu diễn như sau:
Hình 1.8 Các giai đoạn xây dựng thuật toán song song
Phân rã: Là công việc sau khi đã xác định và phân tích bài toán Các công việc
tính toán cũng như các nguồn dữ liệu đầu vào, đầu ra được phân rã thành nhiều tác vụ
Từ đó phân tích từng tác vụ và tìm ra các tác vụ có thể tính toán độc lập với nhau về
dữ liệu đầu ra, đầu vào hoặc độc lập về cách tính toán…
Trang 21Truyền thông: là công đoạn thể hiện các tác vụ qua từng luồng thông tin sao cho
các luồng đó có thể thực hiện độc lập, đồng thời Tính toán thực hiện một tác vụ kèm theo những dữ liệu đầu ra, đầu vào Sau đó được truyền giữa các tác vụ để thực hiện tính toán
Tích tụ: giai đoạn này sẽ gom các tác vụ đã phân rã ở trên thành những tác vụ
lớn hơn giúp giảm chi phí truyền thông nhưng cũng gây ra việc giảm tiềm năng thực hiện đồng thời
Ánh xạ: là giai đoạn cuối cùng, mỗi tác vụ sẽ được ấn định vào một bộ xử lý nào
đó để tiến hành việc tính toán
1.3.2 Nguyên lý thiết kế thuật toán song song
Thuật toán song song là tập các tiến trình hoặc các tác vụ thực hiện đồng thời có thể trao đổi dữ liệu với nhau kết hợp cùng giải quyết một vấn đề lớn Để thiết kế được thuật toán song song, ta cần quan tâm đến các nguyên lý thiết kế sau:
- Nguyên lý tập lịch: Tạo lịch trình để giảm tối thiểu bộ xử lý sử dụng nhưng vẫn giữ không tăng thời gian tính toán theo độ phức tạp
- Nguyên lý hình ống: Thực hiện khi bài toán xuất hiện một dãy các thao tác {T1,T2,…Tn} trong đó Ti+1 thực hiện sau khi Ti kết thúc
- Nguyên lý chia để trị: Chia bài toán thành nhiều phần nhỏ hơn có tính độc lập với nhau để thực hiện song song
- Nguyên lý đồ thị phụ thuộc dữ liệu: phân tích mối quan hệ giữ các dữ liệu
để xây dựng đồ thị phụ thuộc dữ liệu từ đó xác định đúng được dữ liệu ra vào trong từng phần của thuật toán song song
- Nguyên lý điều kiện tương tranh: Nếu nhiều tiến trình cũng muốn truy xuất vào cùng một vùng dữ liệu thì cần xem xét điều kiện tương tranh, các tiến trình đó có cản trở nhau hay hay không
Ngoài ra chúng ta cũng cần chú ý thuật toán song song phải được thiết kết dựa trên những kiến thức về kiến trúc máy tính, ngôn ngữ lập trình song song và các phương pháp tính toán
1.3.3 Các cách tiếp cận trong thiết kế
Trong tính toán song song ta có ba cách tiếp cận để thiết kế:
- Thực hiện song song hóa từ những thuật toán tuần tự, biến đổi những cấu trúc tuần tự để tận dụng được những khả năng song song tự nhiên của tất cả các thành phần trong hệ thống xử lý
- Thiết kế những thuật toán song song cần phải phù hợp với các kiến trúc song song
Trang 22- Xây dựng những thuật toán song song từ những thuật toán song song có trước cho phù hợp với điều kiện và môi trường song song thực tế
Ví dụ: Xét bài toán tính n! với n là một số nguyên dương
Ta phân tích bài toán:
n! = n*(n-1)!
(n-1)! = (n-1)*(n-2)!
… 1! = 1 ; Khi chúng ta phân tích đến bài toàn nhỏ nhất là 1!=1 và từ đó ta đưa các giá trị đã tính toán được từ các bài toán nhỏ để tình ngược lên các bài toán lớn ở trên
1.3.4.2 Phân rã dữ liệu:
Phân rã dữ liệu là một phương pháp thường được sử dụng để tạo ra sự tương tranh trong các thuật toán chạy trên các bộ dữ liệu lớn
Phân rã các tính toán gồm 2 bước:
- Bước 1: Phân rã dữ liệu mà các tính toán sử dụng
- Bước 2: Các dữ liệu phân rã này dùng trong quá trình tính toán riêng biệt tạo ra sự phân rã của các tính toán trong công việc
Có một số cách phân rã dữ liệu như sau:
- Phân hoạch dữ liệu đầu ra: đối với các bài toán mỗi yếu tố đầu ra có thể được tính toán một cách độc lập từ các yếu tố của dữ liệu đầu vào
- Phân hoạch dữ liệu đầu vào: đối với bài toán mà dữ liệu đầu vào có thể chia thành các phần nhỏ hơn tính toán độc lập mà không làm sai lệch kết quả cuối cùng
Ví dụ: trong bài toán tìm min, max của một tập hợp ta có thể phân hoạch dữ liệu đầu vào và tính toán toán trên từng phân hoạch của tập hợp rồi tổng hợp kết quả lại để đưa ra kết quả cuối cùng
- Phân hoạch dữ liệu trung gian: trong những bài toán có cấu trúc tính toán theo nhiều tầng, dữ liệu đầu ra của tầng này lại là dữ liệu đầu vào của tầng
Trang 23tiếp theo Sự phân rã dữ liệu đầu vào đầu ra của các tầng này gọi là phân hoạch dữ liệu trung gian
1.3.4.3 Phân rã thăm dò
Phân rã thăm dò sử dụng trong các bài toán mà các tính toán ứng với một sự tìm kiếm trong không gian nghiệm Ta phân hoạch không gian tìm kiếm thành các phần nhỏ hơn và tìm kiếm đồng thơi trên các không gian này cho đến khi tìm ra nghiệm mong muốn
1.4 Phân tích và đánh giá thuật toán song song
Trong thuật toán song song, độ phức tạp tính toán về thời gian không chỉ phụ thuộc vào kích cỡ của dữ liệu đầu vào mà còn phụ thuộc vào kiến trúc máy tính song song và số lượng các bộ xử lý được phép sử dụng trong hệ thống
Độ phức tạp thời gian là thước đo quan trọng nhất đánh giá mức độ hiệu quả của thuật toán song song Độ phức tạp thời gian của thuật toán song song được xác định bởi số các phép toán cơ sở và số các bước truyền tải dữ liệu giữa các bộ xử lý với nhau Từ đó suy ra, độ phức tạp thời gian của thuật toán song song không chỉ phụ thuộc vào mô hình tính toán song song mà còn phụ thuộc vào số bộ xử lý được sử dụng
Mức độ tăng tốc (Speedup) [16, tr 228-231] của thuật toán song song sử dụng p
bộ xử lý được xác định như sau:
S p = T S /T p
Trong đó,
TS là thời gian thực hiện tính toán trên một bộ xử lý
Tp là thời gian thực hiện tính toán trên p bộ xử lý
Để đánh giá được độ phức tạp tính toán của các thuật toán song song, ngoài số bước tính toán chúng ta còn cần quan tâm đánh giá đến thời gian truyền thông của các tiến trình Thời gian thực hiện song song, ký hiệu là tp gồm hai phần tcomp và tcomm
t p = t comp + t comm
Trong đó, tcomp là thời gian tính toán và tcomm thời gian truyền thông dữ liệu
Trang 24CHƯƠNG 2 TOÁN HỌC TỔ HỢP
Toán học tổ hợp hay còn gọi là giải tích tổ hợp, đại số tổ hợp,… là một lĩnh vực của toán rời rạc Tư duy về tổ hợp ra đời từ rất sớm từ thời nhà Chu, Hy Lạp cổ, nhưng vào đầu thế kỷ XVII thì Toán tổ hợp mới hình thành được nên một ngành toán học mới được nghiên cứu nghiêm túc qua các công trình của Pascal, Fermat, Leibnitz, Euler,… Và đến khi máy tính ra đời giải quyết được nhiều bài toán phức tạp, trong đó
có các bài toán tổ hợp thì toán học tổ hợp mới thực sự phát triển mạnh mẽ như ngày nay
Toán học tổ hợp tâp trung nghiên cứu về các cách phân bố phần tử cũng như các cấu hình trong các tập hợp hữu hạn phần tử Thường gặp các dạng bài toán như:
Bài toán đếm là bài toán giải quyết những câu hỏi "có bao nhiêu cấu hình thoải mãn những điều kiện bài toán?" sử dụng phương pháp đếm để tìm số cấu hình đáp ứng yêu cầu bài toán Thông thường bài toán đếm được sử dụng rất hiệu quả trong các bài toán mang tính chất đánh giá: tính xác xuất của một sự kiện, tính độ phức tạp,…
Bài toán tồn tại yêu cầu ta đi chứng minh sự tồn tại của một cấu hình tổ hợp theo
yêu cầu đó là có hay không?
Bài toán liệt kê dùng để chỉ ra tất cả các cấu hình tổ hợp có thể có Thường dùng
phương pháp vét cạn tất cả các cấu hình và kết hợp với bài toán đếm để tìm tổng số lượng cấu hình thoải mãn yêu cầu Những bài toán này thường có lượng tính toán và kết quả lớn đến rất lớn, tùy thuộc vào các yêu cầu bài toán
Bài toán tối ưu khác với bài toán liệt kê là tìm tất cả, bài toán này chỉ quan tâm
đến việc tìm cấu hình tối ưu nhất theo một hoặc nhiều tiêu chí nào đó Bài toán có giá trị ứng dụng trong thực tế và lý thuyết tổ hợp, đóng góp vào việc xây dựng những thuật toán hiệu quả
Từ đó toán tổ hợp có tính ứng dụng mạnh trong: lý thuyết số, hình học hữu hạn, biểu diễn nhóm, đại số không giao hoán, quá trình ngẫu nhiên, thống kê xác suất, quy hoạch thực nghiệm,…
Trong chương này sẽ trình bày lý thuyết và một số bài toán tổ hợp
2.1 Tập hợp và các nguyên lý cơ bản
2.1.1 Tập hợp
Theo Nguyễn Đức Nghĩa trình bày tại [3] thì tập hợp là một trong những định nghĩa cơ bản nhất
Tập hợp được coi là một không gian chứa tất cả các các đối tượng có cùng bản
chất (thuộc tính, dấu hiệu) chung nào đó Tập hợp thường được ký hiệu bằng các chữ
Trang 25cái A, B, C, Các phần tử của tập hợp ký hiệu bằng các chữ thường a, b, c, Ðể chỉ a
là phần tử của X ta viết: a X (đọc: a thuộc X) Ðể chỉ x không phải là phần tử của X
ta viết: x X (đọc: x không thuộc X) Tập không có phần tử nào gọi là tập rỗng và ký
hiệu
Lực lượng tập hợp: Số phần tử của A, ký hiệu là A hoặc N(A), gọi là lực
luợng của tập A Nếu A < , ta nói A là tập hữu hạn, nếu A = , ta nói A là tập
vô hạn
Quan hệ bao hàm: Cho hai tập A, B Nếu mỗi phần tử thuộc A cũng thuộc B ta
nói A là tập con của B (hoặc A bao hàm trong B) và ký hiệu A B Tập rỗng là con của mọi tập hợp Tập vũ trụ là tập bao hàm của mọi tập hợp
Nếu A không phải tập con của B ta ký hiệu A B
Nếu A B và B A ta nói A bằng B và ký hiệu A = B
Tập tất cả tập con của A ký hiệu là P(A)
Các phép toán tập hợp:
Cho các tập A và B Ta định nghĩa các phép toán sau
- Phép hiệu: Hiệu của A và B, ký hiệu A \ B là tập:
Đối với hai tập hợp A và B là hai tập hợp rời nhau thì: N(A B) = N(A)+N(B)
Ta có thể mở rộng ra với nhiểu tập hợp rời nhau như sau: Với { X1, X2, , Xn}
là một phân hoạch của tập S Khi đó
Trang 26 Nguyên lý nhân
Giả sử một cấu hình tổ hợp được xây dựng qua k bước, bước 1có thể được thực hiện n1 cách, bước 2 có thể được thực hiện n2 cách, , bước k có thể được thực hiện nkcách Khi đó số cấu hình là: n1.n2 nk
Hệ quả: N(A1 x A2 x … x Ak) = N(A1)N(A2) … N(Ak)
Ví dụ: để đi từ Quảng Ngãi đến Đã Nẵng có 2 cách: tàu hỏa, ô tô Đi từ Đà Nẵng
ra Hà Nội có 3 cách: máy bay, tầu hỏa, ô tô Một người có lịch trình đi từ Quảng Ngãi qua Đà Nẵng và đến Hà Nội thì có số lựa chọn cách đi là: 2 x 3 = 6 cách
Nguyên lý bù trừ
Được suy từ nguyên lý cộng, với hai tập A và B bất kì không có các giả thuyết rời nhau thì:
N(A B) = N(A) + N(B) – N(A B)
Ví dụ: tìm số chuỗi nhị phân có độ dài 10 bắt đầu hoặc kết thúc bởi 11
Ta có: Số chuỗi nhị phân có độ dài 10 bắt đầu 11 là 28
Số chuỗi nhị phân có độ dài 10 kết thúc 11 là 28
Số chuỗi nhị phân có độ dài 10 bắt đầu bằng 11 và kết thúc 11 là 26Theo nguyên lý bù trừ thì ta có số chuỗi nhị phân có độ dài 10 bắt đầu hoặc kết thúc bởi 11 là 28 + 28 – 26 = 448 chuỗi
Nguyên lý Dirichlet
Nếu xếp N đối tượng vào k cái nhóm thì tồn tại nhóm chứa ít nhất N/k đối tượng ( x là số nguyên nhỏ nhất lớn hơn hoặc bằng x gọi là trần nguyên của x)
Ví dụ: Xếp 21 người và 10 nhóm, thì luôn tồn tại nhóm có 3 người
Chứng minh Thật vậy, xếp 21 những nguời vào 10 nhóm Ta có 21/10 = 3 Vậy theo nguyên lý Dirichlet tồn tại nhóm có ít nhất 3 người
2.1.3 Các cấu hình tổ hợp
2.1.3.1 Chỉnh hợp
Chỉnh hợp lặp:
Một chỉnh hợp lặp chập k của n phần tử là một bộ có thứ tự gồm k thành phần lấy
từ n phần tử đã cho Các thành phần có thể lặp lại Như thế, một chỉnh hợp lặp chập k
có thể xem như tích Đêcac Ak với A là tập đã cho theo nguyên lý nhân thì số chỉnh hợp chập k của n là nk
Ví dụ: tìm số lượng số thập phân có độ dài k chữ số?
Ta thấy mỗi số thập phân theo yêu cầu có k chữ số, trong đó mỗi chữ số có thể chọn ngẫu nhiên trong một trong mười chữ số thập phân (0,1,2,3,4,5,6,7,8,9) Vậy suy
ra số lượng số thập phân cần tìm là 10k
Trang 27 Chỉnh hợp không lặp:
Một chỉnh hợp không lặp chập k của n phần tử là một bộ có thứ tự gồm k thành phần lấy từ n phần tử đã cho Các thành phần có thể lặp lại Bài toán tính chỉnh hợp có thể chia làm k giai đoạn mỗi gia đoạn ta có số các chọn giảm đi một để tránh trường hợp lặp nên theo nguyên lý nhân ta có công thức tính số tất cả chỉnh hợp không lặp là:
A(n,k) = n* (n-1)*…*(n-k+1) = n!/(n-k)!
Ví dụ: tìm số cách sắp xếp cho 6 bạn học sinh ngồi vào hàng có 3 ghế
Ta thấy: Để chọn học sinh ngồi vào ghế đầu tiên ta có 6 cách chọn
Chọn học sinh ngồi vào ghế thứ 2 thì ta chỉ còn 5 cách chọn (vì bạn đầu tiên đã
k phần tử của nó Vì không xét đến thứ tự nên số tổ hợp chập k của n là:
( )
( )
Ví dụ 1: Trong vòng loại của giải bóng đá, người ta cho 10 đội bóng đá với nhau
theo cách vòng trong tính điểm Tình số trận bóng được tổ chức trong vòng loại này?
Ta có: cứ 2 đội bóng thì thì đầu với nhau nên số trận đấu chính là số cách chọn 2 đội bóng ngẫu nhiên trong 10 đội thi đấu Nên số trận đấu là tổ hợp chập 2 của 10
( ) Tính chất của tổ hợp:
- Tính đối xứng: C(n,k) = C(n, n-k)
- Điều kiện đầu: C(n,0) = C(n,n) = 1
- Công thức đệ quy: C(n,k) = C(n-1,k-1) + C(n-1,k) với 0 < k < n
Từ đó ta có thể viết lại dưới dạng tam giác Pascal như sau:
C(0,0) C(1,0) C(1,1) C(2,0) C(2,1) C(2,2)
Trang 28 Tổ hợp lặp:
Tổ hợp lặp chập k từ n phần tử là một nhóm không phân biệt thứ tự gồm k phần
tử trích từ n phần tử đã cho, trong đó các phần tử có thể được lặp lại
Giả sử X có n phần tử Khi đó, số tổ hợp lặp chập k từ n phần tử của X là
Bảng 2.1 Mô phỏng lại bài toán
Vậy việc tìm ra kết quả là việc bố trí lại các ô ngăn để phân chia số lượng số sách chọn của từng môn Mà việc bố trí lại 3 ngăn là tổ hợp chập 3 của 8 phần tử Nên số cách chọn là C(8,3)
2.1.3.3 Hoán vị
Hoán vị
Hoán vị của n phần tử là cách sắp xếp thứ tự cho các phần tử đó 1 hoán vị Ta có thể xem hoán vị n phần tử là trường hợp riêng của chỉnh hợp không lặp chập k của n phần tử trong trường hợp k=n Do đó số hoán vị n phần tử là n!
Ví dụ 2: Giả sử có 4 viên bi đỏ, 3 viên bi xanh và 3 viên bi trắng Hỏi có bao
nhiêu cách sắp các viên bi trên theo hàng ngang
Trong ví dụ này có tất cả 10 chỗ trống để xếp các viên bi
Xếp 4 viên bi đỏ vào 4 vị trị bất kì trong 10 vị trí có C(10,4) khả năng xếp
Xếp 3 viên bi xanh vào 3 vị trí bất kỳ trong 6 vị trí còn lại có C(6,3) khả năng xếp
Còn lại ta xếp 3 viên bi trắng vào 3 vị trí còn lại chỉ có 1 khả năng xếp
Theo nguyên lý nhân ta có C(10,4).C(6,3).1 cách xếp
Trang 292.2 Bài toán liệt kê
Trong các bài toán tổ hợp bài toán liệt kê được đánh giá là một trong những bài toán có độ phức tạp lớn nhất trong các bài toán tổ hợp Ví như ở các bài toán đếm chúng ta chỉ cần kết quả là số lượng của các cấu hình thì ở bài toán liệt kê chúng ta cần chỉ rõ ra tất cả các cấu hình đó Vì vậy, trong nhiều trường hợp, khi không có thuật toán hiệu quả để giải quyết những bài toán như trên, thì phương pháp liệt kê vói sự trợ giúp của máy tính vẫn là một giải pháp có thể thực hiện được
Như vậy, bài toán liệt kê được xác định thuật toán xây dựng lần lượt cấu hình quan tâm Thuật toán cần đảm bảo các yêu cầu sau:
- Không lặp lại cấu hình
- Không bỏ sót cấu hình
2.2.1 Các phương pháp liệt kê
2.2.1.1 Liệt kê từ điển
Liệt kê từ điển là phương pháp vét cạn theo thứ tự từng cấu hình theo 1 quy luật nào đó có tính tăng dần Tương tự như thứ tự chữ cái trong từ điển, thứ tự số nguyên tăng dần,… Ta định nghĩa liệt kê từ điển như sau:
Cho = s1 s2…sp và = t1 t2…tq là các dãy số hoặc ký tự Ta nói rằng nhỏ hơn
(theo kiểu từ điển), ký hiệu < , nếu hoặc
(i) p < q và si= ti với mọi i = 1, 2, , p hoặc
(ii) Tồn tại k min{p, q} sao cho si= ti với mọi i = 1, 2, , k1 và sk<tk
Thế nên để áp dụng phương pháp sinh cho các bài toán liệt kê ta cần những điều kiện như sau:
- Có thể xác định được một thứ tự trên các cấu hình cần liệt kê Từ đó ta có thể xác định được cấu hình đầu tiên, cấu hình cuối cùng trong thứ tự đã xác định
- Có thể suy ra được cấu hình chưa phải là cuối cùng từ cấu hình trước đó
Từ đó trình bày thuật toán sinh tổng quát như sau:
Thuật toán sinh tổng quát
Trang 30Kí hiệu s là cấu hình hiện hành, s0 là cấu hình đầu tiên (theo thứ tự từ điển)
Bước 1 Khởi tạo, gán s := s 0
Bước 2 Kết xuất s
Bước 3 Kiểm tra tiêu chuẩn kết thúc
Nếu s là cấu hình cuối cùng thì kết thúc, nguợc lại sang buớc 4
Bước 4 Tìm cấu hình t đứng kề sau s theo thứ tự từ điển
Gán s:= t và quay lại bước 2
Tuỳ theo bài toán cụ thể có thể gộp bước 3 và 4 để tăng hiệu quả thuật toán Áp dụng thuật toán tổng quát cho các bài toán cụ thể, ta chỉ cần xác định cấu hình đầu tiên
s và phương pháp tìm cấu hình t kế tiếp sau cấu hình s
2.2.2 Các bài toán liệt kê thường gặp
2.2.2.1 Dãy bị chặn
Ký hiệu Z là tập các số nguyên Cho n là một số nguyên dương nào đó, giả sử p
và q là 2 dãy số nguyên có độ dài n và ký hiệu như sau:
p=( p1 p2…pn), q=(q1 q2…qn)| pi, qi ∈ Z, ∀i ∈ 1, …, n
Ta có định nghĩa sau:
1 p ≤ q khi và chỉ khi pi ≤ qi ∀i∈ (1 … n)
2 p < q khi và chỉ khi ∃ j∈ (1 … n) : pj<qj và pi ≤qi : ∀i∈ (1 … n) và i≠j Bài toán dãy bị chặn được phát biểu như sau:
Cho hai dãy số nguyên s và g có độ dài n, sao cho s < g, hãy tìm tất cả các dãy số
t độ dài n sao cho s ≤ t ≤ g
Giả sử s=(s1 s2… sn) và g=(g1 g2…gn), hai dãy này được gọi là các dãy biên Các dãy cần tìm t=(t1 t2 tn) phải thỏa mãn:
t i ∈ Z ⋀ S i ≤ t i ≤ g i ∀ i ∈ (1 … n) (1)
Ví dụ: Cho s=(3 2 1 4) và g= (4 2 2 6) là hai dãy biên, các dãy số nguyên t thỏa s≤t≤g và cho s’=(0 0 0) và g’=(0 1 2) là hai dãy biên và các dãy số nguyên t’ thoải mãn s’≤t’≤g’ Như vậy, t và t’ được sắp xếp theo thứ tự từ điển tăng đần như trong bảng sau:
Trang 31Định lý 1: Cho s=(s1 s2…sn) và g=(g1 g2…gn) là hai dãy biên Các dãy t=(t1t2 tn) là dãy bị chặn gọi C là số lượng các dãy t Khi đó ta có:
2.2.2.2 Bài toán tập con
Bài toán tập con là bài toán lựa chọn đối tượng phần tử có trong tập hợp đã cho
mà không quan tâm đến thứ tự của các phần tử ấy
Với tập hợp X có n phần tử thì X có 2n tập con bao gồm cả phần tử rỗng và chính
nó
Có các phương pháp cho bài toán tập con như:
- Phương pháp thứ tự từ điển: liệt kê tuần tự các tập con theo thư tự từ điển
- Phương pháp mã Gray: theo thứ tự mã Gray, mỗi tập con sau được tạo bởi tập con đứng trước nó bằng cách thêm hoặc bớt 1 phần tử
- Phương pháp đếm nhị phân: sinh ra tập con S thông qua việc quan sát tập con S’ bằng một chuỗi nhị phân gồm n bit Sao cho bit thứ i bằng 1 nếu phần tử thứ i của S thuộc S’
Ví dụ: tìm tất cả tập con của tập hợp A={1,2,3}
A có 23=8 tập con {},{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
Ta có thể biểu diễn các tập con của dãy có 3 phần tử theo dạng dãy nhị phân, với giá trị 1 tương ứng với phần tử đó xuất hiện trong tập con, giá trị 0 tương ứng với việc phần tử đó không xuất hiện trong tập con như bảng sau:
Bảng 2.3 Biểu diễn tập con theo dạng nhị phân
Trang 322.2.2.3 Hoán vị n phần tử
Hoán vị của một tập đối tượng là sự liệt kê ra các đối tượng đó theo một trật tự nhất định Hoán vị thường xuất hiện trong nhiều lĩnh vực toán học xem xét đến thứ tự của các phần từ Hoán vị xuất hiện nhiều trong các bài toán về sắp xếp trong ngành công nghệ thông tin
Bài toán hoán vị:
Cho tập X gồm n phần tử, mỗi hoán vị của tập X là 1 cách liệt kê tất cả các phần
tử của X theo 1 thứ tự nhất định Với Sn là tập tất cả các hoán vị của tập X Mỗi hoán
vị trên tập X là một xong ánh f: XX nên có thể biểu diễn thành một dãy số nguyên
độ dài n như sau
f= <f(1) f(2)…f(n)> với f(i) ∈ X và f(i) ≠ f(j) nếu 1≤ i ≠ j ≤ n Bài toán yêu cầu tìm ra tất cả dãy số f này
Ví dụ: Có 3 ký tự ABC tìm tất cả các chuỗi có 3 ký tự tạo từ 3 ký tự đã cho
Ta có 6 hoán vị của nó để tạo thành chuỗi có 3 ký tự {ABC}, {ACB}, {BAC}, {BCA}, {CAB}, {CBA}
Có nhiều phương pháp như là: phương pháp từ điển, từ điển ngược, thêm bớt một phần tử, đổi chỗ, sinh hoán vị nhờ vector nghịch thế,… Ở chương 3 ta sẽ nghiên cứu
về phương pháp tìm hoán vị từ vector nghịch thế và tính toán song song hóa
2.2.2.4 Bài toán phân hoạch
Phân hoạch tập hợp là phân chia các phần tử của một tập hữu hạn thành các tập con khác rỗng và không có phần tử chung
Các tập con A1, A2,…Ak được gọi là các khối của phân hoạch π
Bài toán được đặt ra là tìm tất cả các phân hoạch của tập X
Ví dụ: phân hoạch của tập 4 phần tử là: {{1234}}, {{123},{4}}, {{124},{3}}, {{12},{34}}, {{12},{3},{4}}, {{134},{2}}, {{13},{24}}, {{13},{2},{4}}, {{14},{23}}, {{1},{234}} {{1},{23},{4}}, {{14},{2},{3}}, {{1},{24},{3}}, {{1},{2},{34}}, {{1},{2},{3},{4}}
Trang 33CHƯƠNG 3 ỨNG DỤNG TÍNH TOÁN SONG SONG VÀO BÀI TOÁN TỔ HỢP
Chương 2 đã trình bày lý thuyết về toán tổ hợp cũng như các bài toán liệt kê có
độ phức tạp lớn Ở chương này tập trung trình bày các ý tưởng và thuật toán để giải quyết các bài toán đã nêu Từ các thuật toán tính toán tuần tự đơn giản ta vận dụng các phương pháp phân rã bài toán các dữ liệu đầu vào, đầu ra và phân cho các bộ xử lý thực hiện đồng thời Từ đó đề xuất các thuật toán xử lý song song
3.1 Bài toán sinh dãy bị chặn
Theo chương 2 trình bày việc sinh dãy bị chặn có thể liệt kê bằng cách liệt kê từ điển thông thường, ta xây dựng thuật toán tuần tự cho bài toán sinh dãy bị chặn:
3.1.1 Xây dựng thuật toán tuần tự
Thuật toán 1: sinh tất cả dãy bị chặn
) với a = max {(g1-s1+1),(g2-s2+1),…,(gn-sn+1)}
3.1.2 Xây dựng thuật toán song song
Ý tưởng thuật toán bắt đầu từ việc xét thấy bài toán yêu cầu tìm tất cả các dãy bị chặn T nằm trong 2 dãy biên S và G có số lượng phần tử là n Áp dụng phương pháp phân rã dữ liệu đầu vào ta thấy việc tìm các dãy bị chặn T có thể chia thành các đoạn
Trang 34nhỏ để tìm Có nghĩa là trong khoảng giữa S và G ta chọn ra một số dãy bị chặn để có thể trở thành các dãy biên con trong đoạn con mới
Ta có thể chia dãy n phần tử thành 2 phần, phần 1 với p phần tử đầu và phần 2 với n-p phần tử còn lại Ta tìm các dãy t’ là dãy bị chặn nằm trong khoản S’ và G’ có p phần tử đầu tiên của dãy S, G ban đầu
Gọi các dãy S1, S2,… là các dãy chặn con min và các dãy G1, G2,… là các dãy chặn con max Việc tìm các dãy chặn con min ta có thể thêm vào bên phải dãy chặn con t’ (có p phần tử) các phần từ của S từ phần tử thứ p+1, tương tự việc tìm các dãy chặn con max ta có thể thêm từ dãy t’ (có p phần tử) các phần từ của G từ phần tử thứ p+1 Như minh họa dưới đây:
Thuật toán 2: song song sinh tất cả dãy bị chặn
Trang 355.4 Gửi s[i], g[i] ở bước 3 đến tất cả các bộ xử lý phụ 5.5 Gửi (cj đến pj (j=1,…,k)
End;
6 // k bộ xử lý phụ thực hiện đồng thời,
Begin
6.1 Nhận dữ liệu 6.2 Tạo sj bằng cách chèn các phần tử s[i] vào bên phải của cj(j=1,…,k) //j là chỉ số của k bộ xử lý phụ
6.3 Tạo gj bằng cách chèn các phần tử g[i] vào bên phải của cj(j=1,…,k) //j là chỉ số của k bộ xử lý phụ
6.4 tj[i]:=Sinh dãy bị chặn (sj(i), gj(i)), j=1,…,k, i=1,…,n //theo thuật
toán 1
6.5 In kết quả 6.6 Gửi thông tin về bộ xử lý chính
End;
7 End
3.2 Bài toán tìm tập con
3.2.1 Xây dựng thuật toán tuần tự
Như chương 2 của luận văn có trình bày, các kết quả tập con của tập cho trước có thể biểu diễn dưới dạng dãy nhị phân có độ dài n phần tử được xác định Nhận thấy các dãy nhị phân trong bảng biểu diễn đều là dãy (a1 a2 … an) có n phần tử thoải điều kiện 0 ≤ ai ≤ 1, i ∈ (1 … n) Nên bài toán tìm tất cả các tập con của một tập hợp ta có thể suy ra từ bài toán tìm dãy bị chặn với s=(0 0…0) và g=(1 1…1)
Thuật toán 3: tìm tập con
1 Begin
2 Nhập n và tập hợp X ={x1 x2 … xn}
3 s[i]:=0, i = 1, … , n
4 g[i]:=1, i = 0, … , n
5 Thuật toán 1 sinh tất cả các dãy số bị chặn t thỏa s ≤ t ≤ g
6 Thuật toán 4 chuyển các dãy số bị chặn t thành các tập hợp con của
X
7 End
Ở bước 6 ta có thuật toán riêng để xử lý như sau:
Thuật toán 4: chuyển các dãy bị chặn t thành các tập con X
1 Begin
2 t:=(t1t2…tn) //t dãy nghịch thế ngược đã được sinh ra ở trên