1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo cuối kỳ môn phân tích thiết kế và giải thuật chủ đề thuật toán quy hoạch động

12 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thuật Toán Quy Hoạch Động
Tác giả Lê Phan Gia Minh
Người hướng dẫn GV Văn Thế Thành
Trường học Trường Đại Học Sư Phạm TP. HCM
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo
Năm xuất bản 2021 – 2022
Thành phố TP. HCM
Định dạng
Số trang 12
Dung lượng 2,96 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC SƯ PHẠM TP... Cài đặt.Hướng dẫn chạy chương trình:Sau khi giải nén thầy chọn mục Grap_Theory.sln và chạy bằng MS Visual StudioSau đó sẽ được như hình

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM TP HCM KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KỲ MÔN PHÂN TÍCH THIẾT

KẾ VÀ GIẢI THUẬT CHỦ ĐỀ THUẬT TOÁN QUY HOẠCH ĐỘNG

Giảng viên hướng dẫn: GV Văn Thế Thành

Sinh viên thực hiện: Lê Phan Gia Minh

Lớp học phần: COMP140101

MSSV: 45.01.104.143

Năm 2021 – 2022

1

Trang 2

Mục lục

1 Trình bày thuật toán:……… 3

 Input……….………3

 Output……… 3

 Xử lý……… 3

2 Phân tích độ phức tạp……… 3

3 Ứng dụng cụ thể………5

4 Thiết kế……… 5

5 Cài đặt………7

 Hướng dẫn sử dụng……….7

 Kết quả các test case………9

Trang 3

1 Trình bày thuật toán.

In put:

Gồm 1 ma trận của đồ thị

Ví dụ:

Out put:

Xuất ra đường đi ngắn nhất giữa 2 điểm

bất kì

Ví dụ:

Xét điểm 1 -> 3 của đồ thị trên

Đường đi ngắn nhất: 1 -> 2 -> 3

Xử lý:

Khởi tạo lấy điểm 1 làm điểm xuất phát

C1: từ điểm 1 ta có đường đi đến điểm 2 và điểm 4 => ở điểm 2 và điểm 4 lần lượt

ta có (3,1), (10,1) với 3 và 10 là khoảng cách giữa 2 điểm lần lượt là 2 và 4 so với điểm 1 Và do khoảng cách từ 1 -> 2 ngắn hơn từ 1 -> 4 nên tại đây ta chốt ở điểm 2

C2: từ điểm 2 có 2 đường đi đến là 3 và 4 và do đã có khoảng cách từ 1 ->2 ở C1 nên ta sẽ cộng dồn vào khoảng cách ở tại điểm 3, 4 lần lượt là (4, 2), (6, 2) Khoảng cách từ 2->3 ngắn hơn nên ta sẽ chốt tại 3 với (4, 2)

C3: tương tự như C1, C2 ta có 4 (11, 4) và kết thúc

Yêu cầu tìm đường đi ngắn nhất từ 1->3 nên ta có:

=>lấy đường đi 1 -> 2 -> 3

2 Phân tích độ phức tạp.

3

Trang 4

C2=1 public int[,] maTran = new int[100, 100];

public void dijkstra(int dinhDau, int dinhCuoi)

