Sơ đồ DrawMap như sau:

Một phần của tài liệu xây dựng ứng dụng và tìm kiếm trên bản đồ cho điện thoại di động hỗ trợ java (Trang 37 - 43)

Chương 5: PHÂN TÍCH VÀ THIẾT KẾ

7.2.3.2.Sơ đồ DrawMap như sau:

Hình 5. 6 Sơ đồ tuần tự DrawMap 7.2.3.3. UC search Street/search Place:

Hình 5. 7 Sơ đồ tuần tự UD Search Street/Place 7.2.3.4. UC shortest way (thuật toán Dijkstra):

Xem mỗi đỉnh của bản đồ là một nút của đồ thị, ta sử dụng thuật toán Dijkstra để tìm đường đi ngắn nhất giữa hai đỉnh

Thuật toán Dijkstra được trình bày như sau:

Gọi khoảng cách đến một đỉnh Y nào đó là khoảng cách từđỉnh xuất phát tới Y (ký hiệu d[Y]). Ý tưởng của thuật toán là gán cho tất cảcác đỉnh một giá trịban đầu sau đó từng bước cải thiện khoảng cách này:

1) Gán cho tất cảcác đỉnh một giá trị khoảng cách: Đỉnh xuất phát có giá trị bằng 0 và ∞cho các đỉnh còn lại.

2) Đánh dấu các đỉnh là “unvisited” – chưa được duyệt. Gọi đỉnh xuất phát là đỉnh hiện tại.

Hình 5. 9 Khởi gán

3) Từđỉnh hiện tại ta tính khoảng cách đến các đỉnh kề của nó. Vd: Nếu đỉnh hiện tại (A) có khoảng cách (tính từđỉnh bắt đầu) là 6 và cạnh nối giữa A với đỉnh kề của nó (B) có giá trị là 2. Khoảng cách đến B qua A sẽ là 6 + 2 = 8. Nếu khoảng cách này nhỏhơn khoảng cách tính được ở lần trước đó thì lưu lại giá trị này.

Hình 5. 10 Tính khoảng cách đến các đỉnh kề

4) Đánh dấu đỉnh hiện tại là “visited” – đã duyệt. Một đỉnh “visited” sẽ không được kiểm tra nữa. Khoảng cách của nó đã nhỏ nhất.

5) Nếu tất cảcác đỉnh đều là “visited”, thuật toán kết thúc. Ngược lại lấy đỉnh có khoảng cách nhỏ nhất làm đỉnh hiện tại và lặp lại từbước 3.

Hình 5. 11 Lấy đỉnh có khoảng cách nhỏ nhất

Tại bước 5, ta sẽ mất một đoạn chương trình với độ phức tạp O(n) cho việc tìm đỉnh có khoảng cách nhỏ nhất và cốđịnh nó.

Để thuật toán làm việc có hiệu quảhơn, người ta thường sử dụng cấu trúc dữ liệu Heap lưucác đỉnh chưa cốđịnh nhãn. Heap ởđây là một cây nhị phân hoàn chỉn thỏa mãn: nút cha luôn có khoảng cách(tính từđỉnh xuất phát) nhỏ hơn nút con. Khi cần tìm

đỉnh có khoảng cách nhỏ nhất ta chỉ việc lấy đỉnh ở gốc Heap, sau đó thực hiện vun đống lại.

Một phần của tài liệu xây dựng ứng dụng và tìm kiếm trên bản đồ cho điện thoại di động hỗ trợ java (Trang 37 - 43)