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

Một phần của tài liệu Nghiên cứu phát triển trên hệ thống dịch vụ dựa trên vị trí địa lý và thử nghiệm (Trang 78)

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 Nghiên cứu phát triển trên hệ thống dịch vụ dựa trên vị trí địa lý và thử nghiệm (Trang 78)