Luận văn: Tối ưu truy vấn tìm đường ngắn nhất trên đồ thị động quy mô lớn

Tối ưu tìm đường đi ngắn nhất trên đồ thị động: Khám phá các thuật toán và kỹ thuật hiệu quả để giải quyết bài toán phức tạp này. Ứng dụng thực tế và phân tích chuyên sâu.

Chuyên ngành

Hệ thống thông tin

Người đăng

Ẩn danh

Thể loại

luận văn thạc sĩ

2016

58
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

TRANG PHỤ BÌA

LỜI CẢM ƠN

LỜI CAM ĐOAN

DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT

DANH MỤC CÁC BẢNG

DANH MỤC CÁC HÌNH VẼ

Giới thiệu chung

1. Động lực nghiên cứu

2. Mục tiêu và nội dung chính của luận văn

3. Tổ chức luận văn

1. CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VÀ CÁC VẤN ĐỀ LIÊN QUAN

1.1. Giới thiệu đồ thị

1.2. Một số thuật ngữ cơ bản

1.3. Biểu diễn đồ thị

1.4. Các thuật toán tìm kiếm trên đồ thị và ứng dụng

1.5. Bài toán tìm đường đi ngắn nhất

1.6. Tổng kết chương

2. CHƯƠNG 2: BÀI TOÁN, CÁCH TIẾP CẬN VÀ PHƯƠNG PHÁP GIẢI QUYẾT

2.1. Định nghĩa bài toán

2.2. Các vấn đề liên quan

2.3. Cách tiếp cận giải quyết bài toán

2.4. Cấu trúc dữ liệu phù hợp

2.5. Tối ưu quá trình thêm và xóa cạnh của đồ thị. Thêm mới một cạnh

2.6. Tối ưu quá trình xử lý truy vấn tìm đường ngắn nhất

2.7. Cải thiện thuật toán tìm đường đi ngắn nhất từ hai hướng

2.8. Song song hóa truy vấn tìm đường đi ngắn nhất

2.9. Tổng kết chương

3. CHƯƠNG 3: THỰC NGHIỆM VÀ ĐÁNH GIÁ

3.1. Cuộc thi ACM Sigmod Contest 2016

3.2. Kiểm nghiệm với bộ dữ liệu SNAP

3.3. Tổng kết chương

Kết luận chung

1. Các đóng góp chính

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

Danh mục công trình khoa học của tác giả

Tài liệu tham khảo

Tóm tắt

I. Tổng Quan Bài Toán Tìm Đường Đi Ngắn Nhất Đồ Thị Động

Bài toán tìm đường đi ngắn nhất trên đồ thị động là một thách thức quan trọng trong bối cảnh dữ liệu lớn và thay đổi liên tục. Các ứng dụng thực tế như hệ thống định vị toàn cầu (GPS), mạng xã hội, và mạng lưới giao thông đều yêu cầu khả năng tìm kiếm đường đi ngắn nhất một cách hiệu quả trong môi trường đồ thị thay đổi. Trong đồ thị, tìm đường đi (ngắn nhất) là vấn đề tìm sự kết nối giữa hai đỉnh của một đồ thị và đảm bảo đường đi đó là ngắn nhất dựa trên một số yêu cầu cho trước. Đây là vấn đề nền tảng và cơ bản được áp dụng trong rất nhiều ứng dụng thực tế như tìm đường đi ngắn nhất giữa hai địa điểm sử dụng GPS hay tìm mối liên kết giữa hai người trên mạng xã hội. Vấn đề này bình thường rất đơn giản, nhưng trong bối cảnh số lượng các đỉnh, cạnh của đồ thị rất lớn (vài triệu đỉnh) và thay đổi nhanh (thêm cạnh, bớt cạnh), làm thế nào để tối ưu hóa quá trình tìm đường đi ngắn nhất là một thách thức lớn. Bài toán này không chỉ đòi hỏi tốc độ xử lý nhanh chóng mà còn phải đảm bảo tính chính xác và khả năng thích ứng với những biến động của đồ thị. Các phương pháp tiếp cận truyền thống có thể trở nên kém hiệu quả khi áp dụng cho đồ thị động quy mô lớn, do đó cần có những giải pháp tối ưu hóa để đáp ứng yêu cầu của thực tiễn. Theo nghiên cứu của Đại học Quốc Gia Hà Nội, phương pháp tiếp cận dựa trên đồ thị được cho là trực quan và phù hợp nhất [8]. Với việc sử dụng lý thuyết đồ thị, các đỉnh biểu diễn các thực thể và các cạnh biểu diễn mối liên hệ giữa chúng. Việc lựa chọn thuật toán tìm đường phù hợp và cấu trúc dữ liệu hiệu quả là yếu tố then chốt để giải quyết bài toán này.

