Tải bản đầy đủ (.pdf) (78 trang)

Nghiên cứu tìm hiểu ứng dụng sóng đệ qui phân tán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 78 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------

ĐẶNG CHUNG KIÊN

TÊN ĐỀ TÀI LUẬN VĂN

Chuyên ngành : XỬ LÝ THÔNG TIN VÀ TRUYỀN THÔNG

LUẬN VĂN THẠC SĨ KHOA HỌC
XỬ LÝ THÔNG TIN VÀ TRUYỀN THÔNG

NGƯỜI HƯỚNG DẪN KHOA HỌC :
TS HÀ QUỐC TRUNG

Hà Nội – 2010


LỜI CAM ĐOAN

Em xin được cam đoan luận văn này không sao chép từ các luận văn khác. Các nội
dung được đề cập trong luận văn do chính em nghiên cứu và biên soạn, các phần tham
khảo từ các tài liệu chuyên môn khác được ghi rõ nguồn gốc và tác giả.
Em xin cam đoan những nội dung nêu ra ở trên, nếu không đúng sự thật em xin chịu
mọi trách nhiệm.

Tác giả luận văn
ĐẶNG CHUNG KIÊN



 
MỤC LỤC

Trang phụ bìa
Lời cam đoan
Danh mục các ký hiệu, các chữ viết tắt
Danh mục các hình vẽ
PHẦN MỞ ĐẦU
PHẦN NỘI DUNG
CHƯƠNG I: KHÁI NIỆM VÀ HÌNH THỨC HÓA SÓNG ĐỆ QUY
PHÂN TÁN.
I. Khái niệm sóng đệ quy phân tán:
1. Lịch sử phát triển
2. Sóng đệ quy - công cụ đồng bộ hóa
II. Công cụ thực hiện sóng đệ quy phân tán
III. Các dạng sóng đệ quy phân tán
1. Sóng đệ quy tuần tự
2. Sóng đệ quy trên cây bao phủ
3. Sóng đệ quy ngập lụt
IV. MÔ HÌNH TOÁN CỦA SÓNG ĐỆ QUY PHÂN TÁN
1. Mô hình toán
2. Ví dụ về mô hình toán sóng đệ quy phân tán
3. Xây dựng giải thuật trên mô hình toán
V. Xây dựng giải thuật phân tán bằng sóng đệ quy
1. Định nghĩa tập các giá trị cục bộ
2. Lựa chọn phương phức dò tìm các tiến trình lân cận
3. Thiết kề pha đi
4. Thiết kế pha về
5. Liên kết các giá trị
VI. BÀI TOÁN TÌM ĐƯỜNG NGẮN NHẤT VÀ SÓNG ĐỆ QUY

PHÂN TÁN
CHƯƠNG II: TÌM HIỂU MỘT SỐ BÀI TOÁN PHÂN TÁN
I. BÀI TOÁN SNAPSHOT TRONG HỆ THỐNG PHÂN TÁN
1. Sơ lược về bài toán snapshot:
2. Các khái niệm cơ bản trong bài toán snapshot
3. Thuật toán snapshot cho hệ thống có các kênh truyền theo mô
hình FIFO
a. Nguyên lý
b. Thuật toán Chandy-Lamport
c. Chứng minh thuật toán
d. Sự kết thúc của thuật toán
e. Mã giả của thuật toán
4. Thuật toán snapshot cho hệ thống có kênh truyền không theo mô

Trang
1
2
5
7
8
10
10
12
13
13
14
16
16
17
18

19
19
21
21
22
23
24
24
24
25
25
36
36
36
36
41
41
42
44
48
48
50

Trang 2 


 
hình FIFO
a. Sơ lược về thuật toán snapshot trên hệ thống phi FIFO
b. Thuật toán Lai-Yang

II. BÀI TOÁN ELECTION TRONG HỆ PHÂN TÁN
1. Sơ lược về bài toán election trong hệ phân tán
2. Thuật toán Bully
3. Thuật toán Ring
CHƯƠNG III: ỨNG DỤNG SÓNG ĐỆ QUY TRONG VIỆC GIẢI
QUYẾT CÁC BÀI TOÁN PHÂN TÁN
I. BỐI CẢNH THỰC HIỆN SÓNG ĐỆ QUY PHÂN TÁN:
II. ỨNG DỤNG SÓNG ĐỆ QUY TRONG BÀI TOÁN SNAPSHOT
III. ỨNG DUNG SÓNG ĐỆ QUY TRONG BÀI TOÁN ELECTION
IV. ĐÁNH GIÁ VÀ HIỆU CHỈNH THUẬT TOÁN SÓNG ĐẸ QUY
PHÂN TÁN
CHƯƠNG IV: ĐỀ XUẤT MÔ HÌNH CÀI ĐẶT SÓNG ĐỆ QUY
PHÂN TÁN
I. Các thành phần cần thiết khi triển khai sóng đệ quy phân tán
II. Đề xuất Message Passing Interface cho sóng đệ quy
1. MPI và lịch sử phát triển
2. Cấu trúc chung một ứng dụng MPI
3. Các khái niệm cơ bản về MPI
a. Một số khái niệm cơ bản
b. Giao tiếp điểm điểm (Point-to-Point Communication)
4. MPICH2
PHẦN KẾT LUẬN
TÀI LIỆU THAM KHẢO
PHỤ LỤC 1: HƯỚNG DẪN CÀI ĐẶT MPICH2 TRÊN MÔI
TRƯỜNG WINDOWS

50
51
52
52

53
55
57
57
57
62
64
66
66
67
67
68
69
69
71
72
73
75
77

Trang 3 


 
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

Chữ kí hiệu, chữ viết tắt
CHƯƠNG I
RPC


GR = ( X , Γ , C )
Γ( x )

r
PC(x,y)
PCmin(x,y)
C(x,y)
Ch(j)={x0=r,xi1,xi2,…,xj}
Rsons

Ý nghĩa
Remote Procedure Call, lời gọi thủ tục từ xa
Đồ thị trọng số và hướng
Tập hợp các node hàng xóm của node x.
Node gốc
Cost của đường đi (x,y)
Cost của đường ngắn nhất giữa (x,y)
Cost của cung (x,y)
Đường từ gốc đến node j.
Tập các tiến trình con của tiến trình hiện tại

CHƯƠNG II
e = (p,s,s’,c,M)
seq = (ei : 0 ≤ i ≤ n )
S i +1 = next ( S i , ei ); 0 ≤ i ≤ n

Cij
SCij

{


GS = U LSi , U SCij
i

i, j

}

FIFO
client-server
CHƯƠNG III
Γ (i )
callers _ list (i )

Sự kiện e xảy ra trên tiến trình p có trạng thái là s,
s’ là trạng thái sau khi e xảy ra thì có tin nhắn M
trong kênh truyền c liên quan đến tiến trình p.
Một chuỗi tuần tự các sự kiện trong các tiến trình
của một hệ thống phân tán
Trạng thái tiếp theo của trạng thái Si
Kênh truyền từ tiến trình i đến tiến trình j
Trạng thái của kênh truyền Cij
Trạng thái toàn cục của hệ thống
First in first out
Mô hình máy chủ - máy khách
Tập hợp các node hàng xóm của i
Tập hợp các node có lời gọi đến i

CHƯƠNG IV
Deadtimeseq _ Wave

Deadtime flood _ Wave

Deadtimespanningtree _ Wave

Thời gian chết của toàn bộ hệ thống khi thực hiện
sóng đệ quy phân tán dạng tuần tự
Thời gian chết của toàn bộ hệ thống khi thực hiện
sóng đệ quy phân tán ngập lụt
Thời gian chết của toàn bộ hệ thống khi thực hiện
sóng đệ quy phân tán trên cây bao phủ
Trang 4 


 
MPI
Java RMI
ISO
HPC
MPICH2

Message Passing Interface
Java Remote Method Invocation
International Organization for Standardization
High Performance Computer, máy tính hiệu năng
cao
High-performance and Widely Portable MPI,
chuẩn MPI được thiết kế cho hiệu năng cao và khả
năng áp dụng rộng rãi trên nhiều môi trường

Trang 5 



 
DANH MỤC HÌNH VẼ

Hình 1: Pha đi và pha về trong sóng đệ quy phân tán
Hình 2: Ví dụ về mô hình sóng đệ quy phân tán
Hình 3: Loại bỏ vòng trong tìm đường ngắn nhất
Hình 4: Mạng bài toán tìm đường ngắn nhất
Hình 5: Sóng đi và về trong bài toán tìm đường ngắn nhất
Hình 6: Các thành phần cơ bản trong trạng thái toàn cục
Hình 7: bài toán đơn giản gồm hai tiến trình
Hình 8: Các chiều đi và về của thẻ trên các kênh
Hình 9: Một ví dụ đầy đủ về quá trình gửi nhận token
Hình 10: Ví dụ chuyển tiền trong hệ thống gồm 2 tài khoản
Hình 11: Quá trình nhận marker và ghi lại trạng thái
Hình 12: Thuật toán Chandy-Lamport
Hình 13: Quá trình gửi marker trên hệ thống 2 tài khoản
Hình 14: Một chu trình trên thuật toán Chandy-Lamport
Hình 15: Một ví dụ snapshot trong hệ thống ngân hàng
Hình 16: Lắt cắt thể hiện đúng trạng thái toàn cục hệ thống
Hình 17: Tính đúng đắn của thuật toán
Hình 18: Trạng thái marker trở về
Hình 19: Thuật toán Bully
Hình 20: Thuật toán Ring
Hình 21: Ví dụ về một mạng chạy thuật toán snapshot
Hình 22: Pha đi của sóng snapshot trên mạng
Hình 23: Mô hình cây của mạng thực hiện sóng snapshot
Hình 24: Mạng thực hiện thuật toán election
Hình 25: Pha đi và về của sóng áp dụng cho thuật toán election.


Trang
12
21
29
34
34
36
39
39
40
41
42
42
43
43
44
45
46
46
54
56
57
58
59
62
63

Trang 6 



 
PHẦN MỞ ĐẦU
LÝ DO CHỌN ĐỀ TÀI:
• Các hệ thống phân tán đang được phát triển ngày càng lớn mạnh, các ứng dụng
phân tán đang có trong rất nhiều các hệ thống, do vậy việc nghiên cứu một
phương pháp xử lý các bài toán phân tán là cần thiết.
• Sóng đệ quy phân tán là một công cụ mạnh trong việc giải quyết các bài toán
phân tán.
LỊCH SỬ NGHIÊN CỨU:
• 1982: Trong bài báo “Echo algorithm” một khái niệm tương tự sóng đã được đề
cập.
• 1991: Trong tác phẩm “La récursivité mode de programming distribute” của tác
giả G. Florin, R. Gomez, I. Lavalleé đã đề cập chi tiết về sóng đệ quy phân tán.
• 1993: Xuất phát từ một bài báo “Recursive Distributed Programming scheme”
của các tác giả G. Florin, R. Gomez, I. Lavalleé.
• 2005: Trong bài báo “Sóng đệ quy phân tán” của các tác giả Hà Quốc Trung,
Marc Bùi đã tổng kết đưa ra phân loại sóng và mô hình toán học cho sóng đệ
quy phân tán cũng như là các gợi ý về định hướng phát triển.
MỤC ĐÍCH NGHIÊN CỨU CỦA LUẬN VĂN:
• Nghiên cứu các vấn đề liên quan đến sóng đệ quy phân tán như khái niệm, mô
hình, khả năng áp dụng và cách thức cài đặt cho một ngôn ngữ cụ thể.
TÓM TẮT LUẬN ĐIỂM CƠ BẢN, CÁC ĐÓNG GÓP CỦA TÁC GIẢ






Khái niệm sóng đệ quy phân tán, phân loại.

Mô hình toán học sóng đệ quy phân tán.
Quy trình xây dựng sóng đệ quy phân tán.
Ứng dụng sóng đệ quy phân tán vào một số bài toán phân tán.
Đề xuất mô hình cài đặt cho sóng đệ quy phân tán

PHƯƠNG PHÁP NGHIÊN CỨU:
• Các khái niệm được hình thức hóa bằng các mô hình toán học và mã giả
(Pseudocode).
• Đi từ các mô hình, sau đó áp dụng vào các ngôn ngữ cụ thể.

