HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------
Đặng Phương Nga
NGHIÊN CỨU MỘT SỐ THUẬT GIẢI HEURISTIC
CHO BÀI TOÁN POT VÀ ỨNG DỤNG
Chuyên ngành: Khoa học máy tính
Mã số: 60.48.01.01
TÓM TẮT LUẬN VĂN THẠC SĨ
HÀ NỘI - 2014
Luận văn được hoàn thành tại:
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Người hướng dẫn khoa học:
NCVC.PGS.TS. Lê Huy Thập
Phản biện 1: ……………………………………………………………………………
Phản biện 2: …………………………………………………………………………..
Luận văn sẽ được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học viện Công
nghệ Bưu chính Viễn thông
Vào lúc:
....... giờ ....... ngày ....... tháng ....... .. năm ...............
Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Công nghệ Bưu chính Viễn thông
1
MỞ ĐẦU
Cây toán tử là cách thể hiện bằng đồ thị của một câu truy vấn dạng SQL
(Structured Query Language) hay AQL (Algebraic Query Language). Dạng đặc biệt
của cây toán tử là cây toán tử đường ống POT (Pipelined Operator Tree). POT là cây
mà một số toán tử của nó có thể thực hiện song song với dữ liệu ra của toán tử này có
thể là dữ liệu vào của toán tử.
Trên POT, chúng ta có thể thực hiên các thao tác như cân bằng tải, lập lịch truy
vấn tối ưu, thực hiện các nhát cắt cục bộ, phân phối các toán tử cho các bộ xử lí,....
được thực hiện bởi các thuật toán. Khi POT đã được xử bởi các thuật toán, thì việc
thực hiện câu truy vấn tương ứng sẽ giảm tối đa thời gian truyền dữ liệu, tăng tốc độ
truy cập.
Đề tài nghiên cứu các thuật toán Heuristic trên POT là vấn đề chưa được
nghiên cứu và chưa được ứng dụng cụ thể trong thực tế.
Kết quả đạt được của đề tài có thể được ứng dụng để giải quyết các bài toán
phân chia toán tử trong câu truy vấn của hệ CSDL phân tán và hệ đa xử lý phân tán.
Có thể ứng dụng cho các vấn đề thực tế khác như chấm thi tuyển vào các cơ sở đào
tạo, bán hàng qua mạng….
Sau một thời gian tìm hiểu những vấn đề nêu trên, tôi xin chọn đề tài “Nghiên
cứu một số thuật giải heuristic cho bài toán POT và ứng dụng” làm đề tài nghiên
cứu luận văn của mình.
Ngoài phần mở đầu và kết luận, luận văn này gồm 3 chương:
Chương 1: Trình bày tổng quan về các phương pháp phân mảnh dữ liệu và
cách tái cấu trúc quan hệ, phương pháp tạo cây toán tử SQL và AQL từ các mảnh.
Chương 2: Giới thiệu bài toán POT và các thuật toán trên POT, nghiên cứu
các thuật toán Heuristic cho bài toán POT
Chương 3: Ứng dụng tại trường THCS Gia Thanh, nhằm giảm tối đa chi phí
truyền thông và tăng tốc độ truy cập giữa các vị trí mạng của trường.
2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Các phương pháp phân mảnh và khôi phục các quan hệ.
1.1.1. Các phương pháp phân mảnh
Các kiểu phân mảnh cơ bản là:
-
Phân mảnh ngang.
+ Phân mảnh ngang nguyên thủy
+ Phân mảnh ngang dẫn xuất
-
Phân mảnh dọc.
-
Phân mảnh hỗn hợp.
1.1.1.1. Phân mảnh ngang
Thông tin về CSDL cần thiết cho phân mảnh ngang. Thông tin về CSDL là
thông tin về lược đồ khái niệm toàn cục của CSDL. Tức là chúng ta cần biết được
cách mà quan hệ con sẽ hợp lại với nhau như thế nào. Trong mô hình quan hệ, các
liên kết giữa các thực thể cũng được biểu thị bằng quan hệ. Với mục đích thiết kế
phân tán, các mối liên kết cũng được mô hình hoá theo kiểu mô hình quan hệ. Theo
cách này, chúng ta sẽ vẽ một đường nối có hướng từ quan hệ Parent đến quan hệ
Child.
Có hai loại phân mảnh ngang cơ bản là: phân mảnh ngang nguyên thuỷ và
phân mảnh ngang dẫn xuất.
Phân mảnh ngang nguyên thủy
Phân mảnh ngang nguyên thuỷ là phân rã một quan hệ thành các tập gồm các
bộ dựa trên các vị từ được định nghĩa trên quan hệ đó. Phân mảnh ngang nguyên thuỷ
được định nghĩa bằng một thuật toán chọn trên các quan hệ nguồn của một lược đồ
CSDL. Mảnh ngang Ri bao gồm các bộ của R được chọn ra theo công thức:
Ri = 𝜎Fi(R), 1≤ i ≤ z.
Trong đó Fi là công thức chọn được sử dụng để có được mảnh Ri. Chú ý rằng
chúng ta xét Fi có dạng chuẩn hội, nó là một vị từ hội sơ cấp (mi).
3
Phân mảnh ngang dẫn xuất
Phân mảnh ngang dẫn xuất là phân mảnh một quan hệ dựa vào các vị từ được
định nghĩa trên quan hệ chủ (Parent). Phân mảnh ngang dẫn xuất là phân mảnh ngang
trên quan hệ đích của một đường nối dựa theo phép toán chọn trên quan hệ nguồn của
đường nối đó.
Nếu cho trước một đường nối L, trong đó Nguon (L) = S và Dich (L) = R, các
mảnh ngang dẫn xuất của R được định nghĩa là:
Ri = R Si, 1 ≤ i ≤
Trong đó là số lượng các mảnh được định nghĩa trên R, và Si = 𝜎Fi(S) với Fi
là công thức định nghĩa mảnh ngang nguyên thuỷ Si.
Các thông tin cần cho phân mảnh ngang dẫn xuất :
Muốn thực hiện phân mảnh ngang dẫn xuất, chúng ta cần ba thông tin vào: tập
các mảnh của quan hệ nguồn, quan hệ đích và tập các vị từ nối nửa giữa nguồn và
đích
Một số vấn đề phức tạp cần phải chú ý.
Trong lược đồ CSDL, chúng ta hãy gặp nhiều đường nối đến một quan hệ R (ví
dụ như trong hình 1.1, PhanNhiem có hai đường nối đến). Như thế có thể có nhiều
cách phân mảnh ngang dẫn xuất cho R. Quyết định chọn cách phân mảnh nào cần
dựa trên hai tiêu chuẩn:
(1) Phân mảnh có đặc tính nối tốt hơn.
(2) Phân mảnh được sử dụng trong nhiều ứng dụng hơn.
1.1.1.2.Phân mảnh dọc
Cho R là một quan hệ trên tập các thuộc tính Ω = {A1, A2,…, An}. Khi đó phân
mảnh dọc quan hệ R sinh ra các mảnh R1, R2,, …, Rn sao cho mỗi mảnh là một quan
hệ chứa một tập con các thuộc tính cuả quan hệ R và khóa của nó. Tức là Ω sẽ được
phân mảnh sao cho Ω = Ω1 ᴗ Ω2 ᴗ…. Ωn, trong đó Ri là mảnh quan hệ trên các thuộc
tính Ωi, i=1…k.
4
Mục đích của phân mảnh dọc là phân chia quan hệ R thành tập các quan hệ nhỏ
hơn để có nhiều ứng dụng có thể chỉ cần thực hiện trên một mảnh, điều này làm giảm
đáng kể chi phí. Mảnh tối ưu là mảnh sinh ra một lược đồ phân mảnh cho phép giảm
thiểu thời gian thực hiện của ứng dụng trên mảnh đó.
Kỹ thuật phân mảnh dọc phức tạp hơn phân mảnh ngang, vì số lựa chọn phân
hoạch rất lớn. Trong trường hợp có m thuộc tính không phải khóa chính, thì số mảnh
có thể là mm.
Để có được lời giải tối ưu cho bài toán phân mảnh dọc rất khó, không hiệu quả.
Vì vậy vần phải sử dụng các phương pháp Heuristic cho phân mảnh dọc các quan hệ
toàn cục. Có hai phương pháp Heuristic:
a. Nhóm thuộc tính: bắt đầu gán mỗi thuộc tính cho một mảnh và trong mỗi
bước, nối một số mảnh lại với nhau cho đến khi thỏa mãn điều kiện phân
mảnh.
b. Tách mảnh: bắt đầu bằng một quan hệ và quyết định cách phân chia quan hệ
dựa trên hành vi truy xuất của các ứng dụng trên các thuộc tính.
Ở đây chúng ta chỉ xem xét kỹ thuật tách mảnh vì nó thích hợp với phương
pháp thiết kế CSDLPT từ trên xuống.
Việc nhân bản các thuộc tính khóa của quan hệ toàn cục trong các mảnh là một
đặc trưng của phương pháp phân mảnh dọc cho phép khôi phục quan hệ toàn cục và
bảo đảm tính toàn vẹn ngữ nghĩa và làm giảm đi quá trình trao đổi dữ liệu. Vì vậy
phương pháp phân mảnh dọc chỉ đề cập đến các thuộc tính không khóa.
1.1.1.3.Phân mảnh hỗn hợp
Trong đa số các trường hợp, phân mảnh ngang hoặc phân mảnh dọc đơn giản
cho một lược đồ CSDL không đủ đáp ứng các yêu cầu từ các ứng dụng. Trong trường
hợp đó, phân mảnh dọc có thể được thực hiện sau một phân mảnh ngang hoặc ngược
lại, sinh ra một lối phân hoạch có cấu trúc cây (Hình 1.3). Bởi vì, hai loại chiến lược
phân hoạch này được áp dụng lần lượt, chọn lựa này được gọi là phân mảnh hỗn hợp
(hybrid fragmentation).
5
1.1.2 Tái cấu trúc quan hệ
1.Tái thiết quan hệ phân mảnh ngang
Tái thiết quan hệ từ các mảnh thực hiện bằng toán tử hợp trong cả phân mảnh
ngang nguyên thủy lẫn dẫn xuất một quan hệ R với phân mảnh FR = {R1, R2, R3,
… Rm} ta có:
R = ∪ Ri; ∀Ri ∈ FR
2. Tái thiết quan hệ phân mảnh dọc
Quan hệ R có phân mảnh dọc FR = {R1, R2, R3, … Rr} và các thuộc tính khóa
K
R=
K
Ri, ∀Ri ∈ FR
3. Tái thiết phân mảnh hỗn hợp
Trong phân mảnh hỗn hợp, hai loại phân mảnh ngang và phân mảnh dọc này
được áp dụng lần lượt. Vì thế tùy vào từng trường hợp cụ thể, chúng ta tái thiết phân
mảnh hỗn hợp dựa trên tái thiết quan hệ phân mảnh ngang và tái thiết phân mảnh dọc
đã nêu ở trên.
1.2. Phương pháp tạo cây toán tử dạng SQL và dạng AQL từ các mảnh.
Cây toán tử là cách thể hiện bằng đồ thị của một câu truy vấn dạng SQL
(Structured Query Language) hay AQL (Algebraic Query Language).
1.2.1. Chuyển SQL sang AQL
1.Các phép toán quan hệ
2. Các câu lệnh trong SQL
3. Chuyển SQL sang AQL
Phép chiếu: được kí hiệu là π, sau đó là các thuộc tính nằm sau SELECT, nêu
điều kiện liên quan đến thuộc tính của quan hệ xuất hiện trong mệnh đề FROM.
6
Phép chọn: được kí hiệu là σ, sau đó là các thuộc tính nằm sau WHERE, nêu
điều kiện liên quan đến thuộc tính của quan hệ xuất hiện trong mệnh đề FROM.
Thường sử dụng AND, OR, NOT, BETWEEN, các phép toán so sánh.
Phép kết nối: được kí hiệu là
, trong mệnh đề WHERE thường có điều kiện
kết nối nếu như trong mệnh đề FROM có nhiều hơn hai quan hệ.
1.2.2. Tạo cây toán tử dạng SQL và AQL
Định nghĩa cây toán tử:
Một cây toán tử là cây với mỗi nút lá biểu thị cho một quan hệ được lưu trong
cơ sở dữ liệu, nút không phải là lá biểu thị một quan hệ trung gian được sinh ra bởi
phép toán quan hệ. Chuỗi các phép toán để đi theo hướng lá đến gốc, gốc biểu thị kết
quả vấn tin.
Cách biến đổi câu vấn tin phép tính quan hệ trở thành một cây toán tử như
sau:
i. Trước hết tạo ra các nút lá là các quan hệ trong SQL các nút lá nằm sau
FROM.
ii. Nút gốc được tạo ra như phép chiếu chứa các thuộc tính kết quả, các thuộc tính
này nằm sau SELECT.
iii. Lượng tử hoá (vị từ sau WHERE ) được chuyển thành các phép tính quan hệ
thích hợp (phép chọn, phép nối ,…) đi từ các nút lá đến gốc. Chuỗi này có thể
được cho trực tiếp qua thứ tự xuất hiện của các vị trí và các toán tử.
1.3 Kết luận chương 1
Trong CSDl quan hệ, các thể hiện của quan hệ là các bảng. Vấn đề là tìm một
kiểu phân mảnh phù hợp để phân rã một bảng thành nhiều bảng con khác nhau, sao
cho các câu vấn tin được tham chiếu đến các bảng dữ liệu một cách đơn giản nhất.
Có ba loại phân mảnh cơ bản bao gồm:
- Phân mảnh ngang
7
+ Phân mảnh ngang nguyên thủy: Một quan hệ được thực hiện trên các
vị từ được định nghĩa trên chính quan hệ đó.
+ Phân mảnh ngang dẫn xuất: Phân mảnh quan hệ dừa vào vị từ được
định nghĩa trên quan hệ chủ.
- Phân mảnh dọc: chia một quan hệ thành nhiều quan hệ con. Phân mảnh
dọc cho phép vấn tin với các quan hệ nhỏ hơn nên giảm được số truy cập
và tăng tốc độ truy cập.
- Phân mảnh hỗn hợp: là tổng hợp của phân mảnh ngang và phân mảnh
dọc. Tùy vào công việc sau đó chọn kiểu phân mảnh nào cho phù hợp.
Trong mô hình tổ chức dữ liệu, việc lưu trữ dữ liệu dạng cây giúp cho công
việc tìm kiếm dữ liệu trở nên dễ dàng hơn gọi là cây toán tử. Cây toán tử là cách thể
hiện bằng đồ thị của một câu truy vấn dạng SQL hay AQL.
8
CHƯƠNG 2. MỘT SỐ THUẬT TOÁN GIẢI BẰNG HEURISTIC
2.1. Giới thiệu bài toán POT và các thuật toán trên POT.
Chúng ta sẽ tập trung nghiên cứu vào bài toán xác định cây truy vấn tối ưu cho
toán tử mà một số toán tử của cây có thể thực hiện song song với nhau. Còn những
đỉnh khác phải thực hiện tuần tự tức là dữ liệu sản xuất ra tại đỉnh này là dữ liệu tiêu
thụ tại đỉnh kế tiếp sau của cây toán tử. Cây toán tử với tính chất này được gọi là cây
toán tử dạng ống- POT (Pipelined Operator Tree).
Gọi T = (V,E), là cây toán tử với V là tập đỉnh, mỗi đỉnh đại diện cho một toán
tử, E là tập các cạnh, ti là trọng số của đỉnh i, cij là trọng số của cạnh (i,j), và p là số
bộ xử lý.
Vì mỗi cây toán tử kiểu này đều đẳng cấu với ma trận liền kề IP (Isomorphous)
[10], [11] mà đỉnh, chính là tiêu đề cột và hàng kèm với trọng số ti của nó và Ô (cell)
- giao của cột và hàng, chính là trọng số cạnh cij.
Giữa T và IP có một song ánh, cho nên khi nói về cây toán tử T chúng ta có thể
hiểu là ma trận liền kề IP. Do đó có thể gọi ma trận liền kề IP là ma trận truy vấn, IP
truy vấn hay đơn giản là IP.
Để xử lý (bằng máy tính) đồ thị nói chung- cây toán tử nói riêng, người ta
dùng IP.
Định nghĩa 2.1. Cây truy vấn của cây toán tử T (IP truy vấn) là một phân
hoạch các đỉnh của V (hàng hoặc cột của IP) thành p tập F1,…,Fp, với tập đỉnh (cộthàng) thuộc Fk do bộ xử lý thứ k thực thi.
Chi phí để thực hiện tại bộ xử lý k là chi phí thực hiện các đỉnh trong Fk cộng
với trọng số từ các đỉnh này đến các đỉnh trên những bộ xử lý khác. Nói cách khác,
chi phí thực hiện Fk và tổng trọng số của các cạnh (cell) nối từ một đỉnh (cột- hàng)
bất kỳ trong Fk đến một đỉnh (cột- hàng) bên ngoài.
Quy ước, cij= 0 nếu không có cạnh từ i đến j.
Định nghĩa 2.2.Tải trên bộ xử lý k, kí hiệu Lk, là chi phí thực hiện các toán tử
định vị trên bộ xử lý này cộng với chi phí truyền thông từ bộ xử lý k đến các bộ xử lý
9
khác. Nghĩa là,
L K = (ti Cij ) hoặc L K = (ti Cell ij ) , trong trường hợp
iFK
jFK
iFK
jFK
IP.
Định nghĩa 2.3.
Gọi L là thời gian hoàn thành cây truy vấn dạng ống được tính từ thời gian các
toán tử khởi động cho đến khi toán tử cuối cùng hoàn tất công việc. Một cây tối ưu sẽ
tồn tại ít nhất một bộ xử lý ở tình trạng “ bão hòa”. Tức là thời gian thực thi của cây
truy vấn tối ưu với p bộ xử lý được xác định bởi biểu thức:
L= maxl ≤k ≤ pLk= maxl ≤k ≤ p[ (ti Cij ) ]
iFK
jFK
Hoặc:
L= maxl ≤k ≤ pLk= maxl ≤k ≤p[ (ti Cell ij ) ] trong trường hợp IP.
iFK
jFK
Định nghĩa 2.4. Tỉ lệ tải tại toán tử. Tỉ lệ tải tại toán tử i trên bộ xử lý k được
1
tính bởi công thức: fi= (ti+ Cij ), i V.
𝐿
jFK
Từ các định nghĩa trên, chúng ta định nghĩa bài toán lập cây toán tử dạng ống
như sau:
Bài toán POT: Cho cây toán tử dạng ống T = (V,E), trong đó V là tập các toán
tử ( gọi là các đỉnh), ti là chi phí khi dùng toán tử i ( trọng số của đỉnh i thuộc V), Cij
chi phí truyền thông giữa hai bộ xử lý ( trọng số của cạnh (i,j) thuộc E); p là số bộ xử
lý ( k= l,…,p). Hãy tìm một truy vấn với thời gian trả lời cực tiểu. Nghĩa là:
Tìm một phân hoạch (Fl,…,Fp) của V, tức là gom các toán tử vào các nhóm
{Fk}k=l,…,p sao cho:
L= maxl ≤k ≤ pLk= maxl ≤k ≤ p[ (ti Cij ) ] là ít nhất.
iFK
jFK
Hoặc:
L= maxl ≤k ≤ pLk= maxl ≤k ≤p[ (ti Cell ij ) ] là ít nhất, trong trường hợp IP.
iFK
jFK
10
Đây là bài toán NP - khó. Để tìm lời giải tối ưu cho cây toán tử dạng ống,
chúng ta xây dựng một thuật toán trên cơ sở sử dụng hai phép toán gộp đỉnh và cắt
cạnh của cây toán tử để quyết định vị trí các đỉnh kề nhau nên đặt cùng một nhóm Fk
nào đó hay không, tức là những toán tử nào sẽ được giao cho bộ xử lý k thực hiện.
2.1.1. Các thuật toán tách - gộp các đỉnh của POT
Định nghĩa 2.5. Cho cây toán tử T(V,E), toán tử Gop(i,j) hay (Collapse(i,j))
gộp hai đỉnh i và j trong tập Fk để tạo ra đỉnh m như sau:
-
t m = t i + t j.
-
Các cạnh nối với i và j được chuyển thành nối với m
Định nghĩa 2.6. Cho cây toán tử T(V,E), toán tử Tach(i, j) (hay cut(i,j)) được
sử dụng cắt cạnh (i, j) với hai đỉnh i và j trong tập Fk để tách hai đỉnh này như sau:
-
i và j thuộc hai tập Fk, Fl khác nhau.
-
Các đỉnh i và j sẽ có trọng số mới là:
tinew = tiold + cij
tjnew = tjold + cij
1.Thuật toán gộp:
Gop(i,m) gộp hàng con i vào hàng cha m. Giả sử IP truy vấn cấp n ×n
Input: Hàng con i, hàng cha m
Output: IP truy vấn đã gộp hàng con i vào hàng cha m
Begin
t m = tm + t i
For k=1 to n do
cm,k+=ci,k
End For
Ghi nhãn hàng con i vào bên cạnh hàng cha m
11
Xóa hàng i và cột i
End.
Độ phức tạp của thuật toán là O(n).
2.Thuật toán Tách
Tach(i,m) tách hàng con i ra khỏi hàng cha m.
Input: Toán tử cần tách
Output: Các toán tử đã được tách
Begin
tmnew = tmold + ci,m {với i là hàng con, m là hàng cha}
tinew = tiold + ci,m {với i là hàng con, m là hàng cha}
End.
Độ phức tạp của thuật toán là O(n).
2.1.2. Thuật toán Dividing
Giả sử có p bộ xử lý, n công việc x1, x2,…, xn có thời gian thực hiện lần lượt là
t1, t2,…, tn. Mỗi công việc có thể thực hiện trên một bộ xử lý bất kỳ nhưng phải thực
hiện trọn vẹn. Hãy tìm cách phân chia n công việc cho p bộ xử lý sao cho thời gian
hoàn thành là nhanh nhất.
Thuật toán Dividing
Đầu vào:
- JOBS: tập gồm có n công việc x1, x2,…, xn
- Cây toán tử đơn điệu T, chứa các t1,…, tn, là thời gian thực hiện tương
ứng với các công việc và khác 0.
- p: số bộ xử lý
12
- F: tập gồm các phân hoạch F1,F2,…Fp để phân chia công việc vào đó.
Tập F ban đầu được khởi tạo bằng rỗng (Ø)
Đầu ra:
- Tập kết quả F chứa các Fi và các công việc xi đã được phân chia.
Cách thức hoạt động:
Bước 1:
- Nhập vào tập công việc JOBS = {x1,…, xn}
- Nhập vào tập thời gian thực hiện các công việc T = {t1,…, tn}
- Nhập vào số lượng mảnh dữ liệu p và khởi tạo tập F = {F1,…,Fp} = Ø
Bước 2:
- Chọn ra Fi có tổng t(Fi) là nhỏ nhất trong tập F
- Chọn ra xj có tj lớn nhất trong tập JOBS.
- Đưa xj vào tập Fi
- Loại bỏ xj khỏi tập JOBS
Bước 3:
- Kiểm tra xem tập JOBS có rỗng không.
+ Nếu không quay lại bước 2
+ Nếu có thì thực hiện bước 4
Bước 4:
- Lưu phân hoạch F với các phần tử (F1,…, Fp) chứa các phần tử xj sao cho
thời gian hoàn thành các công việc là nhanh nhất.
Thuật toán Dividing độ phức tạp đa thức.
2.1.3. Thuật toán Dividing-BalancedCuts
Chúng ta thấy rằng đầu ra của thuật toán BalancedCuts [4] là một phân hoạch
liên thông có số tập như ý muốn (số tập này phụ thuộc vào số bộ xử lý). Nếu áp dụng
thuật toán BalancedCuts cho các trường hợp bộ xử lý thay đổi từ p đến n thì sẽ thu
13
được (n-p+l) bộ cây tối ưu tương ứng. Sau đó kết quả của mỗi trường hợp sẽ được áp
dụng tiếp cho thuật toán phân chia công việc Dividing. Cuối cùng ta thu được (n-p+l)
cây truy vấn vừa bảo đảm tính tối ưu truyền thông vừa đảm bảo cân bằng tải. Chúng
ta chọn kết quả tốt nhất trong (n-p+l) cây này để làm cây truy vấn tối ưu. Kết quả kết
hợp này bao giờ cũng không xấu hơn kết quả của từng thuật toán riêng lẻ.
Thuật toán Dividing-BalancedCuts
Đầu vào:
- Cây toán tử đơn điệu T, chứa các t1,…, tn, là thời gian thực hiện tương
ứng với các công việc và khác 0.
- p: số bộ xử lý
Đầu ra:
- Kết quả phân hoạch F chứa các (F1, F2, … Fp) sao cho max1≤i≤pCost(Fi) là
nhỏ nhất.
Kết quả của thuật toán phân hoạch (F1,F2,…,Fp) sao cho maxCost (Fi) là nhỏ
nhất.
Thuật toán Dividing-BalancedCuts có độ phức tạp đa thức. Thuật toán được áp
dụng khá tốt không những cho những cây truy vấn thông thường với yêu cầu về cân
bằng tải mà còn cho các cây truy vấn hình sao. Tính đúng đắn của thuật toán được
suy từ thuật toán BalancedCuts. Khi n= p thì kết quả của thuật toán chính là kết quả
của thuật toán BalancedCuts.
2.2. Nghiên cứu các thuật toán Heuristic cho bài toán POT
2.2.1. Giới thiệu thuật toán nhát cắt cục bộ cho bài toán POT
Thuật toán nhát cắt cục bộ (LocalCuts) là một mở rộng của thuật toán tìm cây
tối ưu cho cây toán tử POT. Mở rộng này có thể giải quyết trong trường hợp số nhóm
sinh ra bởi thuật toán LocalCuts nhiều hơn số bộ xử lý cho phép, đồng thời bảo đảm
yếu tố cân bằng tải giữa các bộ xử lý.
14
2.2.2. Thuật toán LocalCuts
Thuật toán LocalCuts
Input:
Cây toán tử đã qua tiền xử lý T [4], gồm n đỉnh.
Tham số α> 1, trong đó α là một giá trị nhỏ hơn tỉ số giữa trọng số của
đỉnh lá và cạnh số cạnh nối đỉnh lá đó với đỉnh mẹ.
Output : Phân hoạch liên thông (Tl,…,Tk).
Thuật toán xem xét sử dụng toán tử Collapse hay cut cho một đỉnh lá và đỉnh
cha của nó ( xem xét khả năng nối nó với đỉnh cha vào một phân hoạch liên thông).
Cách thức hoạt động:
Bước 1:
- Nhập vào tập thời gian thực hiện các công việc T = {t1,…, tn}
- Nhập vào tham số α > 1
Bước 2:
- Xét đỉnh con j
- Nếu tj > α.cjm thực hiện toán tử cut(j,m).
- Nếu tj ≤ α.cjm thực hiện toán tử collapse(j,m).
Bước 3:
- Kiểm tra xem nếu còn đỉnh cha m có đỉnh con i không.
+ Nếu có quay lại bước 2
+ Nếu không thì thực hiện bước 4
Bước 4:
- Lưu phân hoạch liên thông T với các phần tử (T1,…, Tk) .
Nhận xét:
Thuật toán có độ phức tạp O(n), n là số đỉnh của cây toán tử đã qua tiền xử lý.
15
Kết quả thuật toán là một phân hoạch liên thông không thể đoán trước được
nên thông thường thuật toán này sẽ cùng đi đôi với một thuật toán khác (cân bằng tải
chẳng hạn) để phân phối các phân hoạch liên thông này cho các bộ xử lý.
Thuật toán LocalCuts chỉ xem xét sử dụng toán tử collapse hay cut cho một
đỉnh lá và đỉnh cha của nó (hay xem xét khả năng nối nó với đỉnh cha vào một phân
hoạch liên thông), nên quyết định này độc lập với trọng số của đỉnh cha, do đó trong
một số trường hợp sẽ làm tăng trọng số của đỉnh cha lên một cách đáng kể.
Từ đây, chúng ta có thể gộp các đỉnh trong mảnh và dùng thuật toán Dividing
để cân bằng tải trên các bộ xử lý (với số lượng) cho trước.
Chú ý: Có thể gán cho các giá trị α > 1 khác nhau để được các phân hoạch khác
nhau.
2.2.3.Thuật toán cân bằng tải dựa vào Dividing
Giả sử có p bộ xử lý, n công việc x1, x2,…, xn có thời gian thực hiện lần lượt là
t1, t2,…, tn. Mỗi công việc có thể thực hiện trên một bộ xử lý bất kỳ nhưng phải thực
hiện trọn vẹn.
Thuật toán cân bằng tải dựa vào nguyên tắc sau: “ Giao công việc có thời gian
thực hiện lớn nhất trong các công việc chưa được phân công cho bộ xử lý hiện thời có
tải ít nhất” trong đó, tải của bộ xử lý k được xác định bởi công thức L K =
(t C
iFK
i
jFK
ij
)
Đầu vào:
- JOBS: tập gồm có n công việc x1, x2,…, xn
- Cây toán tử đơn điệu T, chứa các t1,…, tn, là thời gian thực hiện tương
ứng với các công việc và khác 0.
- p: số bộ xử lý
16
- F: tập gồm các phân hoạch F1, F2,…, Fp để phân chia công việc vào đó.
Tập F ban đầu được khởi tạo bằng rỗng (Ø)
Đầu ra:
- Tập kết quả F chứa các Fi và các công việc xi đã được phân chia.
Cách thức hoạt động:
Bước 1:
- Nhập vào tập công việc JOBS = {x1,…,xn}
- Nhập vào tập thời gian thực hiện các công việc T = {t1,…, tn}
- Nhập vào số lượng mảnh dữ liệu p và khởi tạo tập F = {F1,…,Fp} = Ø
Bước 2:
- Chọn ra Fi có Tải(Fi) là nhỏ nhất trong tập F
- Chọn ra xj có tj lớn nhất trong tập JOBS.
- Đưa xj vào tập Fi
- Loại bỏ xj khỏi tập JOBS
Bước 3:
- Kiểm tra xem tập JOBS có rỗng không.
+ Nếu không quay lại bước 2
+ Nếu có thì thực hiện bước 4
Bước 4:
- Lưu lại tập kết quả phân hoạch (F1,…,Fp).
Thuật toán trên có độ phức tạp O(n2).
Tuy thuật toán không để ý trọng số nhưng đơn giản và bảo đảm cân bằng tải
giữa các bộ xử lý nên thường được sử dụng kết hợp với các thuật toán khác để cho
những kết quả tốt hơn.
2.2.4. Ví dụ minh họa
Thuật toán cân bằng tải kết hợp với thuật toán LocalCuts:
17
2.3. Kết luận chương 2
Giải thuật Heuristic cho phép tìm kiếm phương án phân chia công việc tốt nhất
cho các bộ xử lý để tối ưu về cân bằng tải và truyền thông. Đặc biệt, việc trình bày
song song giữa cây toán tử và IP truy vấn bằng ánh xạ đẳng cấu cho phép chúng ta
vừa có cái nhìn trực quan rõ ràng dễ hiểu vừa có thể sử dụng một ngôn ngữ lập trình
bậc cao để thể hiện kết quả với dữ liệu thực trên các mảng.
18
CHƯƠNG 3: ỨNG DỤNG TẠI TRƯỜNG THCS GIA THANH, NHẰM GIẢM
TỐI ĐA CHI PHÍ TRUYỀN THÔNG VÀ TĂNG TỐC ĐỘ TRUY CẬP GIỮA
CÁC VỊ TRÍ MẠNG CỦA TRƯỜNG
3.1 Bài toán
Bài toán lập lịch là một trong những vấn đề quan trọng được nghiên cứu trong
các môi trường tính toán, đặc biệt là các môi trường tính toán phân tán như môi
trường tính toán song song.
Trong quá trình hoạt động thực tiễn, công việc của tác giả đòi hỏi phải quản lý
học sinh trong môi trường tính toán phân tán vì thế nhằm giảm tối đa chi phí truyền
thông và tăng tốc độ truy cập giữa các vị trí mạng của trường, tác giả ứng dụng lí
thuyết vào xây dựng cơ sở dữ liệu quản lý học sinh.
Áp dụng bảng vấn tin cho bài toán lập lịch
Các bước để áp dụng bảng vấn tin vào bài toán lập lịch:
Xây dựng trước câu vấn tin SQL.
Tạo lập cây toán tử với:
- i: các nút (toán tử) trong cây toán tử.
- ti: trọng số của nút thứ i, là chi phí (thời gian xử lý hoặc chi phí
tiền) thực hiện phép toán tại nút này.
- Cij: trọng số cạnh, là chi phí (thời gian hoặc chi phí tiền) để truyền
dữ liệu từ toán tử i sang toán tử j hoặc ngược lại.
Chuyển cây toán tử sang bảng IP (truy vấn)
Áp dụng thuật toán Dividing cơ bản hoặc thuật toán cân bằng tải (có
thuật giải Heuristic) để giải bài toán phân chia công việc .
3.2. Xây dựng Cơ sở dữ liệu
Với bài toán trên, tác giả dựa vào quá trình hoạt động thực tiễn đề đề xuất xây
dựng cơ sở dữ liệu quản lý học sinh. Với các bảng như sau:
Môn học: Chứa thông tin về các môn học trong trường có giảng dạy.
Khối học: Chứa thông tin về các khối học trong trường.
Khối học: Chứa thông tin về các lớp học của trường.
- Xem thêm -