{

dinhDau;

dinhCuoi;

{

length[i] = voCuc;

lastV[i] = -1;

}

thuocT[dinhDau] = false;

lastV[dinhDau] = dinhDau;

int v = dinhDau;

int t = dinhDau;

{

C9= (n+1) /22 for (int k = 0; k < soDinh; ++k)

{

C10= n(n+1)/2 if (maTran[v, k] != 0 && thuocT[k] == true &&

(length[k] == voCuc || length[k] > length[v] + maTran[v, k])) {

C11=3n(n+1)/4 length[k] = length[v] + maTran[v, k];

lastV[k] = v;

}

}

C13= (n+1) /22 for (i = 0; i < soDinh; ++i)

{

C14= n(n+1)/2 if (thuocT[i] == true && length[i] != voCuc)

{

C15= n(n+1)/4 if (v == -1 || length[v] > length[i])

C16= n(n+1)/8 v = i;

}

}

}

Trang 5

O(n)= C1+C2+C3+…+C17 = 4+ n+1 + 3n + 5 + (n+1)/2 + (n+1) /2 + n(n+1)/2 +

O(n)= 11 + n + 7n + (13n + 17n + 4)/82 2

=>Bài thuật toán có độ phức tạp là O(n )2

3 Ứng dụng cụ thể.

Khi ta có 1 đồ thị như hình, ta có quy về 1

ma trận với số đỉnh và giá trị khoảng cách

của từng cạnh như ví dụ ở Input và tìm

đường đi ngắn nhất giữa các đỉnh bất kì

Input:

Gồm 1 ma trận của đồ thị

Ví dụ:

Output:

Xuất ra đường đi ngắn nhất giữa 2 điểm bất kì

Ví dụ:

Xét điểm 1 -> 3 của đồ thị trên

Đường đi ngắn nhất: 1 -> 2 -> 3

4 Thiết kế

- Đặt số đỉnh cho ma trận

- Gán vô cực = -1 (vô cực khi không có đường đi giữa 2 điểm)

- Khởi tạo mảng 2 chiều cho ma trận [100,100]

- Tạo hàm đọc tạo ma trận [i,j] của đồ thị

public void docMaTran( [,] _maTran, _soDinh) int int

{

soDinh = _soDinh;

for int ( i = 0; i < soDinh; ++i)

{

for int ( j = 0; j < soDinh; ++j)

{

maTran[i, j] = _maTran[i, j];

}

}

}

- Hàm tìm đường đi ngắn nhất

public void dijkstra( dinhDau, dinhCuoi) int int

{

i = 0; int

dinhDau;

dinhCuoi;

for (i = 0; i < soDinh; ++i)

5

Trang 6

thuocT[i] = true ;

length[i] = voCuc;

lastV[i] = -1;

}

length[dinhDau] = 0;

thuocT[dinhDau] = false ;

lastV[dinhDau] = dinhDau;

v = dinhDau; int

t = dinhDau; int

while (thuocT[dinhCuoi])

{

for int ( k = 0; k < soDinh; ++k)

{

(maTran[v, k] != 0 && thuocT[k] == if true && (length[k] == voCuc ||

length[k] > length[v] + maTran[v, k]))

{

length[k] = length[v] + maTran[v, k];

lastV[k] = v;

}

}

v = -1;

for (i = 0; i < soDinh; ++i)

{

(thuocT[i] == if true && length[i] != voCuc)

{

(v == -1 || length[v] > length[i]) v = i; if

}

}

thuocT[v] = false ;

}

}

- Hàm xuất

public void xuat( dinhDau, dinhCuoi) int int

{

dinhDau;

dinhCuoi;

v = dinhCuoi; int

while (v != dinhDau)

{

duongDi[id] = v;

v = lastV[v];

++id;

}

duongDi[id] = dinhDau;

}

Trang 7

5 Cài đặt.

Hướng dẫn chạy chương trình:

Sau khi giải nén thầy chọn mục Grap_Theory.sln và chạy bằng MS Visual Studio

Sau đó sẽ được như hình:

7

Trang 8

Sau khi bấm start:

Trang 9

Ngoài ra còn có các tính năng “xóa đỉnh”, “xóa cạnh”, “Set/Đổi trọng số”(thay đổi

“Đỉnh cuối”, “Trọng số” sau đó double click vào “Set/Đổi trọng số” )

(Do đây là phần code em đã làm bên môn lý thuyết đồ thị ở học kỳ trước nên còn một số tính năng em chưa kịp remove em mong thầy thông cảm giúp em ạ)

Kết quả các test case:

Test case1:

Test case 2:

9

Trang 10

Test case 3:

Test case 4:

Test case 5:

Trang 11

Test case 6:

Test case 7:

Test case 8:

11

Trang 12

Test case 9:

Test case 10:

Ngày đăng: 14/04/2024, 21:34

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN