Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị

MỤC LỤC

Mục lục

1. Lý do chọn đề tài …………………………………………………………….3

2. Những kiến thức cơ sở ………………………………………………………3

2.1. Khái niệm thuật toán ……………………………………………….3

2.2. Các đặc trưng của thuật toán ……………………………………….4

2.3. Độ phức tạp thuật toán ……………………………………………..4

3. Tổng quan về mô phỏng thuật toán ………………………………………….4

3.1. Khái niệm mô phỏng thuật toán ……………………………………4

3.2. Lịch sử mô phỏng thuật toán ……………………………………….5

3.3. Tác dụng của mô phỏng thuật toán trong dạy học………………….6

3.4. Một số yêu cầu đối với mô phỏng thuật toán ………………………8

4. Tổng quan về đồ thị ………………………………………………………….8

4.1. Định nghĩa đồ thị …………………………………………………...9

4.2. Phân loại đồ thị ……………………………………………………..9

4.3. Cây khung và cây khung nhỏ nhất …………………………………10

4.4. Các phương pháp biểu diễn đồ thị ………………………………....10

5. Phân tích và thiết kế hệ thống mô phỏng thuật toán trên đồ thị …………….11

5.1. Phân tích hệ thống mô phỏng thuật toán đồ thị…………………….11

5.1.1. Mục đích……………………………………………………..11

5.1.2. Đặc điểm …………………………………………………….11

5.1.3. Kết quả phân tích…………………………………………….12

5.2. Thiết kế hệ thống mô phỏng thuật toán đồ thị……………………...14

5.2.1. Màn hình nền hệ thống mô phỏng…………………………...14

5.2.2. Giao diện chính và chức năng trình mô phỏng ……………..14

6. Cài đặt mô phỏng thuật toán đồ thị …………………………………………15

6.1. Công cụ lập trình …………………………………………………..15

6.2. Cài đặt thuật toán Prim …………………………………………….16

6.2.1. Bài toán ……………………………………………………..16

6.2.2. Ý tưởng thuật giải …………………………………………..16

6.3. Cài đặt các lớp trong chương trình…………………………………17

6.3.1. Lớp cơ sở …………………………………………………..17

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN 1

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị 6.3.2. Lớp Prim ……………………………………………………18

6.3.3. Lớp Main …………………………………………………...18

7. Kết luận ……………………………………………………………………18

8. Hướng phát triển …………………………………………………………..18

Tài liệu tham khảo

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN 2

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị

1. Lý do chọn đề tài

Lý thuyết đồ thị là một vấn đề hết sức phức tạp, hơn nữa nó chiếm một vị trí

quan trọng trong khối kiến thức cơ sở của ngành công nghệ thông tin. Để hiểu được lý

thuyết về đồ thị cũng như hiểu được hoạt động của các thuật toán trên đồ thị cần phải có

thời gian tìm hiểu lâu dài. Việc dạy và học về đồ thị trong nhà trường cũng gặp nhiều

khó khăn. Các thuật toán khiến cho người học khó hiểu, khó hình dung nhất là với

những người mới bắt đầu học Tin ví dụ như thuật toán Dijkstra và nếu chỉ với các dòng

lệnh của thuật toán, người dạy đôi khi cũng rất khó truyền đạt cho người học ý tưởng,

hoạt động của thuật toán như thế nào. Sử dụng việc mô phỏng các thuật toán trên đồ thị

sẽ giải quyết được vấn đề này. Bởi vì việc mô phỏng với giao diện đồ hoạ, rất trực quan,

có chú giải từng bước, đồng thời với giao diện đồ họa trực quan như vậy, người sử dụng

có thể tương tác với hệ thống mô phỏng. Mô phỏng sẽ giúp cho người học nhanh chóng

hiểu được bản chất, hiểu được từng câu lệnh trong thuật toán hoạt động như thế nào,

đồng thời đánh giá được tính đúng đắn của thuật toán. Còn đối với người dạy, mô

phỏng sẽ giúp cho người dạy dễ dàng truyền đạt ý tưởng của thuật toán, giúp cho quá

trình giảng dạy thuận lợi hơn. Hơn nữa, mô phỏng làm cho người học cảm thấy hứng

thú hơn khi tiếp xúc với các thuật toán trên đồ thị. Mô phỏng cũng là một công cụ giảng

dạy hiệu quả cho người dạy và cũng là một tư liệu học tập tốt.

Như vậy mô phỏng thuật toán nói chung và mô phỏng các thuật toán đồ thị

nói riêng mang lại nhiều lợi ích trong việc dạy và học về lý thuyết đồ thị. Đồng thời nó

cũng góp phần quan trọng vào việc ứng dụng công nghệ thông tin vào việc giảng dạy

trong nhà trường. Thuật toán về đồ thị chiếm một số lượng khá lớn, tuy nhiên số lượng

thuật toán được mô phỏng và đưa vào áp dụng để giảng dạy thì còn hạn chế. Cũng có

nhiều trang Web về mô phỏng thuật toán đồ thị nhưng hầu hết chưa có hệ thống. Cao

học K15 cũng có một luận văn mô phỏng thuật toán đồ thị như thuật toán Dijkstra, thuật

toán Kruskal. Vì vậy trong khuôn khổ nghiên cứu của mình, em xin tiếp tục nghiên cứu

việc mô phỏng một số thuật toán đồ thị như thuật toán Prim, các thuật toán tìm kiếm

theo chiều rộng, chiều sâu trên đồ thị.

2. Những kiến thức cơ sở

2.1. Khái niệm thuật toán

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

3

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị Thuật toán là một hệ thống chặt chẽ và rõ ràng các quy tắc nhằm xác định một

dãy các thao tác trên cấu trúc dữ liệu sao cho: với một bộ dữ liệu vào, sau một số hữu

hạn bước thực hiện các thao tác đã chỉ ra, ta đạt được mục tiêu đã định.

2.2. Các đặc trưng của thuật toán

- Tính đơn định: Ở mỗi bước của thuật toán, các thao tác phải hết sức rõ ràng,

không gây nên sự nhập nhằng, lộn xộn, đa nghĩa. Thực hiện đúng các bước của thuật

toán thì với một bộ dữ liệu vào chỉ cho duy nhất một kết quả ra.

- Tính dừng: Thuật toán không được rơi vào quá trình vô hạn, phải dừng

lại và cho kết quả sau một số hữu hạn bước.

- Tính đúng: Sau khi thực hiện tất cả các bước của thuật toán theo đúng

quá trình đã định, ta phải đạt được kết quả mong muốn với mọi bộ dữ liệu đầu vào. Kết

quả đó được kiểm chứng bằng yêu cầu bài toán.

- Tính phổ dụng: Thuật toán phải dễ sửa đổi để thích ứng được với bất kì

bài toán nào trong một lớp các bài toán và có thể làm việc trên các dữ liệu khác nhau.

- Tính khả thi: Kích thước dữ liệu phải đủ nhỏ, thuật toán phải được máy tính

thực hiện trong thời gian cho phép, thuật toán phải dễ hiểu và dễ cài đặt.

2.3. Độ phức tạp thuật toán

Cho f và g là hai hàm xác định dương với mọi n. Hàm f(n) được

gọi là O(g(n)) nếu tồn tại một hằng số c > 0 và một giá trị n0 sao cho:

f(n) ≤ c.g(n) với mọi n ≥ n0

Nghĩa là nếu xét những giá trị n ≥ n0 thì hàm f(n) sẽ bị chặn trên bởi một

hằng số nhân với g(n). Khi đó, nếu f(n) là thời gian thực hiện của một giải thuật

thì ta nói giải thuật đó có cấp là g(n) (hay độ phức tạp tính toán là O(g(n))).

3. Tổng quan về mô phỏng thuật toán

3.1. Khái niệm mô phỏng thuật toán

Mô phỏng thuật toán (Algorithm Animation) là quá trình tách dữ liệu, thao

tác, ngữ nghĩa và tạo mô phỏng đồ họa cho quá trình trên [Stasko 1990]. Mô

phỏng thuật toán được thiết kế để giúp người dùng có thể hiểu thuật toán, đánh

giá chương trình và sửa lỗi chương trình.

Một chương trình máy tính chứa các cấu trúc dữ liệu của thuật toán mà nó thực

thi. Trong quá trình thực thi chương trình, các giá trị trong cơ sở dữ liệu được thay đổi.

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

4

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị Mô phỏng thuật toán sử dụng biểu diễn đồ họa để biểu diễn cấu trúc dữ liệu và chỉ ra sự

thay đổi giá trị trong cơ sở dữ liệu trong mỗi trạng thái. Thông qua đó, người sử dụng

có thể xem được từng bước thực thi chương trình và nhờ vậy có thể hiểu chi tiết được

thuật toán.

Mô phỏng thuật toán cũng được dùng để đánh giá một chương trình đã có bằng

cách cung cấp các mô phỏng cho các thành phần của hệ thống, nhờ đó có thể kiểm tra

được hiệu năng của hệ thống.

Bên cạnh việc giúp người sử dụng hiểu hơn về hệ thống, mô phỏng thuật toán

còn được dùng để giúp thực hiện quá trình dò lỗi dễ dàng hơn. Để sử dụng mô phỏng

thuật toán trong quá trình dò lỗi của một chương trình, người sử dụng chú thích vào các

trạng thái của chương trình để tạo ra các lệnh mô phỏng, sau đó chúng sẽ được đưa vào

hệ thống mô phỏng thuật toán để tạo mô phỏng. Người sử dụng có thể xem chương

trình của họ đã thực hiện như thế nào, các giá trị dữ liệu ở mỗi bước và một bước sẽ ảnh

hưởng tới các bước sau như thế nào. Nó sẽ giúp người sử dụng tìm ra tất cả các lỗi có

thể xảy ra trong chương trình.

3.2. Lịch sử mô phỏng thuật toán

Mô phỏng thuật toán đã được xây dựng từ hai thập kỷ gần đây. Nhưng chương

trình mô phỏng thuật toán đầu tiên là của Ken Knowlton ở Bell Telephone Laboratories

khi mô phỏng ngôn ngữ liên kết danh sách vào năm 1966. Mô phỏng thuật toán phát

triển mạnh vào đầu những năm 80 của thế kỷ 20.

Vào năm 1981, video (sorting out sorting) được xây dựng bởi Ronald Baecker ở

đại học Toronto được coi là khởi điểm của lĩnh vực mô phỏng thuật toán. Từ đó các nhà

giáo dục đã sử dụng mô phỏng thuật toán để trợ giúp quá trình dạy học. Giữa những

năm 80 và đầu những năm 90, hai hệ thống có ảnh hưởng mạnh đến về sau được phát

triển và có ý nghĩa lớn trên tất cả những hệ thống sau này. Hai hệ thống này là BALSA-

I (Brown ALgorithm Simulator and Animator) [Brown 1984] và TANGO (Transition-

based Animation GeneratiOn) [Stasko 1990].

Từ khi hai hệ thống của BALSA và TANGO được phát triển, các hệ thống đi sau

của hai hệ thống đáng chú ý này cũng được phát triển. Với việc phát triển của công

nghệ mới, tính phổ dụng của mạng toàn cầu và sự tiến hóa của ngôn ngữ lập trình Java,

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

5

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị những người phát triển đã xây dựng những hệ thống mô phỏng thuật toán trực tuyến, có

lợi thế của những hệ thống mở dễ tiếp cận hơn.Một số nhà phát triển cũng hợp nhất việc

sử dụng đa phương tiện trong các hệ thống của họ. Việc sử dụng các hệ thống mô

phỏng thuật toán không còn bị bó hẹp trong các lớp học truyền thống hoặc phòng thí

nghiệm giảng dạy nữa mà đã được mở rộng để dạy từ xa.

Trong khoảng hai thập niên gần đây, một số rất lớn các hệ thống mô phỏng thuật

toán đã ra đời và phát triển mạnh mẽ. Phần lớn các hệ thống mô phỏng thuật toán đã đề

cập trong mục này đều phổ biến hơn và phức tạp hơn các hệ thống đang được sử dụng

trong thực tế. Chúng đã được phát triển và sử dụng bởi những nhà chuyên môn, với mục

đích giáo dục hoặc nghiên cứu thực nghiệm của họ. Một trong số các hệ thống này có

một kiến trúc phức tạp và cần những công nghệ đặc biệt để chạy nó. Chúng ta không có

bất kỳ tiện ích nào của các hệ thống này để xây dựng hệ thống mô phỏng các thuật toán

đồ thị; thay vào đó, chúng ta đã ước lượng được các hệ thống mô phỏng hiện hữu khác

mà kích thước nhỏ hơn và có những kiến trúc đơn giản hơn.

3.3. Tác dụng của mô phỏng thuật toán trong dạy học

Các hệ thống mô phỏng thuật toán được sử dụng rộng rãi như công cụ hỗ trợ

giảng dạy trong ngành giáo dục khoa học máy tính. Một số nghiên cứu thực nghiệm đã

ước lượng hiệu quả của chúng trong giáo dục và kết quả nhận được có thay đổi. Những

tác dụng của việc áp dụng mô phỏng thuật toán trong dạy học được ghi nhận lại như

sau:

Việc sử dụng các hoạt cảnh mô phỏng thuật toán gây hứng thú cho người học,

làm tăng tính sáng tạo của người học. Sử dụng mô phỏng kết hợp với phương pháp

thuyết trình truyền thống làm tăng tốc độ hiểu biết cho người học. Ngoài ra mô phỏng

giúp cho người học dễ hiểu thuật toán hơn thông qua các bước mô phỏng trực quan kết

hợp với mã nguồn chương trình.

Tuy nhiên việc sử dụng mô phỏng thuật toán không phải lúc nào cũng đem lại

hiệu quả. Các nghiên cứu thực nghiệm của Stasko (1993) và Bynre (1996) đã cho kết

quả là giữa nhóm sinh viên sử dụng mô phỏng và nhóm không sử dụng mô phỏng thì

hiệu quả đạt được không có sự chênh lệch là mấy. Những kết quả thí nghiệm bất lợi này

gợi ý những yếu tố quan trọng khác trong việc sử dụng mô phỏng thuật toán. Các kết

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

6

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị quả đã thông báo rằng để đạt được hiệu quả mô phỏng thuật toán đầy đủ thì điều quan

trọng là mô phỏng được sử dụng phối hợp với những yếu tố khác. Phải để sinh viên tự

mình sử dụng, điều khiển quá trình mô phỏng và phải để họ tự tạo những bộ dữ liệu của

riêng mình. Để mô phỏng thuật toán mang lại hiệu quả cao nhất, nó phải thoả mãn

những yêu cầu sau đây :

Thứ nhất, sử dụng mô phỏng thuật toán phải song song với những chỉ dẫn, có hệ

thống trợ giúp sử dụng, phải có mô phỏng từng bước để người học hiểu từng bước của

giải thuật, có khả năng quay lui để ngườu học có thể quay lại những bước quan trọng,

đồng thời lấy ý kiến phản hồi từ sinh viên để cải thiện chương trình mô phỏng thuật

toán tốt hơn.

Hai là phải biết xây dựng mô phỏng hiệu quả : mô phỏng cái gì, mô phỏng như

thế nào, hình ảnh ra sao,...

Một chương trình mô phỏng thuật toán hiệu quả phải đáp ứng được các yêu cầu :

 Truy cập mở (Open access): Người dùng có thể truy cập hệ thống mô

phỏng mở. Hơn nữa, nếu có cài đặt hệ thống mô phỏng trong trường học, thì họ có thể

truy cập tới hệ thống này từ nhà hoặc từ bất cứ nơi nào khác.

 Mô phỏng một cách có điều khiển (Control animation): Người dùng có

thể tự tạo tập dữ liệu của chính mình khi sử dụng hệ thống mô phỏng. Trong khi các tập

dữ liệu được cài đặt sẵn cũng có thể giúp đỡ sinh viên có những sự hiểu biết ban đầu, hệ

thống nên có cả 2 tùy chọn này.

 Tương tác (Ineractivity): Hệ thống mô phỏng phải cung cấp được sự

Tương tác giữa người dùng và hệ thống. Sự tương tác bao gồm: người dùng xem theo

từng bước, hủy, chạy nhanh tới một bước mong muốn, hay xem lại từ đầu, ...

 Lịch sử (History): Hệ thống mô phỏng cho phép người dùng xem lại các

bước trước trong quá trình thực hiện.

 Phản hồi (Feedback): Phải tiếp thu phản hồi của sinh viên về việc sử dụng

hệ thống mô phỏng để ước lượng hiệu quả của hệ thống cũng như để cải thiện hệ thống.

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN 7

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị 3.4. Một số yêu cầu đối với mô phỏng thuật toán

- Phản ánh đúng nội dung thuật toán : Thuật toán được đưa ra mô phỏng phải

chính xác, các bước thực hiện thuật toán phải trực quan và phản ánh đúng theo nội dung

thuật toán đã đưa ra để đảm bảo tính đúng đắn của thuật toán.

- Hệ thống mô phỏng phải được thực hiện theo từng bước : thuật toán

thường là trừu tượng, nếu để chương trình chạy tự động thì người dùng sẽ khó hiểu. Vì

vậy, cần phải có chế độ thực hiện mô phỏng thuật toán theo từng bước, để người học có

thể quan sát, theo dõi sự thay đổi giá trị của từng biến. Nhờ đó, sẽ giúp cho người học

hiểu thuật toán rõ hơn và nhanh hơn.

- Mô tả thuật toán phải có tính động: để mô tả trực quan hóa quá trình

thực hiện của thuật toán ta nên đưa vào hình ảnh động (có thể có âm thanh) để thể hiện

sự thay đổi của dữ liệu trong quá trình thực thi. Ví dụ như, trong thuật toán tìm cây

khung nhỏ nhất - thuật toán Prim, ta đưa vào các đối tượng đồ họa là đỉnh, cạnh. Trong

quá trình thực thi thuật toán thì các đỉnh/cạnh được chọn sẽ sáng nhấp nháy và đổi màu,

sau khi được chọn thì các đỉnh/cạnh sẽ được tô màu khác với màu ban đầu. Tương ứng

với quan sát sự thay đổi trên đồ thị, ta có thể đưa vào đoạn thuật toán thể hiện tương

ứng và song song với quá trình duyệt trên đồ thị. Nhờ đó mà thuật toán được thể hiện

một cách rõ nét, sinh động, trực quan. giúp người đọc dễ theo dõi, dễ hiểu thuật toán

hơn.

- Thuật toán được thử nghiệm trong mọi trường hợp để đảm bảo thời gian

thực hiện tốt nhất : một thuật toán được mô phỏng phải đảm bảo là thuật toán tốt, dễ

hiểu và đúng đắn. Muốn vậy ta phải thử nghiệm trong các trường hợp dữ liệu ngẫu

nhiên, tốt nhất, xấu nhất. Nếu thuật toán vẫn chạy tốt và trong một thời gian cho phép

thì thuật toán mới hiệu quả. Ta không thể chấp nhận một thuật toán đúng mà thời gian

chạy quá lớn.

- Tạo ra các mức độ khác nhau cho người dùng: Đối tượng học thuật toán

thường là các sinh viên. Họ có trình độ tiếp thu khác nhau, nên ta phải đưa ra nhiều chế

độ thao tác khác nhau để người học được phép lựa chọn.

4. Tổng quan về đồ thị

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

8

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị 4.1. Định nghĩa đồ thị

Một đồ thị được hiểu là một bộ hai tập hợp hữu hạn: Tập hợp đỉnh và tập hợp

cạnh nối các đỉnh này với nhau. Một đồ thị được mô tả hình thức như sau:

G = (V, E)

Trong đó V là tập các đỉnh (Vertices) và E là tập các cạnh (Edges). Như vậy có

thể coi đồ thị là tập các cặp (u, v) với u và v là hai đỉnh của V.

4.2. Phân loại đồ thị

Chúng ta có thể phân loại đồ thị theo đặc tính và số lượng của tập các cạnh E.

Cho đồ thị G = (V, E).

- G được gọi là đơn đồ thị nếu giữa hai đỉnh u và v của V có nhiều nhất là

một cạnh trong E nối từ u tới v.

- G được gọi là đa đồ thị nếu giữa hai đỉnh u và v của V có thể có nhiều

hơn một cạnh trong E nối từ u tới v.

- G được gọi là đồ thị vô hướng nếu các cạnh trong E là không định

hướng, tức là cạnh nối hai đỉnh u, v bất kì cũng là cạnh nối hai đỉnh u, v

- G được gọi là đồ thị có hướng nếu các cạnh trong E là có định hướng,

có thể có cạnh nối từ đỉnh u tới đỉnh v nhưng chưa chắc đã có cạnh nối từ đỉnh v tới

đỉnh u.

Chu trình của đồ thị: chu trình là một dãy cạnh kế tiếp khép kín sao cho mỗi

đỉnh của đồ thị được đi qua không quá một lần.

Chu trình được kí hiệu bởi việc đưa ra các cạnh và các đỉnh liên tiếp nhau trên