Trang 7 


 
Trong quá trình nghiên cứu luận văn em đã gặp phải rất nhiều khó khăn nhưng được
sự giúp đỡ rất tận tình của TS. HÀ QUỐC TRUNG cũng như các bạn bè trong lớp
XLTT&TT em đã hoàn thành được luận văn. Thời gian thực hiện luận văn còn hạn
hẹp cũng như kiến thức bản thân còn có những hạn chế nhất định nên luận văn không
tránh khỏi những thiếu sót, rất mong nhận được ý kiến đóng góp của các thầy cô và
bạn bè trong lớp. Mọi thư từ xin được gửi về địa chỉ
Em xin chân thành cám ơn thầy HÀ QUỐC TRUNG cùng toàn thể bạn bè
trong lớp XLTT&TT khóa 2008-2010.
Hà nội, ngày 10 tháng 10 năm 2010
Học viên
ĐẶNG CHUNG KIÊN

Trang 8 


 

PHẦN NỘI DUNG
CHƯƠNG I: KHÁI NIỆM VÀ HÌNH THỨC HÓA SÓNG ĐỆ QUY PHÂN TÁN
Trong các hệ thống song song, khối lượng tính toán được chia ra thực hiện trên
nhiều bộ vi xử lý. Với một số các hệ thống song song, topology và số lượng các bộ vi
xử lý kết nối vào hệ thống thay đổi trong khi chương trình được thực hiện. Để có thể
tiến hành phân phối cho các bộ vi xử lý, cần có các cơ chế điều khiển việc phân phối
công việc cho các bộ vi xử lý. Sóng đệ qui, một cấu trúc lập trình phân tán bằng các lời
gọi đệ qui phân tán cho phép
• Lựa chọn bộ vi xử lý trong khi chương trình song song đang được thực hiện..
• Quá trình lựa chọn có thể được tùy biến theo nhu cầu của chương trình cũng
như theo sự thay đổi của phân bố tài nguyên.
Nguyên lý cơ bản của sóng đệ qui là thực hiện song song các lời gọi thủ tục một cách
tự động, cung cấp khả năng cài đặt các thuật toán đệ qui trên các hệ thống song song.
Từ khi bắt đầu phát triển lập trình phân tán, các khái niệm được sử dụng là truyền
tin nhắn có đến khi xuất hiện lời gọi thủ tục từ xa (RPC Remote Procedure Call). RPC
thay thế cho cơ chế gửi tin nhắn được sử dụng trong cách xây dựng các thuật toán dựa
trên client-server và hơn nữa là các hệ điều hành phân tán hướng đối tượng. Nó được
thực thi trong các hệ điều hành một cách hiệu quả bao gồm 2,3 tin nhắn cho mỗi lần
gọi. Trong thực tế RPC được xem như một công cụ chính cho việc thiết kế hướng đối
tượng khi chương trình đầu ra phải chạy được trên môi trường phân tán.
Các cấu trúc điều khiển như “if then else”, “do loop” hoặc “while loop” là cơ bản
trong lập trình tuần tự. Cần một cấu trúc điều khiển phức tạp tương tự trong lập trình
phân tán. Cấu trúc điều khiển chính liên quan đến RPC là khái niệm các luồng và các
hoạt động song song của các luồng thực hiện. Sự tính toán lan truyền hay sóng tính
toán là khái niệm mới trong cấu trúc điều khiển phân tán, nó có thể được sử dụng để
xây dựng giải pháp mới cho nhiều vấn đề phân tán.
Trong lập trình tuần tự, sự lặp lại và đệ quy là hai kiểu lập trình bổ sung cho nhau.
Thiết kế đệ quy dễ dàng trong các trường hợp có sự lặp lại. Bởi vậy áp dụng đệ quy
trong giải pháp đệ quy phân tán sẽ cho ra một cấu trúc rất mạnh. Trong luận văn này
chúng ta sẽ tìm hiểu khái niệm sóng đệ quy. Nó được định nghĩa bởi một thủ tục được

gọi trong quá trình thực thi các sự thực thi tự nó nếu sóng đệ quy xảy ra. Chúng ta xem

Trang 9 


 
xét đệ quy phân tán được thực thi ở xa là được thực hiện bởi một bộ xử lý ở xa bằng sử
dụng một RPC.
Điểm thú vị nhất của lập trình đệ quy phân tán là phong cách tự nhiên, nó đưa ra
các thuật toán phân tán. Kiểu lập trình đệ quy phân tán không hạn chế số lượng các
máy tính đơn lẻ phân tán. Sự giải quyết vấn đề phân tán sử dụng sóng tính toán lan
truyền hoặc khái niệm phân tán lặp thể hiện trong giải pháp phân tán đệ quy cùng mới
các tin nhắn phức tạp.
Các bài toán đòi hỏi khối lượng tính toán lớn được giải quyết trên các hệ thống tính
toán song song. Các hệ thống này có thể là các máy tính song song siêu máy tính với
phần mềm và phần cứng đồng nhất, chuyên dụng, cũng có thể là các máy tính không
đồng nhất kết nối với nhau thông qua một mạng truyền thông. Trên các máy tính song
song, việc phân tải tính toán được thực hiện dựa trên giả thiết là topo mạng và số
lượng bộ vi xử lý đều đã được biết trước khi thực hiện chương trình. Trên hệ thống các
máy tính không đồng nhất, những thông tin này không có sẵn, chương trình song song
phải tự tìm kiếm các thông tin và phân phối tải tính toán theo các thông tin thu được.
Trong các trường hợp như vậy, cần một cơ chế tường minh hoặc ẩn để thu thập các
thông tin về tình trạng của các bộ vi xử lý, điều khiển việc phân phối các công việc
cho các bộ vi xử lý. Đồng thời, khi các thông số của hệ thống thay đổi, cũng cần có cơ
chế đảm bảo việc phân phối công việc phù hợp với sự thay đổi đã xảy ra. Thông
thường, việc này được thực hiện bằng các hệ thống hỗ trợ lập trình phân tán.
Tuy nhiên, phân phối công việc ở mức thấp có nhược điểm là không tận dụng được
các đặc điểm của bản thân thuật toán để thực hiện có hiệu quả trên cấu hình mạng. Để
giải quyết nhược điểm này, cần có những cấu trúc bậc cao cho phép chương trình có
thể thu thập các thông tin về các bộ vi xử lý và điều khiển (ở mức cao) quá trình phân