1.1. Ứng Dụng Tìm Đường Đi Ngắn Nhất Trên Đồ Thị Động

Bài toán tìm đường đi ngắn nhất động có nhiều ứng dụng quan trọng trong thực tế. Trong hệ thống giao thông thông minh, nó giúp tìm ra lộ trình tối ưu cho xe cộ, giảm thiểu thời gian di chuyển và ùn tắc. Trong mạng xã hội, nó được sử dụng để đề xuất kết nối giữa người dùng, dựa trên mức độ liên quan và gần gũi. Robot di động cũng sử dụng các thuật toán này để tối ưu hóa lộ trình di chuyển trong môi trường thay đổi. Cụ thể, tìm đường đi ngắn nhất giữa hai địa điểm sử dụng GPS hay tìm mối liên kết giữa hai người trên mạng xã hội [6]. Ngoài ra, trong lĩnh vực viễn thông, bài toán này được ứng dụng để tìm đường truyền dữ liệu hiệu quả nhất, giảm thiểu độ trễ và tối đa hóa băng thông. Các ứng dụng này ngày càng trở nên quan trọng trong bối cảnh đô thị hóa và số hóa ngày càng tăng.

1.2. Thách Thức Của Bài Toán Đường Đi Ngắn Nhất Trên Đồ Thị

Một trong những thách thức lớn nhất của bài toán đường đi ngắn nhất động là kích thước của đồ thị. Khi số lượng đỉnh và cạnh tăng lên, không gian tìm kiếm mở rộng, đòi hỏi các thuật toán phải có khả năng xử lý dữ liệu lớn một cách hiệu quả. Thêm vào đó, tính chất động của đồ thị (ví dụ: thay đổi về trọng số cạnh, thêm/xóa đỉnh/cạnh) đòi hỏi thuật toán phải có khả năng cập nhật kết quả nhanh chóng, tránh việc phải tính toán lại từ đầu. Độ phức tạp thuật toán tìm đường đi ngắn nhất trên đồ thị động cần được xem xét. Yếu tố thời gian thực cũng là một thách thức quan trọng, đặc biệt trong các ứng dụng như điều khiển giao thông hoặc robot di động, nơi quyết định cần được đưa ra trong thời gian ngắn nhất. Việc cân bằng giữa tốc độ xử lý và độ chính xác của kết quả là một vấn đề nan giải cần được giải quyết.

II. Các Thuật Toán Tối Ưu Tìm Đường Đi Ngắn Nhất Động

Có nhiều thuật toán được sử dụng để giải quyết bài toán tìm đường đi ngắn nhất trên đồ thị động, mỗi thuật toán có ưu và nhược điểm riêng. Các thuật toán như Dijkstra động, Bellman-Ford động, và thuật toán A động* được sử dụng phổ biến. Thuật toán Bellman-Ford, Dijkstra’s và Floyd-Warshall dùng để tìm đường đi ngắn nhất trong đồ thị G = (V, E) có hướng, có trọng số. Tuy nhiên, trong thực tế, ví dụ như mạng xã hội, bài toán tìm đường đi ngắn nhất cơ bản là tìm số lượng đỉnh trung gian ít nhất để kết nối hai đỉnh. Khi đó đồ thị G = (V, E) có hướng, có trọng số trở thành đồ thị có hướng, không trọng số, hay tất cả trọng số của các cạnh đều là 1. Thuật toán Dijkstra thường được ưu tiên vì hiệu quả cao, tuy nhiên nó không thể xử lý các cạnh có trọng số âm. Thuật toán Bellman-Ford có thể xử lý trọng số âm, nhưng độ phức tạp tính toán cao hơn. Thuật toán A* sử dụng hàm heuristic để hướng dẫn quá trình tìm kiếm, giúp giảm thời gian tính toán, nhưng đòi hỏi việc lựa chọn hàm heuristic phù hợp. Một số thuật toán tìm đường đi ngắn nhất thích ứng cũng được phát triển để đối phó với sự thay đổi của đồ thị, giúp cập nhật kết quả một cách hiệu quả. Trong bối cảnh đồ thị động quy mô lớn, việc kết hợp các thuật toán và kỹ thuật tối ưu hóa là cần thiết để đạt được hiệu suất cao nhất.

2.1. Giải Thuật A Động Hướng Dẫn và Ưu Nhược Điểm

Giải thuật A động* là một biến thể của thuật toán A* được thiết kế để hoạt động hiệu quả trên đồ thị động. Nó sử dụng hàm heuristic để ước tính khoảng cách từ một đỉnh đến đích, giúp hướng dẫn quá trình tìm kiếm và giảm số lượng đỉnh cần xét. Ưu điểm của A động* là tốc độ tìm kiếm nhanh chóng, đặc biệt khi có hàm heuristic tốt. Tuy nhiên, nhược điểm là việc lựa chọn hàm heuristic phù hợp có thể khó khăn, và hiệu suất của thuật toán phụ thuộc nhiều vào chất lượng của hàm heuristic đó. Thuật toán cũng cần được cập nhật khi đồ thị thay đổi để đảm bảo tính chính xác của kết quả.

2.2. Dijkstra Động Giải Pháp Cập Nhật Đường Đi Nhanh Chóng

Dijkstra động là một thuật toán hiệu quả để cập nhật đường đi ngắn nhất khi đồ thị có sự thay đổi. Thay vì tính toán lại toàn bộ đồ thị từ đầu, Dijkstra động chỉ cập nhật những phần bị ảnh hưởng bởi sự thay đổi. Điều này giúp giảm đáng kể thời gian tính toán. Tuy nhiên, Dijkstra động không thể xử lý các cạnh có trọng số âm, và hiệu suất của nó có thể giảm khi có nhiều thay đổi xảy ra trên đồ thị. Việc sử dụng cấu trúc dữ liệu phù hợp, chẳng hạn như hàng đợi ưu tiên, có thể giúp cải thiện hiệu suất của Dijkstra động.

2.3. Bellman Ford Động Giải Thuật Chắc Chắn Cho Trọng Số Âm

Bellman-Ford động là một lựa chọn tốt khi đồ thị có các cạnh với trọng số âm. Nó có thể xử lý các trường hợp phức tạp mà Dijkstra động không làm được. Tuy nhiên, độ phức tạp tính toán của Bellman-Ford động cao hơn so với Dijkstra động, đặc biệt khi đồ thị có kích thước lớn. Do đó, Bellman-Ford động thường được sử dụng khi tính chính xác là ưu tiên hàng đầu, và tốc độ xử lý không quá quan trọng.

III. Tối Ưu Hóa Hiệu Năng Truy Vấn Đường Đi Đồ Thị Động

Để đạt được hiệu năng cao trong bài toán tìm đường đi ngắn nhất trên đồ thị động, cần áp dụng các kỹ thuật tối ưu hóa. Một trong những kỹ thuật quan trọng là sử dụng cấu trúc dữ liệu phù hợp để biểu diễn đồ thị, chẳng hạn như danh sách kề hoặc ma trận kề. Danh sách kề các đỉnh vào của đồ thị: đồ thị sẽ được biểu diễn bởi một danh sách các đỉnh vào của các nốt liên tiếp nhau (incoming_edges) và một mảng chỉ số vào (incoming_index) để có thể lấy được danh sách các đỉnh vào của một nốt trong truy vấn tìm đường ngắn nhất. Vị trí đỉnh vào đầu tiên của nốt N sẽ được lưu trữ tại vị trí N trong mảng chỉ số vào (inconming_index[N]). Thêm vào đó, giá trị số lượng đỉnh vào của một đỉnh cũng được lưu trữ để thuận tiện cho việc duyệt sau này. Danh sách kề các đỉnh ra của đồ thị: tương tự như danh sách kề các đỉnh vào của đồ thị, đồ thị sẽ được biểu diễn bởi một danh sách các đỉnh ra của các nốt liên tiếp nhau (outgoing_edges) và một mảng chỉ số ra (outgoing_index) để có thể lấy được danh sách các đỉnh ra của một nốt trong truy vấn tìm đường đi ngắn nhất. Vị trí đỉnh ra đầu tiên của nốt N sẽ được lưu trữ tại vị trí N trong mảng chỉ số ra (outgoing_index[N]). Ngoài ra, các kỹ thuật như tìm kiếm hai hướng (bi-directional search) và song song hóa quá trình tìm kiếm cũng có thể giúp cải thiện đáng kể tốc độ xử lý. Dự đoán hướng đi ở mỗi lần lặp, số lượng các đỉnh ra/vào cần duyệt ở mức kế tiếp. Trong thuật toán duyệt đồ thị theo chiều rộng từ hai hướng bình thường, nhánh có số lượng đỉnh trong hàng đợi ít hơn sẽ được duyệt ưu tiên. Việc sử dụng bộ nhớ cache hiệu quả và giảm thiểu số lượng truy cập bộ nhớ cũng là một yếu tố quan trọng để tối ưu hóa hiệu năng.

3.1. Cấu Trúc Dữ Liệu Thích Hợp Cho Đồ Thị Động Quy Mô Lớn

Lựa chọn cấu trúc dữ liệu phù hợp là yếu tố then chốt để tối ưu hóa hiệu năng của thuật toán tìm đường đi ngắn nhất trên đồ thị động. Danh sách kề thường được ưu tiên hơn ma trận kề vì nó tiết kiệm không gian bộ nhớ hơn, đặc biệt khi đồ thị có kích thước lớn và số lượng cạnh ít. Tuy nhiên, khi đồ thị có nhiều cạnh, ma trận kề có thể cho hiệu suất tốt hơn. Việc lựa chọn cấu trúc dữ liệu cần được cân nhắc dựa trên đặc điểm của đồ thị và yêu cầu của ứng dụng.

3.2. Kỹ Thuật Tìm Kiếm Hai Hướng Bi Directional Search Trong Đồ Thị

Tìm kiếm hai hướng là một kỹ thuật hiệu quả để giảm thời gian tìm kiếm đường đi ngắn nhất. Thay vì chỉ tìm kiếm từ điểm bắt đầu đến điểm kết thúc, kỹ thuật này đồng thời tìm kiếm từ cả hai phía. Khi hai quá trình tìm kiếm gặp nhau, đường đi ngắn nhất được tìm thấy. Tìm kiếm hai hướng có thể giúp giảm đáng kể không gian tìm kiếm và thời gian tính toán, đặc biệt khi khoảng cách giữa điểm bắt đầu và điểm kết thúc lớn. Tóm lại: giảm thiểu không gian duyệt (giảm thiểu số lượng các đỉnh cần duyệt), chúng ta không chỉ so sánh tổng số đỉnh vào và đỉnh ra tại một mức, mà so sánh với cả mức thứ 2.

3.3. Song Song Hóa Truy Vấn Tận Dụng Sức Mạnh Đa Luồng

Song song hóa quá trình tìm kiếm đường đi ngắn nhất có thể giúp tận dụng sức mạnh của các bộ vi xử lý đa nhân và cải thiện đáng kể tốc độ xử lý. Có nhiều kỹ thuật song song hóa có thể được áp dụng, chẳng hạn như chia đồ thị thành nhiều phần và tìm kiếm trên từng phần song song, hoặc sử dụng các thuật toán song song để tìm kiếm đường đi ngắn nhất. Cilk Plus được sử dụng cho quá trình song song hóa. Trong quá trình thực hiện song song hóa, OpenMP và Pthread cũng được tiến hành thử nghiệm.

IV. Ứng Dụng Kết Quả Tối Ưu Truy Vấn Đồ Thị Động Lớn

Để kiểm nghiệm tính hiệu quả của các phương pháp tối ưu hóa, các thử nghiệm thực tế được thực hiện trên các bộ dữ liệu đồ thị động quy mô lớn. Các kết quả cho thấy rằng việc sử dụng cấu trúc dữ liệu phù hợp, kết hợp với kỹ thuật tìm kiếm hai hướng và song song hóa, có thể giúp giảm đáng kể thời gian tính toán và cải thiện hiệu năng của thuật toán tìm đường đi ngắn nhất. Trong cuộc thi lập trình ACM Sigmod năm 2016 (ACM Sigmod Programming Contest 2016) và được chọn là một trong năm đội xuất sắc nhất giải. Bên cạnh đó, các bộ dữ liệu lớn từ SNAP [5] cũng được dùng để đánh giá phương pháp này. Giải pháp đã được lựa chọn là một trong năm đội xuất sắc nhất cuộc thi lập trình ACM Sigmod 2016 (Hình 3.2) và được mời đến trình bày kết quả tại hội nghị Sigmod 2016. Để kiểm nghiệm phương pháp, một công cụ sinh tự động các sự kiện đã được chúng tôi xây dựng theo phương pháp như đã trình bày ở mục 2. Với mỗi đồ thị, chúng tôi đã sinh bộ kiểm thử với khoảng 1.000.000 sự kiện. So sánh với các phương pháp truyền thống, các phương pháp tối ưu hóa cho thấy sự vượt trội về tốc độ và khả năng thích ứng với sự thay đổi của đồ thị.

