2. Cấu trúc luận văn
3.3. Các sơ đồ thuật toán
3.3.1. Chương trình chính
Chương trình chính nhập các danh mục về:
Tên đơn vị phân tán, ứng với các trạm;
Tên các thuộc tính của quan hệ cần phân đoạn dọc;
Dữ liệu thống kê về truy cập của các quá trình, tức các câu hỏi quan hệ, trên các trạm khác nhau của hệ thống.
Bắt đầu chương trình
chính
Nhập dữ liệu Tên thuộc tính
Tên trạm làm việc (Đồng Hỷ, Đại từ, Phú Bình, Lương Phú)
Đọc các dữ liệu thống kê về:
Các quá trình truy cập cột thuộc tinh PC Tần số truy cập theo các trạm phân tán ACC
Tính ma trận hấp dẫn xếp cụm HD Tính ma trận hấp dẫn có đường chéo HD2 Phân đoạn ma trận hấp dẫn Kết thúc Được quan hệ phân tách R1, R2
Hình 3.7. Chương trình chính của bài toán phân đoạn quan hệ
3.3.2. Thuật toán phân đoạn ma trận hấp dẫn phân cụm
Thuật toán làm việc trên ma trận hấp dẫn xếp cụm, kích thước nxn. Bắt đầu từ điểm x dưới, trên đường chéo chính.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Đầu vào: Ma trận HD2, kích thược nxn;
Đầu ra: Điểm phân tách. Dựa vào đó, chương trình sẽ tách được hai quan hệ.
Chương trình phân
đoạn dọc
i:= n-1, MAX := số nhỏ
Tìm P_trên, P_dưới, P_hai
Giá := Trên * dưới – hai*hai
Cập nhật MAX, i_tách I <> n-1 Chuyển vị dòng, cột HD2 (dòng n thành dòng 1; cột 1 thành cột n) Cập nhật tham số dòng, cột I := i+1 I < 2 đ s đ s Xét HD2, i_tách, cột: Tách được R1, R2 tại vị trí i_tách
Kết thúc
Hình 3.8. Thuật toán tụ năng lượng BEA theo [6. 10], dùng trong phân đoạn dọc
3.3.3. Thuật toán tìm phần trên, phần dưới trong ma trận hấp dẫn
Thuật toán tìm các phần trên, dưới và quá trình sử dụng các thuộc tính của trên, dưới và cả hai phần trên dưới, sẽ được sử dụng trong thuật toán phân đoạn, vừa trình bày trong 3.3.2.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Tìm điểm tách ma trận
hấp dẫn
Lấy giá trị khởi đầu cho Dưới, Trên, Trái, Phải… i_dưới :=1
i_trên := 1;
Dưới (i_dưới) := tổng các giá trị cột i+1 đến n Trên (i_trên) := tổng các giá cột từ 1 đến i
s
K:=1
PC(k, 1) hay PC(k,2) có trong TRÊN
PC(k, 1) và PC(k,2) không có trong DƯỚI
P_trên tăng thêm một phần tử PC(k, 1) hay PC(k,2) có trong DƯỚI đ đ s
P_dưới tăng thêm một phần tử K:= k+1
K < = l
P_hai tăng thêm một phần tử đ Kết thúc s đ s
Hình 3.9. Thuật toán tìm các phần, dùng để phân đoạn dọc.
1. Đầu vào:
Ma trận hấp dẫn nxn HD2;
Vecto thống kê số các truy cập của các quá trình theo các thuộc tính PCk, k=1..l;
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
2. Đầu ra: điểm x trên đường chéo, mà tại đó giá của các quá trình
đạt cực đại. kết quả ra được biểu diễn theo phần TRÊN, DƯỚI.
Hình 3.10. Minh họa hình của chương 2.
3.4. Kết luận chương
Chương trên đã trình bày thuật toán phân đoạn dọc, với các thuật toán chi tiết:
1. Thuật toán tìm phần trên, dưới, trong ma trận hấp hẫn; 2. Thuật toán tìm điểm tách trên ma trận hấp dẫn;
3. Thuật toán phân đoạn, dựa vào ma trận hấp dẫn đã sắp xếp lại. Các chương trình kèm theo cho thấy kết quả xuất trên tệp ngoài, tên là fketqua.txt. Chương trình được viết bằng ngôn ngữ lập trình Pascal 7.0, phù hợp với môi trường đang được sử dụng tại cơ sở đào tạo của học viên.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
KẾT LUẬN
Kết quả luận văn đạt được
Qua việc thực hiện luận văn tốt nghiệp cao học công nghệ thông tin, học viên sẽ hiểu sâu hơn về quá trình cơ sở dữ liệu phân tán, từ đó có những thay đổi cho phù hợp để khai thác cơ sở dữ liệu tại các cơ sở giáo dục đạt kết quả tốt.
Dựa trên thực tế về vấn đề tuyển sinh THPT tỉnh Thái Nguyên, căn cứ nhu cầu và điều kiện thực tiễn, từ đó đề xuất các giải pháp trong công tác quản lý thi tuyển sinh, nâng cao hiệu quả xử lý và khai thác dữ liệu đối với các cấp quản lý cũng như tại các nhà trường.
Việc nghiên cứu và thử nghiệm thuật toán tụ năng lượng sẽ tạo điều kiện cho học viên hoàn thành luận văn tốt nghiệp, đồng thời tăng cường năng lực nghiên cứu về thuật toán trong công nghệ thông tin, cụ thể trong thiết kế cơ sở dữ liệu.
Trong thời gian thực hiện tìm hiểu lí thuyết và ứ ng du ̣ng, luận văn đạt được một số kết quả sau:
Tìm hiểu vai trò của cơ sở dữ liệu phân tán, với các dạng phân đoạn; đặc biệt tìm hiểu về ứng du ̣ng cần đến phân đoạn dọc;
Tìm hiểu vai trò của thuật toán tụ năng lượng BEA trong quá trình thiết kế cơ sở dữ liệu phân tán với phân đoạn dọc;
Thử nghiệm các đoạn chương trình, cho phép phân đoạn dọc đối với cơ sở dữ liệu thử nghiệm và cơ sở dữ liệu thực tế. Bài toán thử nghiệm với hệ thống cơ sở dữ liệu về tuyển sinh THPT tại Sở GDDT tỉnh Thái Nguyên.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Riêng đối với bản thân học viên, luận văn là cơ hội để học viên rà soát kiến thức về cơ sở dữ liệu nói chung và cơ sở dữ liệu phân tán nói riêng; đặc biệt hệ thống xử lí dữ liệu, phục vụ công tác quản lý giáo dục tại đơn vị công tác.
Phương hướng tìm hiểu và thực nghiệm tiếp theo của luận văn
Sau khi kết thúc chương trình đào tạo cao học về công nghệ thông tin, luận văn còn phải tiếp tục hoàn thiện, để phục vụ công tác quản lý giáo dục trong thực tế. Một số phương hướng đặt ra là:
Thu thập dữ liệu, hoàn thiện hệ thống dữ liệu về công tác tuyển sinh THPT, không chỉ trong một năm tuyển sinh, mà trong một thời kì, nhằm có dữ liệu so sánh;
Hoàn thiện chương trình phân đoạn dọc cơ sở dữ liệu phân tán, áp dụng cho bài toán khác về công tác quản lý trong ngành GDDT tại Thái Nguyên.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1]. Đỗ Trung Tuấn, Cơ sở dữ liệu nâng cao, NXB. Đại học Quốc gia Hà Nội, 2015.
[2]. Phạm Thế Quế, “Giáo trình Cơ sở dữ liệu: Lý thuyết và thực hành”, Nhà xuất bản Bưu điện, Hà Nội, 2004.
[3]. Website Cổng thông tin điện tử tỉnh Thái Nguyên, http://www.thainguyen.gov.vn/wps/portal/vb1
[4]. Website Sở GD-ĐT Thái Nguyên, http://thainguyen.edu.vn/
Tiếng Anh
[5]. Abram Siberschatz, Henry F.Korth, S.Sudarshan “Database Systems Concepts”, Published by McGaw-Hill/ Irwin, New York, 2002.
[6]. Angelo R. Bobak, Distributed and Multi-Database Systems, Ed. Artech House, 1998.
[7]. Donald Knuth, The Art of Computer Programming Volumes 1, 2, 3, NXB. Addison Wesley, 1968.
[8]. M. Tamer Ozsu And Patricle Valduriez, “Principles of Distributed Database Systems”, Second Edition, Prentive Hall Upper Saddle River, New Jersy, 1999.
[9]. Michanel V.Mannino, “Database Application Development & Design”, Published by McGraw-Hill/ Irwin, New York, 2001. [10].W. T. McCormick Jr., P. J. Schweitzer, T. W. White, Problem
Decoposition and Data Reorganization by a Clustering technique, Operations Research, Vol. 20, N. 5, 1972.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
PHỤ LỤC
Chương trình phân đoạn
program phandoan; uses CRT;
{ chuong trinh phan doan doc, voi bang R (C1,..., Cn) Ci, i=1, n } { cac qua trinh P1,..., Pk truy cap R Pk, k=1, l }
{ Cac tram phan tan la S1,..., Sm Sj, j=1, m }
{ muc dich cua chuong trinh la tach R thanh R1, R2... } type
vect = array [1..17] of integer; var
fpc, facc, fkq, fthtinh: text;
MAX, i, j, k, l, m, n, w, w1, w2, i_tach: integer; pc: array [1..10, 1..2] of integer;
acc: array [1..10, 1..10] of integer; aff, tg: array [1..10] of integer;
hd, hd2: array [1..15, 1..15] of integer; thtinh: array [1..15] of integer;
ten_tht: array [1..15] of string; bXYZ, bXY, bYZ, bXZ: integer; R1, R2, chiso: vect;
b_trai, b_phai: boolean;
p_tren, p_duoi, p_hai: vect; {cac cot TREN, DUOI} gia_t, gia_d, gia_h: integer; {gia cua TREN, DUOI}
procedure xep (var chiso: vect; p, q:integer);
{chuong trinh xu li day n vi tri; chuyen vi tri q vao sau vi tri p}
var
chiso2: vect; i: integer; begin
for i:=1 to p do chiso2[i]:=chiso[i]; chiso2[p+1]:=chiso[q];
for i:= p+2 to q do chiso2[i]:= chiso[i+1]; for i:= q+1 to n do chiso2 [i]:= chiso[i]; for i:=1 to n do chiso[i]:= chiso2[i]; {cap nhat vecto thtinh}
for i:=1 to n do thtinh[i]:= chiso[i+1]; end; {CTC}
procedure vitri (var chiso: vect; d: integer);
{kiem tra vi tri d+1 co xem vao d vi tri da co, roi thay doi. Lam dau d=2 }
var
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn begin max:= 0; {lan dau d=4} j:=1; repeat ix:= chiso [j]; {C0}
iy:= chiso [d]; {C duoc xet} iz:= chiso [j+1]; {C1}
if (j = d) then iz:= chiso[d+2]; {truong hop cuoi cung} {tinh bxy}
if (ix= 0) or (iz= n+1) then bxy:=0 else begin
bxy:= 0;
for i:=1 to n do bxy:= bxy + hd [i, ix] * hd [i, iy]; end;
{tinh byz}
if (iy= 0) or (iz=n+1) then bxz:=0 else begin
byz:= 0;
for i:=1 to n do byz:= byz + hd [i, iy] * hd [i, iz]; end;
{tinh bxz}
if (ix= 0) or (iz= n+1) then bxz:=0 else begin
bxz:= 0;
for i:=1 to n do bxz:= bxz + hd [i, ix] * hd [i, iz]; end;
{tinh CONT}
CONT:= 2 *(bxy+byz-bxz); if (max < CONT) then Begin
max:= CONT; ix_new:= ix; iy_new:= iy; end;
{sang luot sau} ix:= ix +1; iz:= iz +1;
{xet bo ba tiep theo} j:= j+1;
until (j > d);
{doi vi tri tren vecto chiso } xep (chiso, ix_new, iy_new); end; {CTC vitri}
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
procedure tim_P (x: integer; var p_tren, p_duoi, p_hai: vect);
{ dua tren vi tri x tren duong cheo, xac dinh cac tap qua trinh P_TREN, P_DUOI, P_HAI}
{ vecto p_tren co dang [1]: so cac cot thuoc tinh; [i]: ten cot} var
trai, phai: vect; begin
{gan gia tri dau vecto 0 } p_tren [1]:= 0;
p_duoi [1]:= 0; p_hai [1]:= 0; phai[1]:= 0; trai[1]:= 0; {tao DUOI, TREN} for j:= x to n do begin phai [1]:= phai [1] +1; w:= phai[1]; phai [w]:= thtinh[j]; end; for j:=1 to x-1 do begin trai [1]:= trai[1]+1; w:= trai [1]; trai [w]:= thtinh[j]; end; w1:= trai [1]; w2:= phai [1];
{xet L qua trinh Pk} for k:=1 to l do begin b_trai:= false; b_phai:= false; for j:=1 to w1 do if (pc[k, 1] = trai [j+1]) or (pc[k, 2] = trai [j+1]) then b_trai:= true;
for j:=1 to w2 do
if (pc[k, 1] = phai[j+1]) or (pc[k, 2] = phai[j+1]) then b_phai:= true;
if b_trai and not (b_phai) then begin {tang P_TREN}
p_tren [1]:= p_tren [1] +1; w:= p_tren[1];
p_tren[w]:= k; end;
if b_phai and not (b_trai) then begin {tang P_DUOI}
p_duoi [1]:= p_duoi[1] +1; w:= p_duoi[1];
p_duoi[w]:= k; end;
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
if b_phai and b_trai then begin {tang P_HAI}
p_hai[1]:= p_hai[1] +1; w:= p_hai[1]; p_hai[w]:= k; end; end; {k} end; {tim_P} begin
{se doc vao n_max=15, l_max=10, m_max=10 } n:= 10;
m:= 4; l:= 8;
{gan gia tri cac thuoc tinh, tuc Ci} for i:=1 to n do thtinh [i]:= i;
{file ket qua trung gian}
assign (fkq, 'fkq.txt'); rewrite (fkq);
{doc so lieu thong ke su dung ca thuoc tinh }
assign (fpc, 'fpc.txt'); reset (fpc); for i:=1 to l do begin read (fpc, pc [i, 1]); readln(fpc, pc [i, 2]); end; {kiem tra}
writeln (fkq, '... tan so truy cap cot Cj cua qua trinh Pk...'); for i:=1 to l do begin write (fkq, '--', pc[i, 1]); writeln(fkq, pc[i, 2]); end;
{doc thong ke su dung Pk tai cac tram Sj}
assign (facc, 'facc.txt'); reset (facc);
for i:=1 to l do begin
for j:=1 to m do read (facc, acc[i, j]); readln(facc);
end;
{kiem tra ACC} for i:=1 to l do begin
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn writeln(fkq); end; {tinh AFF} for i:=1 to l do begin aff [i]:=0; for j:=1 to m do
aff[i]:= aff[i] + acc[i, j]; end;
{kiem tra}
writeln (fkq, '... hap dan, theo qua trinh...'); for k:=1 to l do writeln (fkq, aff[k]);
{tinh ma tran hap dan HD } for i:=1 to n do for j:=1 to n do hd[i, j]:=0; for k:=1 to l do begin i:= pc[k, 1]; j:= pc[k, 2]; hd[i, j]:= aff[k]; hd[j, i]:= aff[k]; end; for j:=1 to n do begin w:=0; for i:=1 to n do begin hd2 [i, j]:=hd[i, j]; w:= w+ hd [i, j]; end; hd2 [j, j]:= w; {hd2 co duong cheo } end;
{in ma tran hap dan xep cum }
writeln (fkq, '... ma tran hap dan xep cum....'); for i:=1 to n do
begin
for j:=1 to n do write (fkq, '..', hd [i, j]); writeln(fkq);
end;
writeln (fkq, '... ma tran hap dan xep cum DUONG CHEO....'); for i:=1 to n do
begin
for j:=1 to n do write (fkq, '..', hd2[i, j]); writeln(fkq);
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
{xet C1, C2, C3. Tinh bXYZ} {xay dung vecto chi so, dai n+2} chiso[1]:=0;
for i:=2 to n+2 do chiso[i]:= i; for i:=4 to n+1 do vitri (chiso, i); {kiem tra chi so }
for i:= 1 to n+2 do write (fkq, '..', chiso[i]); writeln (fkq);
{--- phan doan---}
for i:= n downto 3 do begin
MAX:= -11111; {so nho} gia_t:=0;
gia_d:= 0; gia_h:=0;
tim_P (i, p_tren, p_duoi, p_hai); {tinh gia}
w:= p_tren[1];
for j:=1 to w do gia_t:= gia_t + aff[j+1]; w:= p_duoi[1];
for j:=1 to w do gia_d:= gia_d + aff[j+1]; w:= p_hai[1];
for j:=1 to w do gia_h:= gia_h + aff[j+1]; w:= gia_t * gia_d - gia_h*gia_h;
if (max < w) then begin
max:= w;
i_tach:= i; {vi tri phan doan} end;
if not (i=n) then BEGIN
{hoan vi HD2, dong cuoi len tren, thtinh dau ve cuoi} {dong}
for j:=1 to n do tg[j]:= hd2[n, j]; for i:=n downto 2 do
for j:=1 to n do hd2[i, j]:=hd2[i-1, j]; for j:=1 to n do hd[1, j]:= tg[j];
{thtinh}
for i:=1 to n do tg[i]:= hd2[i, n]; for j:=n downto 2 do
for i:=1 to n do hd2[i, j]:=hd2[i, j-1]; for i:=1 to n do hd[i, 1]:= tg[i];
{cap nhat thtinh} w:= thtinh[1];
for j:=n downto 2 do thtinh[j]:= thtinh[j-1]; thtinh[1]:= w;
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
{in kiem tra HD2 sau hoan vi}
writeln (fkq, '----ma tran hap dan HD2 sau hoan vi....'); w:= i-n+1;
writeln (fkq, 'Lan thu: ', w); for i:=1 to n do
begin
for j:=1 to n do write (fkq, '..', hd2[i, j]); writeln(fkq);
writeln (fkq, '... cot thuoc tinh...'); for j:=1 to n do write (fkq, '..', thtinh[j]); writeln(fkq);
end; END; end; {i}
{da co i_tach, ung voi max. Phan ra 2 quan he, theo vecto thtinh} {su dung kí hieu R1, R2 cho quan he tach ra}
R1 [1]:= i_tach -1; {so cac thuoc tinh trong R1} for j:=1 to i_tach-1 do R1[j+1]:= thtinh[j];
R2[1]:= n-i_tach+2; {so thuoc tinh trong R2, cong voi thuoc tinh khoa C1}
for j:=2 to n-i_tach+1 do R2[j]:= thtinh[i_tach+j-2]; R2[2]:=thtinh[1];
{in ket qua phan doan}
writeln(fkq, '--- KET QUA PHAN DOAN ---'); writeln (fkq, '.... QUAN HE R1:'); w:= R1 [1]; for j:=1 to w do write (fkq, '...', R1[j]); writeln(fkq); writeln (fkq, '.... QUAN HE R2:'); w:= R2 [1]; for j:=1 to w do write (fkq, '...', R2[j]); writeln(fkq);
{doc ten thuoc tinh}
assign (fthtinh, 'fthtinh.txt'); reset (fthtinh);
for j:=1 to n do readln(fthtinh, ten_tht[j]); {in ket qua tren man hinh}
writeln ('... Quan he thu nhat R1....'); for j:=1 to R1[1] do
begin
w:=R1 [j+1]; writeln ('..Thuoc tinh ', j:2, ten_tht[w]); end;
writeln ('... Quan he thu hai R2....'); for j:=1 to R2[1] do
begin
w:=R2 [j+1]; writeln ('..Thuoc tinh ', j:2, ten_tht[w]); end;
readln;