phối công việc. Cơ chế sóng phân tán cho phép thu thập các thông tin về hệ thống.
Trong lập trình tuần tự, lời gọi thủ tục cho phép phân chia công việc thành các công
việc nhỏ hơn để thực hiện. Việc sử dụng cơ chế lời gọi thủ tục cho phép xây dựng các
thuật toán rõ ràng, đơn giản, mạnh, nhưng lại làm giảm hiệu năng của thuật toán do sử
dụng ngăn xếp hệ thống để lưu trữ các thông tin trung gian. Các giải thuật phân tán đệ
qui thừa kế được khả năng biểu diễn, tính đơn giản, rõ ràng của các giải thuật đệ qui
tuần tự và tránh được việc sử dụng ngăn xếp nên không ảnh hưởng đến hiệu năng của
giải thuật. Các giải thuật phân tán đệ qui sử dụng cấu trúc lời gọi thủ tục từ xa (Remote
Procedure Call - RPC) để thực hiện việc gọi các thủ tục trên các bộ vi xử lý khác nhau.

Trang 10 


 
Việc kết hợp cấu trúc lời gọi thủ tục từ xa với cơ chế sóng phân tán cho phép xây dựng
các giải thuật phân tán đệ qui rõ ràng, đơn giản, cho phép thu thập thông tin của hệ
thống và điều khiển quá trình phân tán công việc trong hệ thống.
I. KHÁI NIỆM SÓNG ĐỆ QUY
Phần này sẽ đưa ra khái niệm sóng đệ quy, đây là một phương pháp lập trình để viết
những thuật toán phân tán. Cũng chú ý là thuật toán này được dùng để phát triển cho
các máy tính có kiến trúc bộ nhớ kiểu MIMD trong họ các hệ thống phân tán.
Một kỹ thuật cho việc thiết kế thuật toán phân tán là sóng đệ quy liên quan đến một
khái niệm tính toán khuếch tán (diffusing computation). Một sóng quảng bá thông tin
đến tất cả các địa điểm trong mạng, sau đó thu thập thông tin và chuyển ngược về nơi
đã phát đi thông tin quảng bá. Tuy nhiên đường thông tin về không nhất thiết phải
giống như đường thông tin quảng bá.

d

d


b

a

e

c

b

f

h

g

a

f

e

c

h

g

Hình 1: Pha đi và pha về trong sóng đệ quy phân tán

Trong hình, khi một sóng tới node h, sóng sẽ ngược lại nơi xuất phát. Để hiểu về khái
niệm sóng, chúng ta sẽ đi theo 3 cách nhìn:
• Cái nhìn về tổng quan về lịch sử khái niệm sóng đệ quy
• Một công cụ đồng bộ hóa.
• Cuối cùng là một định nghĩa chính thức của thuật toán sóng.

Trang 11 


 
1. Lịch sử phát triển:
Thuật toán sóng đầu tiên, vào năm 1982 Chang đã đưa ra trong một bài báo, một mô tả
thuật toán phân tán Echo. Bài báo này đã mô tả nguyên lý tương tự như sóng nhưng
thuật ngữ sóng chưa được đề cập đến. Mô tả thuật toán tiếng vọng được tạo nên bởi
các nguyên lý:
• Hoạt động cơ bản của thuật toán tiếng vọng là gửi đi các tin nhắn từ node
này đến node khác trong một mạng.
• Để đi qua hết mạng, có hai giai đoạn: một giai đoạn được tạo ra do các
khám phá (explorer), một giai đoạn dội lại được sinh ra bởi tiếng vang
(echo).
• Khi một sóng duyệt đến node đầu tiên, node tiếp theo sẽ phát đi các node
khác ngoại trừ node mà đã gửi tin nhắn khám phá đi (node này được gọi là
node hàng xóm đầu tiên). Một khám phá truyền đi các tiếng vang một cách
có hệ thống khi gặp một node đã đến bởi một khám phá khác.
• Khi đến đồng thời một node từ các khám phá khác nhau, node đó sẽ chọn
khám phá đầu tiền, các khám phá khác coi như là các tiếng vọng.
• Một node có thể truyền đi tiếng vọng đến hàng xóm đầu tiên chỉ khi nó nhận
được tiếng vọng của tất cả khám phá nó gửi đi.
• Tất cả khám phá và tiếng vọng mang theo thông tin về các node mà chúng
viếng thăm.

Thuật toán tiếng vọng hoạt động một cách song song và không đồng bộ sử dụng các
tin nhắn mang thông tin. Chúng có thể bắt đầu hoặc kết thúc trong một hoặc nhiều
node, các node phải hợp tác, nhất quán và khởi tạo các phần độc lập tham gia vào thuật
toán. Với dạng thuật toán này, Chang đã mang tới một kỹ thuật mới trong tính toán
phân tán là tính toán dạng sóng. Sau đó Raynal và Helary đã thể hiện thuật toán sóng
đầu tiên như một công cụ đồng bộ bằng cách đưa ra một định nghĩa chính thức cho
sóng.
2. Sóng như một công cụ đồng bộ hóa:
Raynal và Helary đã thể hiện một thuật toán để giải quyết vấn đề về graph, nó bao
gồm việc xây dựng một cây bao phủ cho mạng các bộ xử lý. Cây phải được xây dựng
với khoảng cách giữa các node n và node gốc trong mạng là giống nhau. Kết thúc quá
trình xử lý, bất kỳ process nào cũng biết kiến trúc cây mới và khoảng cách với node
gốc, ID của người tiền nhiệm và người kế thừa.
Node gốc là node khởi tạo, nó sẽ gửi đến mỗi láng giềng một tin nhắn. Sau một lúc,
nó nhận lại các tin nhắn ngược lại. Một quá trình tượng tự lại tiếp tục, sự gia tăng số
Trang 12 


 
lần gửi được thể hiện như một làn sóng. Mỗi thông điệp sẽ mang thông tin cần thiết
cho bất kỳ process để nhận diện được node tiền nhiệm và node kế thừa. Trong thực tế,
khi nó quay trở lại với 3 loại cờ được thiết lập: đã được đánh dấu, tiếp tục hoặc đã
hoàn thành. Phụ thuộc vào giá trị cờ từ một tiến trình x, tiến trình y có thể xóa nó đi
khỏi danh sách node kế thừa hoặc thêm nó vào danh sách node tiền nhiệm. Thuật toán
kết thúc khi node gốc nhận được cờ đã hoàn thành của các node kế thừa.
Khái niệm sóng như trình bày của thuật toán cho thây hai loại đồng bộ hóa: Đồng
bộ hóa địa phương: một tiến trình phải chờ cho đến khi nhận được tin nhắn lại của
những node hàng xóm. Đồng bộ hóa tổng thể: Quá trình khởi tạo của node gốc không
thể bắt đầu một vòng mới nếu nó không nhận được tin nhắn của tất cả các node kế
nhiệm.

II. Công cụ thực hiện sóng đệ quy phân tán:
Trước khi đến khái niệm sóng đệ quy thì ta phải xem khái niệm thủ tục, trong quá trình
thực thi thủ tục này gọi n các thực thi của nó ở xa một cách đồng thời. Từ đây nó thực
hiện một sóng đệ quy dẫn đầy một cây như sau:
• Gốc cây là nơi đầu tiên gọi thủ tục.
• Gốc và các lá liên quan đến khối thủ tục chờ tất cả các lời gọi đệ quy song song
dừng.
• Lá liên quan đến thực thi hiện tại của thủ tục hoặc liên quan đến sự dừng thực
thi không có lời gọi đệ quy.
Một thủ tục sóng đệ quy thường được gắn với một cấu trúc dữ liệu. Cấu trúc dữ liệu
bao gồm nhận diện tiến trình hiện tại, một tập các nhận diện các tiến trình trên các
node kế cận… Chúng ta giả sử tất cả các giao tiếp và đồng bộ giữa các tiến trình trên
các node đã được giải quyết bởi kiến trúc lời gọi thủ tục từ xa RPC (chuyển giao điều
khiển và các tham số đầu vào) và thủ tục thoát (trở về lời gọi thủ tục liên quan với
chuyển giao tham số đầu ra), không có dữ liệu bổ sung hoặc tin nhắn được truyền giữa
các thực thi ở xa của thủ tục trên các bộ xử lý khác nhau.
Để có thể thực hiện được các giải thuật sóng đệ quy, chúng ta cần có một số công cụ
được sử dụng để biểu diễn. Công cụ này bao gồm câu lệnh par để thực hiện gọi thủ tục
trên nhiều các tiến trình và cách thức gọi các tiến trình trên các bộ xử lý khác từ bộ xử
lý hiện tại.
Chúng ta xem xét n sự thực thi từ xa song song của một thủ tục, đầu tiên chúng ta cần
đưa ra một cấu trúc điều khiển chương trình cho thực thi đồng thời của n nhiệm vụ trên
cùng một bộ xử lý, chúng ta sử dụng lệnh par

Trang 13 


 
par




in

<domain>

do

Instruction block;
enddo;

Với mỗi tập giá trị tham số trong miền <domain> khối lệnh được định nghĩa trong câu
lệnh par sẽ được thực thi trong các tiến trình khác nhau trong các node trên miền. Câu
lệnh này kết thúc khi tất cả các luồng trên các tiến trình từ xa kết thúc và lệnh tiếp
theo sau lệnh par sẽ được thực hiện tiếp theo.
Khi thực hiện lệnh par chúng ta cần biết vị trí các node nơi tiến trình được thực hiện,
hay nói các khác là biết thông tin về các tiến trình khác để thực hiện, do vậy cần định
nghĩa ID cho các tiến trình mà mỗi thủ tục thực thi từ xa, chúng ta xem xét cấu trúc
thực hiện lời gọi thủ tục ở xa của một thủ tục (tên là ) trên một tiến trình
từ xa (tiến trình có ID là proc_id):
() on

Một tiến trình sẽ được gán cho một giá trị ID để nhận biết và các giá trị ID này tạo
thành một miền định nghĩa các tiến trình.
Việc thực thi của sóng đệ quy được xây dựng một mô hình cây của các tiến trình đang
hoạt động trong mạng và quan tâm đến quan hệ giữa tiến trình gọi và tiến trình được
gọi, theo ngôn ngữ thông dụng thì là quan hệ cha con, ở đây node gốc của cây chính là
khởi đầu của sự tính toán.
Với hai cấu trúc ở trên chúng ta có thể biểu diễn các lời gọi phân tán đệ quy như trong
cấu trúc sóng đệ quy dưới đây.

type processor_identifier is …;


kiểu định nghĩa cho một tên bộ xử

procedure recursive_wave (<các_tham_số>) is
<Phần_khai_báo>
i: processor_identifier;
processor_group : setof processor_identifier;
begin
--Khối lệnh A tính toán tuần tự
<Khối_lệnh_A>
--Tiếp theo là lệnh điều kiện if then else thực hiện dừng sóng
--đệ quy khi các điều kiện

Trang 14 


 
--thỏa mãn
if <điều_kiện> then
<Khối_lệnh_B>
--Lệnh par sau đó cho phép thực thi đồng thời trên mỗi
-- bộ xử lý của một nhóm
-- lời gọi đệ quy của thủ tục hiện tại
par i in processor_group do
<Khối_lệnh_C>;
--f() thể hiện toán tử thực hiện trên các
--tham số bởi phần
--đầu của thủ tục

recursive_wave (f) on i;
<Khối_lệnh_D>;
enddo;
<Khối_lệnh_E>;
endif;
<Khối_lệnh_F>;
end recursive_wave;

III. Các dạng sóng đệ quy phân tán
1. Sóng đệ quy tuần tự:
Sóng đệ quy tuần tự là loại sóng đơn giản nhất sử dụng một lời gọi đệ quy trong một
hệ thống phân tán là gọi cùng một thủ tục trên chỉ một tiến trình trên một bộ xử lý
khác từ xa. Cây thực thi được giản lược thành một chuỗi các nhóm thủ tục trên một
chuỗi các tiến trình. Tại bất kì một thời điểm chỉ có một thủ tục chạy gọi một thủ tục
đệ quy trên một tiến trình khác. Trong lập trình phân tán, topology liên quan đến sóng
đệ quy tuần tự là virtual ring, mỗi bộ xử lý được biết đến với bộ xử lý kế cận (bộ xử lý
sẽ được gọi đệ quy) và bộ xử lý đã gọi bộ xử lý hiện tại. Bởi vậy sóng đệ quy tuần tự
được định nghĩa bởi cấu trúc sau:
type processor_identifier is …;


kiểu định nghĩa cho một tên bộ xử

successor: processor_id;
--Khai báo các bộ xử lý kế cận
procedure seq_rec_wave (<các_tham_số>) is

Trang 15 



 
<Phần_khai_báo>
begin
<Khối_lệnh_A>
if <điều_kiện> then
<Khối_lệnh_B>
seq_rec_wave(f(<các_tham_số>)) on successor;
<Khối_lệnh_E>;
endif;
<Khối_lệnh_F>;
end seq_rec_wave;

