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

TÌM CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT TRÊN ĐỒ THỊ VÔ HƯỚNG BẰNG GIẢI THUẬT PRIM

21 341 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

Định dạng
Số trang 21
Dung lượng 353 KB
File đính kèm nienluan.zip (127 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài toán về cây bao trùm là một trong những ứng dụng quan trọng của lý thuyết đồ thị.Bài toán tìm cây khung có trọng lượng nhỏ nhất là điển hình của vấn đề tìm cây khung. Nhiều bài toán thực tế khác nhau đã được đưa về bài toán dạng này, mà nội dung cơ bản là: tìm cây khung có trọng lượng nhỏ nhất của một đồ thị vô hướng liên thông. Hiện nay yêu cầu thực tế của các bài toán tìm cây khung rất đa dạng và có rất nhiều phương pháp khác nhau để giải. Tuy nhiên phương pháp dựa trên lý thuyết đồ thị là phương pháp thực sự có hiệu quả để giải các bài toán dạng này.

Trang 1

ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN 1

(Học kì II, Niên khóa 2009 - 2010)

TÊN ĐỀ TÀI: TÌM CÂY KHUNG CÓ TRỌNG LƯỢNG NHỎ NHẤT TRÊN

ĐỒ THỊ VÔ HƯỚNG BẰNG GIẢI THUẬT PRIM

(tối đa 0.5 điểm)

Bìa: (tối đa 0.25điểm)………

 Các tiêu đề:Trường DHCT, Khoa CNTT

 Loại đồ án, Tên đề tài

 Giáo viên hướng dẫn

 Thông tin về sinh viên thực hiên, Năm thực hiện

Bốcục:(tối đa 0.25 điểm)………

 Trang nhận xét của giáo viên hướng dẫn và giáo viên chấm

 Mục lục: (cấu trúc chương, mục, tiểu mục)

 Phụ lục: (nếu có)

 Tài liệu tham khảo

II NỘI DUNG: (tối đa 3.5 điểm)… ………

II 1 Tổng quan (tối đa 0.5 điểm)… ………

 Mô tả bài toán, mục tiêu cần đạt được (0.25 điểm)

 Hướng giải quyết và kế hoạch thực hiện (0.25 điểm)

II 2 Lý thuyết: (tối đa 0.5 điểm)………

 Các khái niệm sử dụng trong đề tài

 Kết quả vận dụng lý thuyết vào đề tài

Trang 2

II 3 Ứng dụng: (tối đa 2.0 điểm)……….

 Phân tích yêu cầu bài toán, xây dựng các cấu trúc dữ liệu cần thiết (0.5điểm)

 Giải thuật (Lưu đồ-Ngôn ngữ giả) (1.0 điểm)

 Giới thiệu chương trình (0.5 điểm)

II 4 Kết luận: (tối đa 0.5 điểm)………

 Nhận xét kết quả đạt được

 Hạn chế

 Hướng phát triển

III CHƯƠNG TRÌNH DEMO: (tối đa 5.0 điểm)

 Giao diện thân thiện với người dùng (1.0 điểm)

Trang 3

Cần Thơ, ngày ……tháng 4 năm 2010 Giáo viên hướng dẫn và chấm điểm

Trang 4

Thưa thầy:

Trong suốt thời gian nghiên cứu và tìm hiểu để thực hiện đề tài niên luận 1,

em đã nhận được sự chỉ dẫn tận tình của Thầy giúp em vượt qua những khó khăn.

Và hôm nay em đã hoàn thành niên luận 1.

Em xin chân thành cảm ơn thầy Lê Đức Thắng, giúp em giải quyết nhữngkhó khăn vấp phải khi thực hiện niên luận…Cảm ơn các bạn học đã trợ giúp mình,trao đổi về ngôn ngữ, giải thuật, động viên mình những lúc khó khăn Cảm ơn cácbạn rất nhiều

Dù không tránh khỏi những khiếm khuyết do hạn chế về mặt thời gian cũngnhư một số kiến thức trong công việc tìm cây khung có trọng lượng nhỏ nhất trên

đồ thị vô hướng còn yếu, nhưng em cũng đã nổ lực hết sức để giải quyết các yêucầu đặt ra Sau gần hai tháng thực hiện, Niên Luận I của em đã đáp ứng đầy đủđược các yêu cầu của đề tài đặt ra Em rất mong nhận được những ý kiến đóng góphết sức quý báu của quý thầy cô và bè bạn để đề tài ngày càng được hoàn thiệnhơn

Chân thành cảm ơn !

Cần Thơ, ngày 04 tháng 04 năm 2010

Sinh viên thực hiện

Võ Thị Tú

Trang 5

MỤC LỤC



LỜI MỞ ĐẦU……… 6

CHƯƠNG I: TỔNG QUAN………7

1.1 Mô tả bài toán, mục tiêu và phạm vi cần đạt được………7

1.1.1 Mô tả bài toán……… ……… 7

1.1.2 Mục tiêu cần đạt được………7

1.2 Hướng giải quyết và kế hoạch thực hiện………8

1.2.1 Hướng giải quyết………8

1.2.2 Kế hoạch thực hiện……….8

CHƯƠNG II: CƠ SỞ LÝ THUYẾT……….9

2.1 Các khái niệm sử dụng trong đề tài………9

2.1.1 Đồ thị vô hướng……… …… 9

2.1.2 Đồ thị liên thông……….9

2.1.3 Cây và cây khung………9

CHƯƠNG III: KẾT QUẢ ỨNG DỤNG……….10

3.1 Phân tích yêu cầu bài toán, xây dựng các cấu trúc dữ liệu cần thiết…10 3.1.1 Phân tích yêu cầu bài toán……… 10

3.1.2 Xây dựng các cấu trúc dữ liệu cần thiết……… 10

3.2 Thiết kế giải thuật (lưu đồ - ngôn ngữ giả)……… 11

3.2.1 Nhập ma trận trọng số……… 11

3.2.2 In ma trận……….12

3.2.3 In các đỉnh đã duyệt (S)……… 12

3.2.4 Kiểm tra……… 12

3.2.5 In cạnh cây khung………13

3.2.6 In đỉnh kề……….13

3.2.7 Giải thuật Prim……….14

3.3 Giới thiệu chương trình……….17

3.3.1 Giao diện chính của chương trình………17

3.3.2 Nhập đồ thị(bằng ma trận trọng số)……….18

3.3.3 Tìm cây khung có trọng lượng nhỏ nhất trên đồ thị………18

CHƯƠNG IV: KẾT QUẢ - ĐÁNH GIÁ……… 19

4.1 Kết quả đạt được……… …… 19

4.2 Những hạn chế - nguyên nhân……… 19

4.2.1 Hạn chế………19

4.2.2 Nguyên nhân……… 19

4.3 Hướng phát triển……… 20

TÀI LIỆU THAM KHẢO……… ……….21

Trang 6

Bài toán về cây bao trùm là một trong những ứng dụng quan trọng của lý thuyết đồ thị.

Bài toán tìm cây khung có trọng lượng nhỏ nhất là điển hình của vấn đề tìm cây khung Nhiều bài toán thực tế khác nhau đã được đưa về bài toán dạng này,

mà nội dung cơ bản là: tìm cây khung có trọng lượng nhỏ nhất của một đồ thị vô hướng liên thông Hiện nay yêu cầu thực tế của các bài toán tìm cây khung rất đa dạng và có rất nhiều phương pháp khác nhau để giải Tuy nhiên phương pháp dựa trên lý thuyết đồ thị là phương pháp thực sự có hiệu quả để giải các bài toán dạng này

Ngày nay, Tin học ngày càng trở nên quan trọng, nó đã xâm nhập vào rấtnhiều ngành, lĩnh vực như: y tế, giáo dục, quốc phòng Sự kết hợp giữa lýthuyết đồ thị và tin học sẽ nâng cao hơn nữa vai trò của chúng trong các ứng dụngthực tiễn của đời sống xã hội hiện đại

Sự mô hình hoá của bài toán tìm cây khung có trọng lượng nhỏ nhất nêu

trên là một ví dụ điển hình về việc áp dụng tin học vào toán học

Tuy nhiên, bên cạnh những ưu điểm của nó còn có một số hạn chế là vìkhông phải lúc nào cũng có thể mô phỏng một bài toán nào đó bằng tin học Vàviệc mô phỏng này cũng khá phức tạp nên chưa được áp dụng rộng rãi trong thực

tế Hy vọng rằng trong thời buổi công nghệ thông tin hiện nay thì vấn đề này sẽđược áp dụng một cách phổ biến hơn Đề tài này đã thật sự cuốn hút tôi, và tôi đã

chọn để thực hiện Niên Luận 1.

Dù đã cố gắng thật nhiều, nhưng chắc chắn rằng tôi sẽ còn nhiều thiếu sót.Rất mong được sự góp ý của Thầy và bạn bè để đề tài này được hoàn thiện hơn.Xin chân thành cảm ơn

Cần Thơ, tháng 4 năm 2010 Sinh viên thực hiện

Võ Thị Tú

Trang 7

CHƯƠNG I

TỔNG QUAN

1.1 MÔ TẢ BÀI TOÁN, MỤC TIÊU VÀ PHẠM VI CẦN ĐẠT ĐƯỢC

1.1.1 Mô tả bài toán:

Lý thuyết Đồ thị - một cấu trúc rời rạc tìm được những ứng dụng rộng rãitrong nhiều lĩnh vực của khoa học kỹ thuật và đời sống - là một trong nhữngngành khoa học ra đời khá sớm Lý thuyết Đồ thị giúp mô tả hình học và giảiquyết nhiều bài toán thực tế phức tạp liên quan đến các khái niệm như: đường đingắn nhất, chu trình, cây bao trùm… bằng các thuật toán ngắn gọn và thú vị

Bên cạnh đó, Tin học cũng ngày càng quan trọng trong đời sống, nhữngứng dụng của nó giúp con người giảm đi một khối lượng công việc rất lớn, giúpcông việc được giải quyết nhanh hơn Đối với lý thuyết đồ thị, tin học giúp nângcao hơn nữa vai trò của lý thuyết đồ thị trong các ứng dụng thực tiễn khi cài đặtcác thuật toán trên máy tính

Bài toán tìm cây khung có trong lượng nhỏ nhất là một trong những bàitoán ứng dụng quan trọng của lý thuyết đồ thị

1.1.2 Mục tiêu cần đạt được

 Ngôn ngữ sử dụng: Tùy chọn ngôn ngữ trong họ C để cài đặt tốt cácchương trình

 Trình bài khái niệm về đồ thị, tính liên thông, cây và cây khung

 Trình bày giải thuật Prim, ví dụ minh họa

 Mô phỏng được hoạt động của giải thuật Prim

 Hiển thị kết quả về cây khung có trọng lượng nhỏ nhất của một đồthị bất kỳ

Trang 8

1.2 HƯỚNG GIẢI QUYẾT VÀ KẾ HOẠCH THỰC HIỆN

1.2.1 Hướng giải quyết:

Dùng ngôn ngữ C để thiết kế chương trình

Thuật toán Prim được thiết kế nhằm giải bài toán tìm cây khung có trọnglượng nhỏ nhất của một đồ thị vô hướng với trọng số không âm Áp dụng giảithuật Prim để tìm cây khung có trọng lượng nhỏ nhất trên một đồ thị vô hướng

1.2.2 Kế hoạch thực hiện:

Tuần 8 : Phân tích và tìm hiểu đề tài

Tuần 9 : Thiết kế giải thuật

Tuần 10 : Hiệu chỉnh giải thuật

Tuần 11 : Hiệu chỉnh giải thuật – Cài đặt DEMO

Tuần 12 - 13: Hiệu chỉnh chương trình – Viết báo cáo

Tuần 14 : Hoàn tất niên luận – Nộp báo cáo

Trang 9

CHƯƠNG II

CƠ SỞ LÝ THUYẾT

2.1 CÁC KHÁI NIỆM SỬ DỤNG TRONG ĐỀ TÀI

2.1.1 Đồ thị vô hướng:

Đồ thị vô hướng ký hiệu G = (X, U) , trong đó:

o X là một tập hợp mà các phần tử của nó được gọi là các đỉnhcủa đồ thị

o U là một tập hợp mà các phần tử của nó là các cặp đỉnh khôngtính đến thứ tự u = (i, j) = (j, i), gọi là cạnh nối giữa đỉnh i vàđỉnh j của đồ thị

2.1.3 Cây và cây khung:

Cây là một đồ thị vô hướng liên thong và không có chu trình

Cây khung trên đồ thị vô hướng G là một đồ thị bộ phận liên thôngkhông có chu trình của G

Trang 10

CHƯƠNG III

KẾT QUẢ ỨNG DỤNG

3.1 PHÂN TÍCH YÊU CẦU BÀI TOÁN, XÂY DỰNG CÁC CẤU TRÚC

DỮ LIỆU CẦN THIẾT

3.1.1 Phân tích yêu cầu bài toán:

Vận dụng các lý thuyết cơ bản về đồ thị để cài đặt chương trình chophép biểu diễn đồ thị, kiểm tra tính liên thông và tìm cây khung có trọnglượng nhỏ nhất bằng giải thuật Prim

3.1.2 Xây dựng các cấu trúc dữ liệu cần thiết:

#define max 50: khai báo giá trị vô cùng của mảng (cả một và hai chiều) –mảng tối đa là 50 phần tử

MT[max][max]: ma trận trọng số - biểu diễn cho đồ thị cần tìm

min=1000: giá trị vô cùng của trọng số là 1000

DK[3][max]: Ma trận chứa đỉnh kề

S[max]: Mảng chứa các đỉnh đã duyệt

T[2][max]: Ma trận cạnh của cây khung

W: Trọng lượng của cây khung

NhapMT(): Đọc đồ thị bằng ma trận trọng số

InMT(): In ma trận trọng số vừa nhập

InS(): In các đỉnh đã duyệt

InDK(): In đỉnh kề và trọng số tương ứng

InT(): In các cạnh của cây khung tìm được

Kiemtra(): kiểm tra xem đỉnh kề đang xét thuộc S hay không

Prim(): Tìm cây khung có trọng lượng nhỏ nhất trên đồ thị vừa nhập

main(): chương trình chính

Ngoài ra, còn sử dụng các cấu trúc rẽ nhánh if, if – else để thực hiện côngviệc Vòng lặp for, while

Trang 11

3.2 THIẾT KẾ GIẢI THUẬT (LƯU ĐỒ - NGÔN NGỮ GIẢ)

a[i][j]=0

j=ii<=n

Trang 12

Đúng

Đúng

begini=1

j=1i<=n

S[i]=

=x

kt= 1break

kt =0

Trang 14

3.2.7 Giải thuật Prim:

- Biểu diễn đồ thị bằng ma trận trọng số

- Bài toán: Cho đồ thị vô hướng G liên thông với tậpcạnh T và hàm trọng số W Tìm cây bao trùm G’ của

G sao cho tổng trọng số các cạnh của G’ đạt giá trị nhỏnhất

 S[]: mảng lưu các đỉnh đã duyệt

 T[2][]: ma trận lưu cạnh cây khung vừa tìmđược

 DK[3][]: ma trận lưu đỉnh kề của các phần tửthuộc S và trọng số của chúng

 Kiemtra(): kiểm tra xem đỉnh kề đang xét cóthuộc S hay không

 W: trọng lượng cây khung – khởi tạo W=0

 min: trọng lượng của cạnh nhỏ nhất – khởi tạomin=1000

 count: biến đếm số phần tử trong DK – khởi tạocount=0

 dem: biến đếm số phần tử trọng S – khởi tạodem=1

Trang 15

Sai Đúng

SaiĐúng

Sai Đúng

Đúng

Sai

BeginNhập n

DK[1][count]= iDK[2][count]=MT[S[k][i]]

count++

i++

Trang 16

Đúng

j=0

j<count

S[dem]=tcount=0min=1000dem++

Xuất S, W,

T

Trang 17

3.3 GIỚI THIỆU CHƯƠNG TRÌNH

Chương trình được cài đặt bằng ngôn ngữ C, với giao diện chính như sau:

3.3.1 Giao diện chính của chương trình:

Ví dụ: Đồ thị gồm 5 đỉnh và 10 cạnh như hình vẽ

1 15 3

4

20

3 3 1

2

2

1

3 2

Trang 18

3.2.2 Nhập đồ thị (bằng ma trận trọng số):

Nhập số đỉnh của đồ thị: nhập từ bàn phím là 5 Lần lượt nhập 10 cạnh vàtrọng số của 10 cạnh

3.3.3 Tìm cây khung có trọng lượng nhỏ nhất trên đồ thị:

Nhập đỉnh bắt đầu: giả sử ta bắt đầu từ đỉnh 1

Trang 19

CHƯƠNG IV

KẾT LUẬN – ĐÁNH GIÁ

4.1 KẾT QUẢ ĐẠT ĐƯỢC

Với sự hướng dẫn tận tình của Thầy và sự giúp đỡ của bạn bè Hômnay, niên luận 1 cơ bản đã được hoàn thành và đạt được một số kết quả nhưsau:

o Hiểu, thiết lập được thuật toán và viết chương trình dựa vàothuật toán đã thiết lập

o Chương trình đã giải quyết được về cơ bản những yêu cầuđặt ra Chương trình chạy khá ổn định nhập dữ liệu từ bàn phím

o Chương trình được thiết kế bằng thuật toán đơn giản, dễ hiểunên dễ dàng kiểm tra và sửa chữa khi có yêu cầu chỉnh sửa

o Biết cách trình bày một báo cáo khoa học đúng theo yêu cầu

4.2 NHỮNG HẠN CHẾ - NGUYÊN NHÂN

4.2.1 Hạn chế:

Là sinh viên như chúng em, kinh nghiệm tích luỹ chưa có nhiều, khả năngtiếp xúc thực tế còn rất ít Hơn nữa, đây là lần đầu tiên viết một chương trình hoànchỉnh nên vẫn còn thiếu nhiều kinh nghiệm trong kỹ thuật lập trình cũng như trongcách lý luận để đưa ra cơ sở giải quyết cho bài toán Do đó, chương trình cũng cònnhiều thiếu sót:

o Chương trình chỉ cho phép đọc đồ thị từ bàn phím và không lưu lạiđược kết quả

o Chưa kiểm tra tính liên thong của đồ thị

o Phần hiển thị giao diện chưa có đồ họa nên không hiển thị đồ thị vàchưa hiển thị cây khung có trọng lượng nhỏ nhất trên đồ thị vô hướngđang xét

4.2.2 Nguyên nhân:

Do thiếu kinh nghiệm trong kỹ thuật lập trình, tổ chức dữ liệu… hạn chế vềthời gian và kiến thức nên còn một số sai sót ngoài ý muốn

Trang 20

4.3 HƯỚNG PHÁT TRIỂN

Để chương trình được hoàn thiện hơn, cần cố gắng khắc phục những hạnchế trên Và cần sử dụng kỹ thuật đồ họa thiết kế giao diện đồ họa để minh họa bàitoán một cách rõ ràng và sinh động hơn Cần sử dụng tập tin để đọc đồ thị nhanhhơn và dể chỉnh sữa hơn

Cài đặt chương trình kiểm tra tính liên thong Nếu đồ thị có nhiều bộ phậnliên thông xác định các bộ phận liên thong và tìm cây khung trên từng bộ phận liênthông

Ở đây, có thể dùng ngôn ngữ Delphi, C, Visual Basic, C++,…, để thiết kếgiao diện đồ họa

Trang 21

[1] TOÁN RỜI RẠC 2 – KHOA CNTT&TT – ĐẠI HỌC CẦN THƠ 2009

[2] ThS TRƯƠNG VĂN CHÍ CÔNG – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

C++ - KHOA CNTT&TT – ĐẠI HỌC CẦN THƠ 12/2003

[3] NGUYỄN CÔNG DANH THỰC HÀNH LẬP TRÌNH CĂN BẢN A

-KHOA CNTT&TT - ĐẠI HỌC CẦN THƠ 2008

[4] NGUYỄN VĂN LINH, TRẦN CAO ĐỆ, TRƯƠNG THỊ THANH

TUYỀN, LÂM HOÀI BẢO, PHAN HUY CƯỜNG, TRẦN NGÂN

BÌNH - CẤU TRÚC DỮ LIỆU - KHOA CNTT&TT - ĐẠI HỌC CẦN

THƠ 12/2003

[5] http://www.google.com

Ngày đăng: 14/11/2018, 13:18

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w