4.1. Đánh Giá Thuật Toán Trên Bộ Dữ Liệu SNAP và ACM Sigmod

Các bộ dữ liệu từ SNAP (Stanford Network Analysis Platform) và ACM Sigmod được sử dụng để đánh giá hiệu năng của các thuật toán tìm đường đi ngắn nhất động. Các bộ dữ liệu này có kích thước lớn và độ phức tạp cao, giúp đánh giá khả năng của thuật toán trong điều kiện thực tế. Thông số bộ dữ liệu ACM Sigmod: Đỉnh 1 574 074 - 6 009 555. Cạnh 3 232 855 - 16 518 948. Kết quả thử nghiệm cho thấy rằng các thuật toán tối ưu hóa có thể đạt được tốc độ xử lý nhanh hơn đáng kể so với các thuật toán truyền thống, đồng thời vẫn đảm bảo tính chính xác của kết quả. Các kết quả trên cho thấy, giải pháp đã được lựa chọn là một trong năm đội xuất sắc nhất cuộc thi lập trình ACM Sigmod 2016.

4.2. So Sánh Hiệu Năng Giải Pháp Mới So Với Các Thuật Toán Khác

So sánh với các thuật toán tìm đường đi ngắn nhất động khác, các phương pháp tối ưu hóa cho thấy sự vượt trội về tốc độ và khả năng thích ứng với sự thay đổi của đồ thị. Cụ thể, các thuật toán như Dijkstra động, Bellman-Ford động, và thuật toán A* động được sử dụng phổ biến. Thuật toán Dijkstra thường được ưu tiên vì hiệu quả cao, tuy nhiên nó không thể xử lý các cạnh có trọng số âm. Thuật toán Bellman-Ford có thể xử lý trọng số âm, nhưng độ phức tạp tính toán cao hơn. Các thử nghiệm cho thấy rằng các phương pháp tối ưu hóa có thể giảm thời gian tính toán từ vài giây xuống còn vài mili giây, đồng thời vẫn đảm bảo tính chính xác của kết quả. Điều này cho thấy tiềm năng ứng dụng lớn của các phương pháp tối ưu hóa trong thực tế.

V. Kết Luận Hướng Phát Triển Thuật Toán Đồ Thị Động

Bài toán tìm đường đi ngắn nhất trên đồ thị động là một thách thức quan trọng trong nhiều lĩnh vực. Các phương pháp tối ưu hóa, bao gồm sử dụng cấu trúc dữ liệu phù hợp, kỹ thuật tìm kiếm hai hướng, và song song hóa, có thể giúp cải thiện đáng kể hiệu năng của thuật toán. Các kết quả thử nghiệm cho thấy rằng các phương pháp tối ưu hóa có thể đạt được tốc độ xử lý nhanh hơn đáng kể so với các thuật toán truyền thống, đồng thời vẫn đảm bảo tính chính xác của kết quả. Trong tương lai, cần tiếp tục nghiên cứu và phát triển các thuật toán mới để giải quyết bài toán tìm đường đi ngắn nhất trên đồ thị động một cách hiệu quả hơn, đặc biệt trong bối cảnh dữ liệu lớn và thay đổi liên tục. Đồ thị được sử dụng với quá trình duyệt từ hai hướng (đỉnh đầu và đỉnh kết thúc) bởi sử dụng cả hai mảng đỉnh vào (incoming_array) và đỉnh ra (outgoing_array). Dự đoán hướng đi, số lượng các đỉnh ra/vào cần duyệt ở mức kế tiếp.

5.1. Hướng Nghiên Cứu Mới Về Thuật Toán Đường Đi Ngắn Nhất Động