Trong trường hợp này cây thực hiện của thuật toán trở thành một chuỗi và chỉ có một
tính toán thực sự duy nhất tại tiến trình cuối của chuỗi. Có một số ví dụ sẽ sử dụng
sóng đệ quy tuần tự như bài toán election, termination detection … được thực hiện trên
giao thức virtual ring. Phần này sẽ được chi tiết trong chương III khi bàn về ứng dụng
sóng đệ quy phân tán trong xử lý bài toán election.
2. Sóng đệ quy trên cây bao phủ
Bước mở rộng tiếp theo sau sóng đệ quy tuần tự là việc thực hiện sóng đệ quy trên một
cây bao phủ với giả thiết là đã có một cây bao phủ logic trên hệ thống phân tán, khi đó
một tiến trình sẽ có duy nhất một tiến trình cha trừ gốc và một tiến trình con trừ các lá.
Có rất nhiều thuật toán hiệu quả để xây dựng một cây bao phủ (tham khảo [10], [11])
Sự tính toán được khởi tạo từ gốc của cây bao phủ, lời gọi đệ quy kết thúc khi sóng
đến lá cây vì lá không có node con. Định nghĩa bởi mã như sau:
type processor_identifier is …;


kiểu định nghĩa cho một tên bộ xử

sons: setof processor_id;

procedure str_wave (<các_tham_số>) is
<Phần_khai_báo>
i: processor_id;
begin
<Khối_lệnh_A>
if

not empty (sons) then
<Khối_lệnh_B>
par i in sons do

Trang 16 


 
<Khối_lệnh_C>;
str_wave(f(<các_tham_số>)) on i;
<Khối_lệnh_D>;
enddo;
<Khối_lệnh_E>;
endif;
<Khối_lệnh_F>;
end str_wave;

3. Sóng đệ quy ngập lụt:
Sóng đệ qui ngập lụt cho phép có thể thực hiện trên các hệ thống mà topology chưa
được biết trước. Bằng sóng đệ qui ngập lụt, chúng ta có thể nhận được các thông tin về
tình trạng của hệ thống. Do đó sóng đệ qui ngập lụt thông thường là giai đoạn đầu tiên
của các giải thuật phân tán. Kỹ thuật truyền thông báo ngập lụt đã được sử dụng trong
rất nhiều giải thuật phân tán. Cấu trúc của sóng đệ qui ngập lụt có dạng như trong cấu

trúc dưới.
Một vấn đề với các giải thuật sử dụng kỹ thuật ngập lụt nói chung và sóng đệ qui ngập
lụt nói riêng là quản lý việc lan tỏa của sóng đệ qui. Có nhiều chiến lược quản lý khác
nhau, mỗi chiến lược đều có điểm mạnh và điểm yếu riêng. Cấu trúc sóng đệ qui cho
phép ứng dụng các chiến lược khác nhau bằng cách thay đổi cách tính tập hợp lân cận
neighbor.

type processor_identifier is …;


kiểu định nghĩa cho một tên bộ xử

ego: processor_id;
--Khai báo processor_id hiện tại
neighbours: setof processor_id;
--Khai báo các hàng xóm của bộ xử lý hiện tại
procedure flooding_rec_wave (visited_processors:setof processor_id;
<các_tham_số>) is
i: processor_id;
processor_to_visit: setof processor_id;
--Các bộ xử lý tiếp theo sẽ được reach
begin
<Khối_lệnh_A>;

Trang 17 


 
--Bộ xử lý tiếp theo được reach không phải là bộ xử lý hàng xóm
--đã viếng thăm

processors_to_visit:=
visited_processors);

neighbours



