Thuật toán tìm đường

Một phần của tài liệu LUẬN VĂN: NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG DỊCH VỤ DỰA TRÊN VỊ TRÍ ĐỊA LÝ VÀ THỬ NGHIỆM doc (Trang 80 - 81)

Thuật toán tìm đường tại máy chủ được cài đặt dựa trên thuật toán Dijkstra với một số cải tiến nhằm tăng tốc độ xử lý và tiết kiệm bộ nhớ.

Dữ liệu đồ thị (biểu diễn hệ thống giao thông) được lưu trữ bằng danh sách kề kèm theo trọng số. Trọng số trong đồ thị không chỉ đơn giản là một giá trị biểu diễn độ dài đường đi mà bao gồm nhiều giá trị khác nhau (độ dài đường đi, độ rộng, tình trạng tắc đường,...).

Với thuật toán Dijkstra gốc, thậm chí ngay cả khi đã sử dụng danh sách kề kèm trọng số để biểu diễn đồ thị thì tốc độ vẫn khá chậm. Trong trường hợp xấu nhất, thuật toán có thể cần đến n lần có định nhãn (trong đó n là số đỉnh) và mỗi lần tìm đỉnh để cố định nhãn sẽ mất một đoạn chương trình với độ phức tạp O(n).

Để tăng tốc độ xử lý, thuật toán được cài đặt có sự điều chỉnh. Thực ra xét về bản chất, tư tưởng thuật toán không thay đổi. Thay đổi ở đây chủ yếu là kỹ thuật biểu diễn và xử lý dữ liệu. Thông thường thì bước tìm đỉnh tự do có “giá trị” nhỏ nhất phải quét toàn bộ các đỉnh nên mất nhiều thời gian (quét cả đỉnh đã cố định). Để không phải quét lại đỉnh đã cố định, thủ tục tìm kiếm sử dụng danh sách dạng liên kết để lưu danh sách đỉnh. Mỗi khi cố định một đỉnh thì đồng thời loại bỏ đỉnh đó khỏi danh sách để không phải duyệt lại.

Để tiết kiệm bộ nhớ, phần cài đặt sử dụng danh sách liên kết (con trỏ đối tượng) để hạn chế việc lưu lặp lại dữ liệu.

Thuật toán có thể được mô tả ngắn gọn thông qua qua 3 bước chính sau:

Bước 1: Khởi tạo

- Khởi tạo danh sách kề từ dữ liệu đồ thị

- “Giá trị” tất cả các đỉnh ban đầu bằng “số vô cùng lớn”

- Riêng đỉnh xuất phát có giá trị bằng chi phí tình từ điểm xuất phát tới đó.

- Tất cả các nút đều tự do Bước 2: Lặp

Lặp chừng nào danh sách kề còn khác rỗng:

- Tìm đỉnh tự do có “giá trị” nhỏ nhất. Nếu tất cả các đỉnh đều đã cố định hoặc đỉnh tìm được là đỉnh kết thúc thì sang bước 3 - Cố định đỉnh tìm được

- Duyệt các đỉnh kề với đỉnh tìm được, tối ưu “giá trị” của các đỉnh này theo giá trị của đỉnh tìm được (nếu đỉnh chưa cố định), lưu vết.

Bước 3: Lấy kết quả

- Tìm đỉnh cuối (giá trị của đỉnh này là chi phí đường đi)

- Nếu giá trị đỉnh cuối là “số vô cùng lớn” thì kết luận không tìm được đường, kết thúc.

- Nếu không, duyệt và đưa ra danh sách các cung (hay đỉnh) phải đi qua dựa theo vết đã lưu cho đến khi về đỉnh xuất phát (thứ tự ngược).

Một phần của tài liệu LUẬN VĂN: NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG DỊCH VỤ DỰA TRÊN VỊ TRÍ ĐỊA LÝ VÀ THỬ NGHIỆM doc (Trang 80 - 81)

Tải bản đầy đủ (PDF)

(91 trang)