Trong tương lai, có nhiều hướng nghiên cứu có thể được khám phá để cải thiện hiệu năng của thuật toán tìm đường đi ngắn nhất trên đồ thị động. Một trong những hướng đó là phát triển các thuật toán học máy để dự đoán sự thay đổi của đồ thị và cập nhật kết quả một cách chủ động. Hướng nghiên cứu khác là sử dụng các kỹ thuật nén dữ liệu để giảm kích thước của đồ thị và tăng tốc độ xử lý. Ngoài ra, cần tiếp tục nghiên cứu các thuật toán song song và phân tán để tận dụng sức mạnh của các hệ thống đa lõi và đám mây. Cần tiếp tục nghiên cứu và phát triển các thuật toán mới để giải quyết bài toán tìm đường đi ngắn nhất trên đồ thị động một cách hiệu quả hơn.

5.2. Tầm Quan Trọng Ứng Dụng Thực Tế Từ Nghiên Cứu

Các nghiên cứu về thuật toán tìm đường đi ngắn nhất trên đồ thị động có ý nghĩa quan trọng trong nhiều lĩnh vực, từ giao thông thông minh đến mạng xã hội và robot di động. Việc phát triển các thuật toán hiệu quả hơn có thể giúp cải thiện chất lượng cuộc sống, giảm thiểu chi phí và tối ưu hóa hiệu quả hoạt động của các hệ thống. Do đó, cần tiếp tục đầu tư vào nghiên cứu và phát triển trong lĩnh vực này để tạo ra những ứng dụng có giá trị thực tế cao.

24/09/2025

Trích đoạn nội dung tài liệu

Chương 1: Cơ sở lý thuyết và các vấn đề liên quan 1. Đồ thị Trước khi tìm hiểu về lý thuyết đồ thị, chúng ta cùng xét một ví dụ về một mạng xã hội nhỏ [7] sau: Hình 1.1: Mạng xã hội Mỗi ô màu xanh biểu diễn cho một người dùng trong mạng xã hội, giữa hai người có một đường liên kết với nhau có nghĩa là họ biết nhau. Ngược lại, nếu không có đường liên kết này thì họ không biết nhau. Mối liên hệ “biết nhau” trong đồ thị này là hai chiều.

Ví dụ: An biết Thanh thì Thanh sẽ biết An. Một mạng xã hội như thế này là ví dụ cơ bản về đồ thị. Tên người chính là các đỉnh, và mỗi đường liên kết giữa hai người chính là các cạnh. Chúng ta thường biểu diễn sự liên kết giữa hai đỉnh u và v bởi cặp (u, v).

Bởi vì quan hệ “biết nhau” ở đây là quan hệ hai chiều, nên đây là ví dụ của đồ thị vô hướng. Trong đồ thị vô hướng, cạnh (u, v) tương tự như cạnh (v, u). Trong đồ thị có hướng, quan hệ “biết nhau” không còn là hai chiều nữa, một người A biết người B nhưng chưa chắc người B đã biết người A. Trong đồ thị vô hướng, một cạnh nối giữa hai đỉnh thì cạnh này gọi là liên thuộc đến hai đỉnh đó.

Chúng ta gọi các đỉnh liên kết với nhau bằng một cạnh là các đỉnh liền kề hoặc hàng xóm của nhau. Số lượng cạnh liên thuộc của một đỉnh là bậc của đỉnh đó. Nhìn trên đồ thị, An và Sơn sẽ không biết nhau. Giả sử rằng Sơn muốn làm quen với An.

Có cách nào để Sơn làm quen với An không? Nhìn trên đồ thị ta thấy, Sơn biết Hạnh và Hạnh lại biết Linh, cuối cùng Linh biết An. Vậy Sơn có thể thông qua Hạnh và Linh để làm quen với An. Thực ra, đây là một đường đi trong đồ thị, đường đi đi từ điểm đầu Sơn đến điểm cuối An. Không có đường đi TIEU LUAN MOI download : skknchat@gmail.com 11 ngắn hơn giữa Sơn và An mà phải đi qua ít nhất hai người.