chu trình. Chẳng hạn chu trình C đi qua các đỉnh p1, p2, …, pk và các cạnh e1, e2, …, ek

thì ta viết

C = (p1, e1, …, pk, ek, p1)

Trong trường hợp đồ thị là đồ thị đơn, thì thay vì viết rõ các cạnh và các đỉnh,

chu trình được xác định duy nhất qua việc gọi tên các đỉnh nó đi qua. Ví dụ chu trình C

ở trên có thể viết thành:

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

9

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị C = (p1, p2, …, pk, p1)

Số cạnh của chu trình được gọi là độ dài của chu trình và thông thường hay kí

hiệu là l(C).

4.3. Cây khung và cây khung nhỏ nhất

- Cây là đồ thị vô hướng, liên thông, không có chu trình đơn. Đồ thị vô hướng

không có chu trình đơn được gọi là một rừng (hợp của nhiều cây). Như vậy mỗi thành

phần liên thông của một rừng là nhiều cây.

- Cây khung: Cho G là một đơn đồ thị. Một cây được gọi là cây khung của G nếu

nó là một đồ thị con của G và chứa tất cả các đỉnh của G.

- Cây khung nhỏ nhất: Nói chung, ta có thể định nghĩa cây khung nhỏ nhất cho

một đồ thị G như sau: Nếu mỗi cạnh eij = (vi, vj) có một trọng số cij, thì cây khung nhỏ

nhất là một tập hợp các cạnh ký hiệu là Espan, sao cho:

C = sum( cij | eij  Espan )

là nhỏ nhất.

4.4. Các phương pháp biểu diễn đồ thị

4.4.1. Biểu diễn đồ thị bằng ma trận kề

Giả sử G = (V, E) là một đơn đồ thị có số đỉnh (kí hiệu |V| là n), không mất tính

tổng quát, có thể coi các đỉnh được đánh số 1, 2, …, n. Khi đó ta có thể biểu diễn đồ thị

bằng một ma trận vuông A = [aij] cấp n. Trong đó:

 aij = 1 nếu (i, j)  E

 aij = 0 nếu (i, j)  E

 Quy ước aii = 0 với mọi i;

Đối với đa đồ thị thì việc biểu diễn cũng tương tự trên, chỉ có điều nếu như

(i,j) là cạnh thì không phải ta ghi số 1 vào vị trí aij mà là ghi số cạnh nối giữa đỉnh i và j.

Ví dụ:

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

10

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị

4.4.2. Biểu diễn bằng ma trận liên thuộc

Sử dụng ma trận (aij) có kích thước n x m với n là số đỉnh, m là số cạnh của đồ

thị. Trước hết ta đánh số các đỉnh của đồ thị từ 1 đến n, còn các cạnh được đánh số từ 1

đến m. Ta gán cho aij giá trị bằng 0 nếu cạnh thứ j không chứa đỉnh i hoặc 1 nếu ngược

lại.

Ví dụ:

5. Phân tích và thiết kế hệ thống mô phỏng thuật toán trên đồ thị

5.1. Phân tích hệ thống mô phỏng một số thuật toán đồ thị

5.1.1. Mục đích

Hệ thống nhằm giúp cho quá trình học tập về cấu trúc dữ liệu và giải thuật được

diễn ra một cách thuận lợi hơn. Cụ thể: giúp học sinh, sinh viên dễ hiểu, dễ nắm bắt

được thuật toán, có thể hiểu chi tiết thuật toán làm gì và làm như thế nào. Hơn nữa, với

ưu điểm là một trang Web nên người học có thể truy cập vào bất kì lúc nào, vào bất kì

thời điểm nào. Như vậy người học có thể luyện tập vào bất kì lúc nào sau khi học bài

trên lớp.

5.1.2. Đặc điểm

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

11

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị Hiện nay, trên mạng cũng đã có khá nhiều trang Web làm về mô phỏng thuật

toán, trong đó cũng có một số trang viết về mô phỏng thuật toán đồ thị. Nhưng hầu hết

các trang Web đó là của nước ngoài nên chúng được viêt bằng tiếng Anh. Điều này gây

khó khăn cho những người không thông thạo tiếng Anh và cả với những người mới học

về cấu trúc dữ liệu và giải thuật. Hơn nữa hầu hết các trang đó chỉ giới thiệu thuật toán,

sau đó trình chiếu mô phỏng các ví dụ mẫu. Điều này làm cho người học khó hiểu về

thuật toán, không nhận biết được thuật toán làm cụ thể những gì, người dùng không thể

xem lại các bước trước đó dẫn đến việc học thuật toán không hiệu quả. Một vấn đề nữa

là các trang Web đó không kết hợp được việc mô phỏng và hiển thị code của thuật toán.

Một số trang có kết hợp được cái đó nhưng hầu hết code thuật toán được viết bằng ngôn

ngữ Java, yêu cầu người học phải có một trình độ nhất định thì mới có thể hiểu được

thuật toán. Ở thời điểm hiện tại cũng đã có một số rất ít trang Web có giao diện thân

thiện với người dùng, chúng vừa cho phép hiển thị đồ thị mẫu, một bên là giả mã của

thuật toán, có thể thực hiện mô phỏng từng bước giúp người dùng có thể nắm bắt thuật

toán dễ dàng hơn. Nhưng hệ thống đó còn hạn chế là không thể thực hiện quay lui được,

sau khi mô phỏng xong một đồ thị, ta không thể thực hiện mô phỏng đối với một đồ thị

mới.

Ngày nay, với sự bùng nổ công nghệ Web, việc dạy và học không thể dừng lại ở

phương pháp truyền thống mà còn kết hợp với trực quan sinh động. Và việc xây dựng

một hệ thống mô phỏng thuật toán đồ thị khắc phục những nhược điểm của các hệ

thống hiện tại là rất cần thiết.

5.1.3. Kết quả phân tích

a. Tìm hiểu hệ thống hiện tại

- Hiện tại chưa có Website nào bằng tiếng Việt.

- Các mô phỏng thường tách rời với thuật toán, người dùng phải quay lại trang

trước đó hoặc một trang khác để xem thuật toán, khó nhận biết hiện tại thuật toán đang

chạy ở bước nào.

Ví dụ:

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

12

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị

Hình vẽ mô phỏng thuật toán Prim

- Một số hệ thống đã hiện thị thuật toán cùng với mô phỏng của nó nhưng hầu

hết là hiển thị cả một đoạn code chương trình, mà hầu hết là viết bằng ngôn ngữ Java, C

nên không thuận tiện.

- Có một trang Web đã cho hiển thị đoạn code thuật toán bằng ngôn ngữ tựa

Pascal kết hợp với mô phỏng, có thể vẽ đồ thị như ý mình muốn để mô phỏng nhưng lại

không cho phép người dùng thực hiện từng bước một cách hoàn chỉnh, còn bị lỗi, không

có hệ thống menu, không có hướng dẫn thực hiện gây khó khăn cho người sử dụng.

b. Các cơ hội cải tiến

Từ thực tế là em đã được tiếp xúc và học về cấu trúc dữ liệu và giải thuật, cùng

với việc tìm hiểu ý kiến của các sinh viên khoá sau thì việc hiểu các cấu trúc dữ liệu và

các thuật toán là rất khó và trừu tượng, nhất là với những thuật toán phức tạp. Việc hiểu

và hình dung hoạt động của các thuật toán trên đồ thị lại càng vất vả hơn. Nhu cầu hiện

tại của hầu hết những người học cũng như người dạy là việc dạy và học thuật toán được

thuận lợi hơn. Như vậy cần có một hệ thống mô phỏng thuật toán hiệu quả, chạy đồng

thời một bên là đồ thị, một bên là chương trình viết bằng giả mã. Từ đó phân tích những

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

13

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị chức năng cần thiết, cơ bản của hệ thống mô phỏng để mọi người sử dụng có thể tiếp

cận một cách dễ dàng.

c. Hướng phát triển cho hệ thống mới

Thông qua phân tích hệ thống hiện tại và xác định cơ hội cải tiến, hệ thống mới

sẽ tạo ra những thay đổi đáng kể so với hệ thống hiện tại nhằm mang lại hiệu quả mong

muốn, khắc phục những tồn tại vốn có. Hệ thống mới cho phép chạy đồng thời một bên

là đồ thị mẫu, một bên là đoạn giả mã tương ứng. Có thể chạy từng bước để người dùng

tiện theo dõi. Hệ thống mô phỏng có hệ thống menu, trợ giúp và các hiển thị trên màn

hình đều bằng tiếng Việt. Ngoài ra hệ thống cho phép người dùng có thể vẽ một đồ thị

theo ý và thực hiện mô phỏng với nó.

5.2. Thiết kế hệ thống mô phỏng thuật toán đồ thị

5.2.1. Màn hình nền của hệ thống mô phỏng

Màn hình của hệ thống mô phỏng là một trang Web có giới thiệu tổng quan về

các thuật toán đồ thị. Trên đó có trình mô phỏng không hiển thị ngay trên màn hình mà

nó được kích hoạt từ một nút nhỏ trên trang Web đó. Sau khi kích hoạt nút đó thì màn

hình riêng của trình mô phỏng (hay giao diện của chương trình mô phỏng) sẽ hiện ra.

5.2.2. Giao diện chính và các chức năng của trình mô phỏng

Mỗi thành phần của giao diện chính đều thực hiện một chức năng của trình mô

phỏng.

Giao diện chính của trình mô phỏng thuật toán đồ thị là một màn hình được định

dạng chuẩn, được phát triển với một hệ thống thực đơn (menu) tuỳ chọn chung để lựa

chọn các chức năng như tạo một đồ thị mới, mở một đồ thị đã có, lựa chọn các thuật

toán để thực hiện trên mô phỏng trên một đồ thị (gồm các thuật toán Prim, BFS, DFS và

chọn thuật toán nào thì giả mã lệnh tương ứng sẽ thể hiện trên màn hình), ... Ngoài ra

còn có tuỳ chọn “Trợ giúp” trong hệ thống thực đơn đó.

Giao diện mô phỏng được thiết kế trên nền một Frame chuẩn gồm một thanh

menuBar có các menu con, hai Panel là hai vùng để hiển thị: đồ thị dùng để thực hiện

mô phỏng và giả mã của thuật toán viết bằng ngôn ngữ tựa Pascal. Thành phần tiếp theo

là các nút có chức năng kích hoạt quá trình mô phỏng, gồm có:

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

14

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị - Nút “Chạy” là nút kích hoạt mô phỏng. Khi chọn nút lệnh này, thì

chương trình sẽ thực hiện mô phỏng thuật toán đã chọn trên đồ thị mẫu đã có. Việc thực

