Thuật toán tìm phần trên, phần dưới trong ma trận hấp dẫn

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán tụ năng lượng BEA (bond energy algorithm) trong thiết kế cơ sở dữ liệu phân tán tuyển sinh trung học phổ thông tỉnh thái nguyên​ (Trang 70 - 82)

2. Cấu trúc luận văn

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.

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;

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.

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.

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.

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

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

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}

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;

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

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);

{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;

{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; end.

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán tụ năng lượng BEA (bond energy algorithm) trong thiết kế cơ sở dữ liệu phân tán tuyển sinh trung học phổ thông tỉnh thái nguyên​ (Trang 70 - 82)

Tải bản đầy đủ (PDF)

(82 trang)