(neighbours

and

--Nếu tập này không rỗng, flooding sẽ được thực hiện tiếp
if

processors_to_visit <> empty_set then
<Khối_lệnh_B>
par i in processors_to_visit do
<Khối_lệnh_C>;
flooding_rec_wave(f(<các_tham_số>)) on i;
<Khối_lệnh_D>;
enddo;
<Khối_lệnh_E>;

endif;
<Khối_lệnh_F>;
end flooding_rec_wave;

IV. MÔ HÌNH TOÁN CỦA SÓNG ĐỆ QUY PHÂN TÁN:
1. Mô hình toán:
Để thuận tiện trong việc giá các giải thuật xây dựng bằng sóng đệ quy phân tán, cần có

một mô hình toán học hình thức cho các giải thuật này. Các giải thuật vừa có tính chất
đệ quy, vừa có tính chất phân tán, vừa có tính chất đệ qui do đó mô hình toán của sóng
đệ quy phải phản ánh cả hai tính chất này.
Sóng đệ quy R có thể được định nghĩa bởi một tập 4 thành phần sau:
V = {D,S,P,R}

Thành phần D: định nghĩa tập các dữ liệu cục bộ tại tiến trình i, có thể có nhiều các
thực thi thủ tục đệ quy đồng thời. Mỗi sự thực thi thủ tục sẽ liên quan đến một tập dữ
liệu. Trong môi trường đệ quy cùng một dữ liệu có thể được sử dụng bởi các thủ tục
khác nhau. DLij là dữ liệu cục bộ của mức thực thi tiến trình j trên tiến trình i. DLij được
xây dựng từ hai tập dữ liệu:
Dữ liệu của tiến trình: dữ liệu cục bộ của tiến trình i DS i

Trang 18 


 
Dữ liệu thực thi: dữ liệu phù hợp cho mỗi lần thực thi tại tiến trình j được gọi từ tiến
trình i là DEi j
Bởi vậy ta có:
DLij = DSi ∪ DEi j

Trong quá trình thực thi thủ tục, các giá trị của dữ liệu cục bộ có thể điều chỉnh bởi các
mã cục bộ. D là hàm thể hiện các điều chỉnh này, nó phụ thuộc hai tham số: các giá trị
của các biến cục bộ được điều chỉnh tại mức thực thi cấp k, DLki và các giá trị tham số
đầu vào của thủ tục gọi là VP. Vậy có thể định nghĩa hàm D như sau:
DLij = D( DLki ,VP)

Thành phần S: lệnh par kích hoạt trên một loạt các tiến trình, thành phần S sẽ tạo
một tập chỉ mục các tiến trình này. Tập này được tính toán với các giá trị cục bộ

DLi của tiến trình đang hoạt động hiện tại và các giá trị tham số đầu vào VP. Vậy hàm
S được định nghĩa như sau:
{< DOMAIN > }=S(DL i ,VP)

Thành phần P: Nó đưa ra một tập các tham số của lời gọi thủ tục từ xa, cái mà sẽ
được gửi đến tiến trình k từ tiến trình i. Tập này được tính toán với các dữ liệu cục bộ
của i, các giá trị tham số đầu vào và ID của tiến trình được gọi k. Vậy hàm P được
định nghĩa như sau:
{PARAMETER − VALUES } = P ( DLi , VP , k )

Thành phần R: Tính toán giá trị trả về cho tiến trình gọi. Giá trị này được gửi đến
tiến trình, nó được tính toán với các giá trị cục bộ, các giá trị tham số đầu vào và tập
các giá trị thu thập được từ các tập tiến trình con của tiến trình hiện tại là Rsons . Vậy
hàm H được định nghĩa như sau:
< RETURN − VALUE >= R ( DLi , VP , Rsons )

Rsons là một tập được tạo bởi kết quả của các tiến trình con của tiến trình i. Nếu i không

phải node thông thường mà là lá thì Rsons là tập rỗng.

Trang 19 


 
2. Ví dụ về mô hình toán sóng đệ quy phân tán:

Hình 2: Ví dụ về mô hình sóng đệ quy phân tán
Tiến trình i thực hiện một RPC trên các node lân cận j,k,l. Mỗi RPC có các giá trị tham
số khác nhau:
{u,v,w} cho j

{u’,v’,w’} cho k
{u’’,v’’,w’’} cho l
Tập các node lân cận được sinh ra bởi hàm S và hàm P đưa ra các giá trị tham số của
RPC cho mỗi tiến trình. Tiến trình k,l không thực hiện bắt kỳ lời gọi đệ quy nào, các
tiến trình này là hai lá của cây. Khi k,l kết thúc tính toán, kết quả được gửi về tiến trình
i (tiến trình cha của k và l trên cây). Mỗi kết quả được tính toán bởi hàm H.
Tiến trình j thực hiện một RPC trên các site x, y, z được tính toán bởi hàm S với các
giá trị tham số được tính toán bởi P:
{A,B,C} cho x
{A’,B’,C’} cho y
{A’’,B’’,C’’} cho z
Sau đó kết quả được gửi về tiến trình j.
3. Xây dựng giải thuật trên mô hình toán:
Dựa trên mô hình toán đã trình bày ở phần 1, cùng với cấu trúc sóng đệ quy phân tán ở
phần II, chúng ta đưa ra được giải thuật trên mô hình toán như sau:

Trang 20 


 
type processor_id is …; --Khai báo dạng processor_id
DS; --tập dữ liệu cục bộ của site
i: processor_id;
procedure recursive_wave (VP: parameters value, Hi: Result) is
DE;--tập các dữ liệu thực thi cục bộ
begin
DL = A(VP,DL) --Khối lệnh A
if {condition} then –Dừng sóng đệ quy
DL = B(VP,DL) --Khối lệnh B
par i in S(DL,VP) do –S tập các chỉ số của các luồng

DL = C(VP,DL) --Khối lệnh C
Recursive_wave(G(DL,VP,i),Hi) on i;
DL = D(VP,DL) --Khối lệnh D
enddo;
DL = E(VP,DL) --Khối lệnh E
endif;
DL = F(VP,DL) --Khối lệnh F
end recursive_wave;

Trên thực tế, đường thực hiện của một sóng đệ qui chính là một sóng phân tán, chia
làm hai pha: pha đi kích hoạt các tiến trình và pha về kết thúc các tiến trình. Mỗi tiến
trình khi thực hiện lời gọi sóng đệ qui làm thao tác: chia khối lượng tính toán thành
các thủ tục tính toán, tính toán các tham số của các thủ tục, tính toán tập hợp các tiến
trình thực hiện các thủ tục, kích hoạt các tiến trình, thu thập kết quả từ các tiến trình bị
gọi. Điểm khác biệt căn bản so với các giải thuật đệ qui tuần tự là các thủ tục được
thực hiện trên các tiến trình khác nhau, do đó không cần sử dụng đến ngăn xếp hệ
thống để truyền dữ liệu.
V. Xây dựng giải thuật phân tán bằng sóng đệ quy:
Quá trình xây dựng một giải thuật phân tán bằng sóng đệ qui có thể chia làm 3 bước:
-

Xây dựng pha đi.
Xây dựng pha về.
Định nghĩa các biến và mối liên hệ.

Pha đi liên quan đến tất cả các tính toán trước khi các tiến trình được kích hoạt để thực
hiện một tính toán thực sự không đệ qui. Như vậy, trong pha này có hai thao tác cơ

Trang 21 



 
bản: tính toán đường phổ biến sóng đệ qui và chuẩn bị các tham số cho lời gọi sóng đệ
qui.
Việc lựa chọn các tiến trình để thực hiện các lời gọi sóng đệ qui phụ thuộc vào chiến
lược thăm các tiến trình. Chiến lược này có thể sử dụng một topology đã biết trước,
hoặc có thể xây dựng động phụ thuộc vào quá trình tính toán. Việc thiết kế một chiến
lược như vậy cần nhằm tới các mục đích:
-

Thăm các nút trong mạng theo một đường đi phù hợp với quá trình tính
toán.
Kiểm soát các lời gọi sóng đệ qui đảm bảo để quá trình thực hiện tuân thủ
đúng đường đi nói trên.
Đảm bảo không có đường đi vô tận.

Chiến lược này được cài đặt bằng S.
Bước tiếp theo trong pha đi là bước tính toán các tham số cần thiết cho lời gọi sóng đệ
qui. Cụ thể, P sẽ được tính toán và tạo thành các tham số đầu vào cho các lời gọi đệ
qui.
Pha về được bắt đầu khi có một lời gọi không sinh ra các lời gọi sóng đệ qui khác,
thực hiện các tính toán của mình rồi trả kết quả về cho tiến trình gọi.
Bước cuối cùng để xây dựng một sóng đệ qui là định nghĩa các biến. Các biến biểu
diễn các dữ liệu cục bộ trên từng tiến trình, trong đó có các dữ liệu về các tiến trình sẽ
được gọi tiếp theo. Việc sử dụng các biến tĩnh cho phép sử dụng các giá trị của chúng
trong pha đi cũng như pha về.
Mỗi khi một thủ tục được thực hiện tại một tiến trình, các dữ liệu động có thể bị biến
đổi. Nếu như một tiến trình thực hiện nhiều lời gọi khác nhau, khi đó cần quan tâm đến
việc đảm bảo tính toàn vẹn dữ liệu. Để thực hiện được mục tiêu này có thể có nhiều
phương án giải quyết: sử dụng quyền truy cập loại trừ lẫn nhau, sử dụng các dấu kiểm

soát thay đổi của các biến. Tuy nhiên một cài đặt của RPC có lẽ sẽ là giải pháp hoàn
chỉnh hơn cả.
Thuật toán có thể chia được thành 5 bước:
1. Định nghĩa tập các giá trị cục bộ:
Định nghĩa được xem xét trong các tham số sau:
-

Định nghĩa dữ liệu của site: DS i

-

Định nghĩa dữ liệu thực thi: DEi j
Trang 22 


 
-

Định nghĩa các tham số đầu vào.

Các tham số này sẽ được khai báo ở phần đầu của mã giải thuật sóng đệ quy.
2. Lựa chọn phương thức dò tìm các tiến trình lân cận
Để thiết kế thuật toán phân tán việc đầu tiên là lựa chọn chiến lược dò tìm các node kế
cận ở các site khác. Ví dụ: cây bao phủ là một phương thức. Việc này là cần thiết vì
các lý do sau:
-

Cách thức thuật toán liên kết với mục tiêu tính toán
Thể hiện các thành phần của lời gọi đệ quy và điểm dừng tìm kiếm các tiến
trình.

Đưa ra điều kiện dừng, ví dụ như chiến lược dò tìm dẫn đến một cây vô hạn.

3. Thiết kế pha đi
Sự tính toán phân toán được hoàn thành trong pha: pha đi và pha về. Pha đi của sóng
sẽ di chuyển trên cây. Trong phần cuối sẽ đưa ra các tham số để tính toán ID tiến trình
khác nhau để gửi các RPC đến đó và chúng ta cũng cần biết các giá trị tham số của các
RPC.
Trong mỗi thủ tục thực thi tại một tiến trình, chúng thực hiện các toán tử với dữ liệu
cục bộ và các giá trị tham số đầu vào của thủ tục. Sau khi thực hiện các toán tử chúng
gửi một RPC với các giá trị tham số mới, kết quả thực hiện trên dữ liệu cục bộ. Pha đi
được xem xét trong các tham số sau:
• Biểu hiện cho tất các các mức khác nhau của cây.
• Tiều chuẩn của sự chính xác của các tham số được tính toán (khác nhau trong
mỗi thuật toán).
• Tiêu chuẩn dừng.
4. Thiết kế pha về:
Pha về hoàn thành từ lá đến gốc của cây bằng cách quay lại tiến trình cha (tiến trình
gọi), và tiến trình cha này lại quy về tiến trình cha của nó, cứ thế cho đến khi nó về đến
tiến trình nằm ở gốc của cây bao phủ. Cách này đem lại các kết quả thu thập từ các lời
gọi đệ quy và một tính toán cục bộ trên dữ liệu cục bộ và kết quả thu thập được. Khi
tính toán trên các tham số cục bộ cho thấy các lời gọi đã được thực hiện, sau đó quá
trình hiện tại là một lá của cây lời gọi đệ quy và đệ quy backtrack có thể bắt đầu.
Các thuộc tính của sự quay lui được thể hiện trong các tham số:

Trang 23 


 
• Từ các lá chúng ta có thể chứng tỏ rằng tất cả các lá có chung một node cha.
• Cung cấp một con đường từ đỉnh có độ sâu p đến một đỉnh có độ sau p-1 trong

cây lời gọi đệ quy.
Bước này liên quan đến hàm R.
5. Liên kết các giá trị :
Tại mọi thời điểm thủ tục thực thi trên một site, các giá trị cục bộ của site được thay
đổi, chúng ta phải kiểm soát việc này vì chúng có thể thay đổi kết quả của thuật toán.
Trong phần mô hình toán, chúng ta định nghĩa DLij là một tập các dữ liệu cục bộ của sự
thực thi tại tiến trình j được gọi từ tiến trình i. Mỗi thời điểm một thủ tục được thực thi
trên một tiến trình, dữ liệu cục bộ được thay đổi nhưng chúng ta không thể biết sự thay
đổi đó. Chúng ta bị ép buộc phải đồng bộ hoặc định kỳ cập nhật các sự thay đổi dữ
liệu. Với mục đích này chúng ta cần sử dụng một số các tham số sau:
• Quản lý lời gọi thủ tục từ xa (Quản lý ở mức thấp của phần mềm, ví dụ hệ điều
hành).
• Loại trừ lẫn nhau.
• Đánh dấu sự thay đổi của dữ liệu cục bộ.
Trạng thái của thuật toán.
VI. BÀI TOÁN TÌM ĐƯỜNG NGẮN NHẤT VÀ SÓNG ĐỆ QUY PHÂN TÁN
Trong mạng máy tính, mỗi đường có một cost, một vấn đề là tìm đường giữa hai đỉnh
sao cho cost nhỏ nhất có thể. Vấn đề bao gồm việc tính toán đường ngắn nhất từ một
đỉnh r được gọi là gốc đến tất cả các đỉnh khác. Có rất nhiều phương pháp được đề
nghị cho vấn đề tìm đường ngắn nhất, các giải pháp có thể dựa trên việc liệt kê, tức là
quét toàn bộ các đường về gốc. Cách khác chúng ta có thể tối ưu để tránh việc quét
những đường không cần thiết. Sự tối ưu đầu tiên là tránh xây dựng các đường cơ sở,
gửi đi các RPC đến người gọi. Tối ưu thứ hai là sử dụng nguyên lý Bellman để tính
toán độ dài đường đi và sau đó lựa chọn đường ngắn nhất.
Chúng ta đưa ra một số giả thiết: tất cả cost là dương, tất cả các đường đi là hai chiều
và giá trị (a,b) không cần giống giá trị của (b,a). Mỗi đỉnh x có các hàng xóm là
Γ( x) và cost của (a,b) là C( x, y)
Các ký hiệu sẽ được sử dụng trong phần này:
GR = ( X , Γ , C )


Đồ thị trọng số và hướng.

Trang 24 


×