hiện mô phỏng diễn ra từ đầu đến cuối cho đến khi kết thúc thuật toán mà không dừng

lại giữa chừng. Và nó cho ta kết quả cuối cùng. Trong quá trình mô phỏng, những thay

đổi trên đồ thị mẫu tương đương với các bước của thuật toán bằng giả mã ở bên cạnh.

Chạy đến bước nào của thuật toán thì giả mã lệnh sẽ được tô đậm và đổi màu. Đồng

thời với quá trình đó là các cạnh và đỉnh của đồ thị được duyệt và được chọn tương ứng

cũng sẽ được chiếu sáng và đổi màu.

- Nút “Từng bước” là nút cho phép người dùng thực hiện mô phỏng theo

từng bước của thuật toán. Mỗi lần chọn nút này thì một bước của thuật toán được thực

hiện, đến bước nào thì giả mã lệnh sẽ tô đậm và đổi màu và các đỉnh, cạnh được duyệt

tương ứng bước đó sẽ được chiếu sáng và đổi màu. Nút này cho phép người dùng theo

dõi việc thực hiện thuật toán một cách chậm, tỉ mỉ từng chi tiết.

- Nút “Kết thúc” cho phép người dùng dừng công việc mô phỏng bất kì

lúc nào.

Ngoài ra còn có các thành phần hiển thị khác như các chú thích của quá trình mô

phỏng. Các chú thích này có tác dụng để hiển thị những thay đổi trong quá trình mô

phỏng qua các bước. Ví dụ đối với mô phỏng thuật toán Prim, các thông tin cần hiển thị

tại mỗi bước như đỉnh xuất phát, tổng trọng số nhỏ nhất lúc này là bao nhiêu, các

đỉnh/cạnh được chọn là đỉnh/cạnh nào.

6. Cài đặt mô phỏng thuật toán đồ thị

6.1. Công cụ lập trình

Báo cáo này sử dụng Java là ngôn ngữ để thực thi bởi vì nó hỗ trợ tốt cho giao

diện người dùng và mô phỏng. Trong đó, đáng kể đến là một vài lý do của mô phỏng

thuật toán:

- Đầu tiên là việc làm cho việc hiểu thuật toán dễ dàng hơn.

- Thứ hai là, vấn đề trực quan hóa đã giúp cho cả hai đối tượng, đó là người ứng

dụng giải thuật và sinh viên học giải thuật hiểu chi tiết giải thuật.

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

15

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị - Mô phỏng một thuật toán có thể khuyến khích người thiết kế vào việc tìm thấy

những biến đổi mới của giải thuật.

- Java là một ngôn ngữ hướng đối tượng, phân tán, thông dịch, mạnh mẽ, bảo

mật và có cấu trúc độc lập

- Chương trình Java có thể dịch và thực hiện trong mọi môi trường điều hành,

miễn là ở đó có có chương trình thông dịch. Hiện nay có nhiều môi trường hỗ trợ để

phát triển phần mềm với Java như: Visual J++, Borland JBuilder, JDK, IntelliJ IDEA

5.1,...

 Các chương trình ứng dụng độc lập

 Các chương trình ứng dụng nhúng Applet

 Các chương trình kết hợp cả hai loại trên

6.2. Cài đặt thuật toán Prim – tìm cây khung nhỏ nhất

6.2.1. Bài toán

Input:

G = (V, E) liên thông, n đỉnh, m cạnh.

Hàm trọng số: φ : E → R+

Output:

T = (V, E’) là cây bao trùm nhỏ nhất.

6.2.2. Ý tưởng thuật giải

Thuật toán Prim là ứng dụng của thuật toán tìm kiếm theo chiều rộng với tư

tưởng tham lam. Ở bước khởi tạo, một cây T được chọn đơn giản nhất với một đỉnh và

không có cạnh nào. Trong mỗi bước của thuật toán ta luôn tìm cách bổ sung vào cây

một cạnh (cùng với một đỉnh) có trọng số nhỏ nhất trong tất cả các cạnh có thể sao cho

nó liên thông và nối một đỉnh nằm trong T với một đỉnh nằm ngoài T, do đó không làm

phát sinh chu trình trong T. Thuật toán dừng lại khi tất cả các đỉnh được bổ sung vào

cây T.

Theo ngôn ngữ tự nhiên, ta có thể mô tả thuật toán như sau:

1. Khởi tạo: chọn một đỉnh bất kì cho vào T. Chẳng hạn T = {s}

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

16

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị 2. Nếu còn có đỉnh chưa thuộc T, nhưng kề với một đỉnh trong T thì chọn

cạnh có trọng số nhỏ nhất trong số đó cho vào T. Nếu không còn đỉnh nào như vậy thì

dừng thuật toán.

Ta dùng mảng Tree để lưu các cạnh được chọn.

Giải thuật Prim được viết như sau:

Procedure PrimAlgo (G: graph; var Tree: set of edges);

Var T: set of Nodes; { tập hợp các đỉnh}

u, v : Node;

Begin

Tree := Ø;

T := [1];

While T < V do begin {V là tập hợp các đỉnh của G}

gọi (u, v) là cạnh ngắn nhất sao cho u  U và v  V – U;

T := T  [v];

Tree := Tree  [(u, v)];

end;

End;

Để lập trình, chúng ta phải sử dụng cấu trúc hàng đợi Q có ưu tiên theo tiêu

chuẩn giá trị nhỏ nhất.