Đường đi giữa hai đỉnh như thế này được gọi là đường đi ngắn nhất. Chúng ta đánh dấu đường đi ngắn nhất này như Hình 1.2: Đường đi trong mạng xã hội Khi đường đi xuất phát từ một đỉnh và quay lại chính nó, chúng ta gọi đó là một chu trình. Mạng xã hội bao gồm rất nhiều chu trình. Ví dụ từ An, Bình tới Cường, Linh rồi cuối cùng quay lại An.

Thực ra, có chu trình ngắn hơn đó là từ An qua Bình tới Linh rồi quay lại An.3: Chu trình trong mạng xã hội Có những lúc, chúng ta thêm các trọng số vào các cạnh. Ví dụ, trong mạng xã hội, chúng ta có thể sử dụng một trọng số để xác định mức độ biết nhau giữa hai người. Một ví dụ cụ thể khác về đồ thị chính là bản đồ đường đi. Giả sử tất cả đều là đường hai chiều, thì bản đồ đường đi này cũng là một đồ thị vô hướng, với các thành phố (địa điểm) là đỉnh, các đường đi là cạnh, giá trị trọng số chính là số biểu diễn khoảng cách giữa các thành phố.4 mô tả khoảng cách giữa một số tỉnh thành phía Bắc nước Việt Nam.

TIEU LUAN MOI download : skknchat@gmail.4: Bản đồ khoảng cách một số tỉnh thành phía Bắc Cách thức đơn giản biểu diễn trọng số là ta viết thêm một số thực lên cạnh của đồ thị. Khi đó, đồ thị có các cạnh có trọng số như thế này được gọi là đồ thị có trọng số. Trong trường hợp bản đồ đường đi, nếu chúng ta muốn tìm đường đi ngắn nhất giữa các vị trí, chúng ta phải tìm kiếm đường đi qua các vị trí trung gian sao cho tổng trọng số là nhỏ nhất. Đây chính là bài toán tìm đường đi ngắn nhất giữa hai đỉnh trong đồ thị.

Ví dụ ở bản đồ Hình 1.4, đường đi ngắn nhất từ Hà Nội tới Hạ Long, sẽ qua Hải Dương, Hải Phòng. Tổng cộng đoạn đường đi này có chiều dài 163km. Mối quan hệ giữa hai đỉnh không phải lúc nào cũng là hai chiều. Lấy ví dụ, trong bản đồ đường đi, chúng ta có thể gặp đường đi một chiều.

Để biểu diễn sự có hướng này, các cạnh được thêm dấu mũi tên ở cuối và đồ thị này được gọi là đồ thị có hướng.5 mô tả một mạng xã hội có hướng. Mũi tên có hướng chỉ từ An sang Linh có nghĩa là An biết Linh, nhưng ngược lại Linh không biết An. Dễ nhận thấy, đồ thị ở Hình 1.5 không có chu trình, khi đó đồ thị được gọi là có hướng không chu trình.5: Mạng xã hội có hướng TIEU LUAN MOI download : skknchat@gmail.com 13 Chúng ta có thể sử dụng các thuật ngữ khác trong đồ thị có hướng. Ví dụ, một cạnh có hướng sẽ ra ở một đỉnh và vào một đỉnh khác.

Nếu cạnh đó ra ở đỉnh u và vào một đỉnh v, sẽ được kí hiệu là (u, v), và thứ tự này sẽ cho ta biết hướng đi từ đỉnh nào đến nào. Tổng số cạnh ra của một đỉnh gọi là bậc ra, tổng số cạnh vào của một đỉnh gọi là bậc vào. Như chúng ta thấy, đồ thị có rất nhiều ứng dụng trong biểu diễn các sự vật, mối quan hệ giữa các sự vật đó trong thế giới thực. Phần tiếp theo, luận văn sẽ trình bày một số lý thuyết nền tảng về đồ thị.

Giới thiệu đồ thị Đồ thị (G), kí hiệu là G = (V, E) bao gồm một tập các đỉnh (V) và tập các cạnh (E). Trong đó mỗi cạnh E nối giữa hai đỉnh thuộc tập các đỉnh (V) và được kí hiệu là E = (u, v) (Đỉnh u nối đỉnh v). Ví dụ về đồ thị được đưa ra ở Hình 1.6: Đồ thị Đồ thị được phân loại dựa vào đặc điểm của các cạnh như sau: Đơn đồ thị vô hướng Đơn đồ thị vô hướng G = (V, E) bao gồm V là tập các đỉnh, và E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V được gọi là cạnh [1]. Đa đồ thị vô hướng Đa đồ thị vô hướng G = (V, E) bao gồm V là tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.

