ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
-------------------------------------
HUỲNH LÊ ĐẠI NGỌC
TÍNH TỐN SONG SONG VÀ
ỨNG DỤNG VÀO BÀI TỐN TỔ HỢP
LUẬN VĂN THẠC SĨ
HỆ THỐNG THÔNG TIN
Đà Nẵng - Năm 2019
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
-------------------------------------
HUỲNH LÊ ĐẠI NGỌC
TÍNH TỐN SONG SONG VÀ
ỨNG DỤNG VÀO BÀI TỐ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
ii
LỜ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 hồ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 hồ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!
v
MỤ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 TỐN SONG SONG .........................................3
1.1. Tính tốn song song và các mơ hình tính tố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 tố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 tố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
vi
2.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 TỐN SONG SONG VÀO BÀI TỐ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 tố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 tố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 tốn liệt kê hố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 tốn ........................................................................30
3.3.4.1. Ví dụ 1: tìm tất cả các hố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 hố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
vii
4.4. Lập trình thử nghiệm bài tốn tìm hố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)
viii
DANH MỤC CÁC BẢNG
Số hiệu
Tên bảng
bảng
Trang
2.1.
Mơ phỏng lại bài tốn
16
2.2.
Ví dụ dãy bị chặn
18
2.3.
Biểu diễn tập con theo dạng nhị phân
19
3.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 tốn tuần tự và song song
41
4.3.
Kết quả thử nghiệm tính tốn song song
47
ix
DANH MỤC CÁC HÌNH
Số hiệu
hình
Tên hình
Trang
1.1.
Mơ hình kiến trúc song song SISD
3
1.2.
Mơ hình kiến trúc song song SISD
4
1.3.
Mơ hình kiến trúc song song MISD
4
1.4.
Mơ hình kiến trúc song song MISD dãy CPU
5
1.5.
Mơ hình MIMD chia sẻ bộ nhớ
5
1.6.
Mơ hình MIMD truyền thơng điệp
6
1.7.
Mơ hình PRAM
7
1.8.
Các giai đoạn xây dựng thuật tốn song song
8
4.1.
Trạng thái của một thread
34
4.2.
Mơ hình socket
36
4.3.
Một phần kết quả tìm tập con có 25 phần tử theo thuật tốn tuần
tự
39
4.4.
Kết quả thời gian tìm tập con theo thuật tốn tuần tự
40
4.5.
Kết quả tìm tập con 20 phần tử song song với 2 bộ xử lý
40
4.6.
Kết quả thời gian tìm tập con bằng thuật tốn song song
41
4.7.
Thời gian xử lý bài toán liệt kê hoán vị theo thuật toán tuần tự
43
4.8.
Các tập tin kết quả của bài toán liệt kê hoán vị tuần tự
43
4.9.
Kết quả cụ thể trong từng tập tin
44
4.10.
Giao diện phần server của chương trình tính tốn song song tìm
hốn vị
44
4.11.
Giao diện phần client của chương trình tính tốn song song tìm
hốn vị
45
4.12.
Kết quả thực thi chương trình tính tốn song song
45
4.13.
Các tập tin kết quả của bài toán liệt kê hoán vị song song
46
4.14.
Nội dung tập tin kết quả của bài toán liệt kê hoán vị song song
47
x
DANH MỤC CÁC BIỂU ĐỒ
Số hiệu
biểu đồ
Tên biểu đồ
Trang
4.1.
Biểu đồ thời gian tính tốn tuần tự, tính tốn song song
42
4.2.
Biểu đồ so sánh thời gian tính tốn giữa hai thuật toán
48
1
MỞ ĐẦ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ử. Tố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 tốn cơ bản của
tố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 tốn có độ phức tạp cao, khối
lượng tính tốn lớn và thời gian tính tốn khá dài gây ra những khó khăn cho việc tính
tốn.
Trong phương pháp tính tố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 tốn phương pháp tính tốn tuần tự. Để giải quyết
một u cầu, bài tốn thì thuật tố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 tốn xử lý ngày càng lớn. Việc tính
tốn tuần tự theo truyền thống khơng cịn đáp ứng tốt nhu cầu lượng tính tố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 tốn một bài tốn phức tạp. Tất cả đã mở
ra một thời đại mới, thời đại của tính tốn song song.
Tính tốn song song là một hình thức tính tố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 tốn lớn chia thành những
phần nhỏ có thể tính tốn độc lập với nhau một cách đồng thời.
Tính tốn song song và ứng dụng tính tố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 tố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 tốn song song và bài toán tổ hợp.
2
- Đề xuất giải pháp tính tốn song song để tính tốn bài tốn tổ hợp nhằm tăng
hiệu quả tình tốn, tăng hiệu suất tính tốn trên máy tính, hỗ trợ tính tố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 tố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 tốn song song, các mơ hình máy tính, các mơ hình
tính tố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 tốn song song vào bài tố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 tốn tính tốn song song trên bài tốn tổ hợp.
- Lập trình ứng dụng tính tốn song song vào bài toán tổ hợp bằng thư viện
Thread để thử nghiệm thuật tố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 tốn song song, các mơ hình tính tốn song
song, cách xây dựng thuật tố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 tố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 tố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.
3
CHƯƠNG 1
TỔNG QUAN TÍNH TỐN SONG SONG
1.1. Tính tốn song song và các mơ hình tính tố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 tốn song song là một hình thức tính tốn mà trong đó nhiều phép tốn
được thực hiện đồng thời với nhau, những tính tố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 tố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 tố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
tố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
4
1.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 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.
5
Hì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 tố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ý đó.
6
Hì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 tố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 tố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 tốn trên thuật tố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ó q một bộ nhớ được phép
ghi.
7
- 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.
CU
...
P1. Bộ nhớ riêng 1
...
P2. Bộ nhớ riêng 2
...
...
Pk. Bộ nhớ riêng k
Mạng kết nối
Bộ nhớ chung
...
Hình 1.7. Mơ hình PRAM
Trong mơ hình trừu tượng PRAM này thì độ phức tạp của một thuật toán song
song sẽ được quy ra số bước gửi và nhận kết quả.
Độ phức tạp được quy ra số bước để gửi và nhận kết quả được đánh giá theo hàm
log. Ví dụ, trong [16, tr. 273-274] Seyed H. Roosta đã phân tích, chứng minh được
thời gian tính của thuật toán song song ký hiệu Tk trên k bộ xử lý tìm cây khung
(spanning tree) trên đồ thị n đỉnh là: Tk=O(n2/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 tốn. Tương tự như vậy,
thuật tố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(n2log k) và thời gian tính tốn
là O(n3/k).
Bên cạnh đó, chúng ta cần lưu ý rằng thời gian tính tố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 tốn tuần tự
và song song là như nhau. Hơn nữa, thời gian thực hiện thuật tố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.
8
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 qt cho máy tính song song kiểu MIMD.
1.3. Thuật tố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 tốn song song từ một thuật tố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 tốn song song
Phân rã: Là cơng việc sau khi đã xác định và phân tích bài tốn. Các cơng việc
tính tố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 tố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 tốn…
9
Truyề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 tố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 tố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 tốn.
1.3.2. Ngun 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 tốn theo độ phức tạp.
- Ngun lý hình ống: Thực hiện khi bài tố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.
-
Ngun 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.
Ngồ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 tốn.
-
1.3.3. Các cách tiếp cận trong thiết kế
Trong tính tố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.
10
-
Xây dựng những thuật toán song song từ những thuật tố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ế.
1.3.4. Phân rã
Trong các giai đoạn thì giai đoạn phân rã bài tốn là một trong những bước quan
trọng nhất, giúp hình thành ý tưởng và phương pháp để thực hiện tính tốn song song.
Ta có một số phương pháp phân rã như sau:
1.3.4.1. Phân rã đệ quy
Phân rã đệ quy là phương pháp giải bài tốn hoặc thuật tốn gọi đến chính nó
nhiều lần để xử lý các bài toán con nhỏ hơn, kết quả bài toán con đơn giản nhất sẽ
được sử dụng để tính tốn ngược lại cho đến khi tìm ra kết quả của bài tốn ban đầu.
Ví dụ: Xét bài tốn tính n! với n là một số ngun dương.
Ta phân tích bài tốn:
n! = n*(n-1)!
(n-1)! = (n-1)*(n-2)!
…
1! = 1 ;
Khi chúng ta phân tích đến bài tồn nhỏ nhất là 1!=1 và từ đó ta đưa các giá trị đã
tính tốn được từ các bài tốn nhỏ để tình ngược lên các bài tố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 tốn gồm 2 bước:
- Bước 1: Phân rã dữ liệu mà các tính tố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 tốn riêng biệt
tạo ra sự phân rã của các tính tố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 tố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 tốn độc lập mà khơng làm sai lệch kết
quả cuối cùng.
Ví dụ: trong bài tố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 tốn tố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 tốn có cấu trúc tính tố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
11
tiế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 tốn mà các tính tố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 tố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 tốn song song khơng chỉ phụ
thuộc vào mơ hình tính tố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:
Sp = TS /Tp
Trong đó,
TS là thời gian thực hiện tính tốn trên một bộ xử lý
Tp là thời gian thực hiện tính tốn trên p bộ xử lý.
Để đánh giá được độ phức tạp tính tốn của các thuật tốn song song, ngồi số
bước tính tố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.
tp = tcomp + tcomm
Trong đó, tcomp là thời gian tính tốn và tcomm thời gian truyền thơng dữ liệu.
12
CHƯƠNG 2
TỐN HỌC TỔ HỢP
Tố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ì Tốn tổ hợp mới hình thành được nên một ngành tố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 tốn tổ hợp thì tố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
u cầu bài tốn. Thơng thường bài tốn đếm được sử dụng rất hiệu quả trong các bài
tố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 tố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 tố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 tốn này thường có lượng tính tố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 tố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 tố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 tốn hiệu quả.
Từ đó tố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 hốn, q 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ữ
13
cá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:
A\B={x\xA&xB}
-
Phần bù: Cho tập X và A X. Phần bù của A (trong X) là tập: ̅ = X \ A
-
Phép hợp: Hợp của A và B, ký hiệu A B là tập
A B={x \ x A hoặc x B}
-
Phép giao: Giao của A và B, ký hiệu A B là tập
A B={x\ x A&x B }
-
Tích Đêcac (phép ghép) hai tập hợp thành một tập hợp mới :
A x B = {(a,b) | a b B}
Hoặc A1 x A2 x … x Ak = {(a1,a2,…,ak) | ai i=1,2,…,k}
2.1.2. Các nguyên lý cơ bản
Nguyên lý cộng
Đố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 đó
S= X1+ X2+ ... + Xn
Trường hợp riêng hay dùng của nguyên lý cộng: Nếu A là một tính chất có trên
X thì N(A) = N(X) – N( ̅ )
Ví dụ: trong lớp có 10 học sinh nam và 5 học sinh nữ. Để chọn 1 bạn đứng lên
phát biểu thì thầy giáo có thể có 10+5 = 15 cách chọn.