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

Bài toán tìm bộ ghép cực đại trên đồ thị ứng dụng giải một số bài toán trong thực tế

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 (2.04 MB, 80 trang )

this.M];
this.Day = new int[this.N];
this.A = new int[M][];
for (int i = 0; i < this.M; i++) this.A[i] = new
int[this.N];
for (int i = 0; i < this.M; i++)
for (int j = 0; j < this.N; j++) this.A[i][j] = 2;
}
private void Hang(int i)
{
int dem = 0;
for (int j = 0; j < this.N; j++)
{
if (this.A[i][j] == 0 && dem < this.P[i])
{
this.A[i][j] = 1;
dem++;
}
}
}
/// <summary>
Số hóa bởi Trung tâm Học liệu – ĐHTN




69

/// Tao Phuong An Ban Dau
/// </summary>
public void Pal()


{
for (int i = 0; i < this.M; i++)
{
this.Hang(i);
}
}
private int TongCot(int j)
{
int p = 0;
for (int i = 0; i < this.M; i++)
{
if (this.A[i][j] == 1) p++;
}
return p;
}
private void TaoDayVoi()
{
for (int j = 0; j < this.N; j++) this.Day[j] = 0;
int t = this.TongCot(0);
for (int j = 1; j < this.N; j++)
{
int tongCotJ = this.TongCot(j);
if (t < tongCotJ)
t = tongCotJ;
}
for (int j = 0; j < this.N; j++)
{
int tongCotJ = this.TongCot(j);
if (t == tongCotJ) this.Day[j] = 1; //Cot Day
//if (t >= tongCotJ + 2) this.Day[j] = -1; //Cot

Voi 1< t -2
if (tongCotJ < t - 2) this.Day[j] = -1;
}
}
private void Gan1()
{
for (int j = 0; j < this.N; j++)

Số hóa bởi Trung tâm Học liệu – ĐHTN




70

{
if (this.Day[j] == 1)
{
this.Gc[j] = 0;
for (int i = 0; i < this.M; i++)
{
if (this.A[i][j] == 1)
if (this.Gh[i] == -1) this.Gh[i] = j;
}
}
}
}
private void Gan2()
{
for (int i = 0; i < this.M; i++)

{
if (this.Gh[i] > 0)
{
for (int j = 0; j < this.N; j++)
{
if (this.A[i][j] == 0)
if (this.Gc[j] == -1) this.Gc[j] = i;
}
}
}
}
private void GanSo()
{
int dem = 0;
for (int i = 0; i < this.M; i++)
{
this.Gh[i] = -1;
for (int j = 0; j < this.N; j++)
{
this.Gc[j] = -1;
dem = 0;
do
{
Gan1();
Gan2();
dem++;
} while (dem == (this.N + this.M));
}
}


Số hóa bởi Trung tâm Học liệu – ĐHTN




71

}
private bool TimVoi()
{
for (int j = 0; j < this.N; j++)
{
if (this.Day[j] == -1 && this.Gc[j] > 0)
{
// j 0:=j;
this.J0 = j;
return true;
break;
}
}
return false;
}
private void Sua(int i, int j)
{
while (i > 0 && j > 0)
{
i = this.Gc[j];
this.A[i][j] = 1 - this.A[i][j];
j = this.Gh[i];
if (j > 0) this.A[i][j] = 1 - this.A[i][j];

}
}
public void ThucHien()
{
do
{
TaoDayVoi();
GanSo();
if (TimVoi()) Sua(this.Gc[this.J0], this.J0);
} while (TimVoi());
}
}
}

Số hóa bởi Trung tâm Học liệu – ĐHTN




72

KẾT LUẬN
1. Kết luận
Sau thời gian nghiên cứu về Lý thuyết đồ thị, tìm hiể u về những ứng du ̣ng và tính
thiết thực của lĩnh vực này, luận văn đã đa ̣t đươc̣ những kế t quả như sau:
Phần lý thuyết:
-Tìm hiểu các khái niệm cơ bản của đồ thị, đồ thị hai phía.
-Tìm hiểu các thuật tốn giải bài toán bộ ghép cực đại trên đồ thị hai phía và trên
đồ thị tổng quát.
Phần thực nghiệm:

- Tìm hiể u đươc̣ mô ̣t số ứng du ̣ng của Lý thuyế t đồ thi ̣ và bước đầ u biế t cách ứng
du ̣ng lý thuyế t để triể n khai áp du ̣ng giải hai bài toán trong thực tế: Bài toán xế p
lớp ho ̣c theo tín chỉ và bài toán điề u hành taxi.
-Cài đặt thử nghiê ̣m chương trình mô phỏng thuâ ̣t toán Hungari giải bài tốn xếp
lớp học theo học chế tín chỉ. Đây là bài tốn có tính thực tế cao.
-Các thuật tốn sử dụng là tìm bộ ghép cực đại với trọng số cực tiểu trên đồ thị
hai phía và thuật tốn phỏng theo thuật toán Hung-ga-ri.
-Thời gian chạy bài toán nhanh.
-Giao diện thân thiện và có thể nâng cấ p để áp du ̣ng vào công viê ̣c đào ta ̣o của
Trường TCKT Viñ h Phúc.
Bên cạnh đó, luận văn cịn mô ̣t số nhươc̣ điể m như: Chương trình mới mơ phỏng
được thuật tốn, chưa mơ tả và giải qú t được hế t các yêu cầ u phát sinh trong thực
tế .
2. Hướng phát triển của đề tài:

Tiếp tục tìm hiểu về mơ hình đào tạo theo học chế tín chỉ để xây dựng phần
mềm hồn chỉnh, với đầy đủ chức năng phục vụ cho công việc đào tạo theo học chế
tín chỉ - một mơ hình đào tạo cịn mới và cịn nhiều khó khăn.
Tìm hiể u thêm về những ứng du ̣ng của Lý thuyế t đồ thi ̣ để giải quyế t các bài
toán trong thực tế .

Số hóa bởi Trung tâm Học liệu – ĐHTN




73

TÀ I LIỆU THAM KHẢO
Tiếng Việt

[1]

Lê Minh Hoàng, Giải thuật và lập trình, Đại học sư phạm Hà Nội 1999-2002

[2]

Nguyễn Cam, Chu Đức Khánh, Lý thuyết đồ thị, NXB Thành phố Hồ Chí Minh,
1999.

[3]

Đinh Mạnh Tường, Cấu trúc dữ liệu và thuật toán, NXB KH&KT, 2001

[4]

Nguyễn Đức Nghĩa – Nguyễn Tơ Thành, Tốn rời rạc, NXB Đại học Quốc Gia
Hà Nội, 2003.

[5]

Kenneth H.Rosen – Toán rời rạc ứng dụng trong Tin học (Bản dịch), NXB Khoa
học và Kỹ thuật, 2003.

Tiếng Anh
[6]

S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani, Algorithms, 2006

[7]


Edmonds, Jack (1965). "Paths, trees, and flowers". Canad. J. Math. 17: 449–
467. doi:10.4153/CJM-1965-045-4

[8]

Hopcroft,JohnE.;RajeevMotwani,JeffreyD.Ullman,

Introduction to Automata

Theory, Languages and Computation,1stedition,Addison-Wesley,
1979.
[9]

Narsingh Deo "Graph Theory with Applications to Engineering and Computer
Science", New Delhi-110001, 2006.

[10] Aho A., The design and analysis of computer algorithms. Addison Wesley Pub.
Comp, London 1976.

Số hóa bởi Trung tâm Học liệu – ĐHTN





×