Hai cạnh e1 và e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh [1]. Thực tế, mỗi đơn đồ thị đều là đa đồ thị, nhưng không phải đa đồ thị nào cũng là đơn đồ thị, vì trong đa đồ thị có thể có hai (hoặc nhiều hơn) cạnh nối một cặp đỉnh nào đó. Giả đồ thị vô hướng Giả đồ thị vô hướng G = (V, E) bao gồm V là một tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau) của V gọi là các cạnh. Cạnh e được gọi là khuyên nếu nó có dạng e = (u, u) [1].

TIEU LUAN MOI download : skknchat@gmail.com 14 Từ đó, với tính chất có hướng của đồ thị được định nghĩa như sau: Đơn đồ thị có hướng Đơn đồ thị có hướng G = (V, E) bao gồm V là một tập các đỉnh, và E là tập các cặp có thứ tự gồm hai phần tử của V được gọi là cung. Đa đồ thị có hướng Đa đồ thị có hướng G = (V, E) bao gồm V là tập đỉnh, E là họ các cặp có thứ tự gồm hai phần tử khác nhau của V được gọi là các cung. Hai cung e1 và e2 được gọi là cung lặp nếu chúng cùng tương ứng với một cặp đỉnh. Một số thuật ngữ cơ bản Bậc của đỉnh Hai đỉnh u và v của đồ thị vô hướng G = (V, E) được gọi là kề nhau nếu (u, v) là cạnh thuộc đồ thị G.

Nếu e = (u, v) là cạnh của đồ thị G thì ta nói cạnh này liên thuộc với hai đỉnh u và v, hoặc ta nói cạnh e nối đỉnh u với đỉnh v, đồng thời các đỉnh u và v sẽ được gọi là đỉnh đầu mút của cạnh e. Bậc của đỉnh v trong đồ thị G = (V, E) ký hiệu deg(v) là số các cạnh liên thuộc với nó, riêng khuyên tại một đỉnh được tính hai lần cho bậc của nó. Đỉnh v gọi là đỉnh treo nếu deg(v) = 1 và gọi là đỉnh cô lập nếu deg(v) = 0. Ví dụ: đồ thị vô hướng G = (V, E) ở Hình 1.

+ Bậc của các đỉnh: deg(1)=3; deg(2)=4, deg(3)=2, deg(4)=2, deg(5)=1, deg(6)=0. + Đỉnh 5 là đỉnh treo. + Đỉnh 6 là đỉnh cô lập. Trong đồ thị có hướng, bậc của đỉnh v được chia ra thành bậc trong (Incoming Nodes) và bậc ngoài (Outgoing Nodes).

Bậc trong của đỉnh v là số lượng các cạnh được nối tới đỉnh v, kí hiệu là deg+(v). Bậc ngoài của đỉnh v là số lượng các cạnh được nối từ đỉnh v, kí hiệu là deg-(v). Đường đi và chu trình, đồ thị liên thông Trong đồ thị vô hướng, đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương trên đồ thị vô hướng G = (V, E) là dãy TIEU LUAN MOI download : skknchat@gmail.com 15 x0, x1, …, xn-1, xn Trong đó u = x0, v = xn, (xi, xi+1) ∈ E, i = 0, 1, 2, ., n-1 Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh: (x0, x1), (x1, x2), ., (xn-1, xn) Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình.

Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp [1]. Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàn tương tự như trường hợp đồ thị vô hướng, chỉ khác là chúng ta phải chú ý đến hướng trên các cung [1]. Đồ thị vô hướng G = (V, E) được gọi là liên thông nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó. Biểu diễn đồ thị Trong phần này, luận văn sẽ giới thiệu bốn cấu trúc dữ liệu chính dùng để biểu diễn một đồ thị.

Trong mỗi cấu trúc, phần biểu diễn các đỉnh được giữ nguyên, tuy nhiên phần biểu diễn các cạnh lại hoàn toàn khác nhau.7 được sử dụng cho toàn bộ ví dụ trong mục 1.7: Đồ thị có hướng Danh sách cạnh (Edge list) Trong biểu diễn đồ thị theo danh sách các cạnh, tất cả các cạnh e thuộc E đều được lưu dưới dạng hai phần tử (vi, vj) trong danh sách lưu trữ.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