6.3. Cài đặt các lớp trong chương trình

6.3.1. Các lớp cơ sở

Gồm có các class: Node, Edge, GraphCanvas.

- Node: gồm Gồm tọa độ x, y, và chỉ số no của đỉnh. Khi thuật toán thực

thi thì nhãn được đưa vào cho mỗi node. Tại mỗi thời điểm để phân biệt rõ các bước

chạy của thuật toán, ta tô màu cho các node. Mỗi node có 3 khả năng tô màu (màu xanh

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

17

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị da trời cho node ban đầu, khi được xét đến thì node được tô màu xanh lá cây, khi đã

được lựa chọn thì ta tô màu đỏ cho node đó).

- Edge (lớp thể hiện một cạnh của đồ thị - dùng trong lưa trữ và vẽ

đồ thị): Mỗi cạnh được xác định gồm node đầu, node cuối, trọng số của cạnh, màu của

cạnh. Khi chạy thuật toán thì các cạnh được tô màu và nhấp nháy sáng. Một cạnh cũng

được gán một màu tại mỗi bước thực thi thuật toán, cạnh ban đầu có màu đen, khi được

xét cạnh đó sẽ nhấp nháy và chuyển sang màu xanh lá cây, được lựa chọn thì cạnh nhấp

nháy và có màu đỏ.

- GraphCanvas: dùng để vẽ đồ thị. Cụ thể là vẽ các node, các Edge, và

sinh đồ thị tổng hợp. Đồng thời hiển thị đồ thị lên Panel.

6.3.2. Lớp Prim

Dùng để hiển thị giả mã, đồng thời có các hàm PrimSolve(): void được gọi đến

khi kích chọn nút “Chạy” để thực hiện giải thuật Prim tự động và PrimStep(): void

được gọi đến khi kích chọn nút “Từng bước” để thực hiện mô phỏng theo từng bước

một.

Trong lớp này có hàm extractMin(): int dùng để lấy ra cạnh có trọng số nhỏ nhất

trong tất cả các cạnh đang chờ được xét.

6.3.3. Lớp Main

Dùng để tạo một Applet trên trình duyệt có hỗ trợ Java. Đồng thời cũng là lớp

thiết kế màn hình chính của chương trình mô phỏng. Lớp được xây dựng kế thừa từ lớp

Applet của gói java.applet.

Trong lớp này có sử dụng các gói:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

để xây dựng Panel vẽ đồ thị, thực hiện mô phỏng và thể hiện các chú thích cần thiết.

7. Kết luận

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

18

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị Báo cáo đã trình bày một cách khá tổng quan về mô phỏng thuật toán, các đặc

trưng cơ bản của thuật toán đồ thị và các kỹ thuật lập trình hướng đối tượng với Java để

thiết kế chương trình sử dụng giả mã mô phỏng một số thuật toán đồ thị.

Trên cơ sở phân tích các đặc trưng của mô phỏng thuật toán, các thuật toán đồ

thị, kỹ thuật lập trình Java, báo cáo đã tập trung vào việc phân tích các hệ thống mô

phỏng có trên Website hiện nay, từ đó tìm cách áp dụng kỹ thuật lập trình Java để xây

dựng hệ thống mô phỏng một số thuật toán đồ thị bằng Tiếng Việt để có thể mang lại

nhiều tiện ích cho người dùng, giúp họ dễ hiểu và dễ sử dụng thuật toán.

Do thời gian có hạn nên đến thời điểm nộp báo cáo, sản phẩm demo của chương

trình chưa hoàn thành một cách trọn vẹn. Trong thời gian tới em hi vọng nhận được sự

đóng góp ý kiến của thầy cô và các bạn để em có thể hoàn thành tốt chương trình của

mình.

8. Hướng phát triển

- Hoàn thành sản phẩm “chương trình mô phỏng một số thuật toán đồ thị” một

cách trọn vẹn.

- Cài đặt hoàn chỉnh các thuật toán đồ thị đã nêu.

- Mở rộng hệ thống mô phỏng: cài đặt thêm các thuật toán về đồ thị như tìm

đường một nét Euler, thuật toán liệt kê tất cả các chu trình Haminton của đồ thị, thuật

toán mã hoá Huffman.

- Phát triển hệ thống: triển khai hệ thống trong thực tế.

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

19

Báo cáo nghiên cứu khoa học Mô phỏng một số thuật toán đồ thị

Tài liệu tham khảo

1. Đoàn Văn Ban, Lập trình hướng đối tượng với Java, NXB khoa học và kỹ thuật,

2005.

2. Vũ Đình Hòa, Giáo trình Lí thuyết đồ thị, NXB Đại học sư phạm, 2007.

3. Thomas H. Cormen Charles E. Leiserson Ronald Rivest, chủ biên Ngọc Anh Thư,

Giáo trình thuật toán, Nhà xuất bản thống kê, 2002

4. Burgiel, H. & Raymond, M. (2004), Simple N-gon Counter, www.math.

uiuc.edu/~burgiel/Java/Ngons/ (accessed Nov 2004).

5. http://www.cs.duke.edu/csed/jawaa2/

6. http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/dijkstra/Prim.shtml

7. http://students.ceid.upatras.gr/~papagel/project/prim.htm

8. http://students.ceid.upatras.gr/~papagel/project/adjoin.htm

Bùi Thị Thuỷ - AK54.CNTT.ĐHSPHN

20