Từ ma trận trọng số a[u,v]; u,v V, ta tính cận trên d[v] của khoảng cách từ s đến tất cả các đỉnh v V. Mỗi khi phát hiện
Trang 1SỐ HÓA BẢN ĐỒ
VÀ ỨNG DỤNG TÌM ĐƯỜNG
ĐI NGẮN NHẤT
Trang 2Giới thiệu công nghệ GIS
GIS
Địa lý
Thông tin
Hệ thống
Hệ thống thông tin
không gian dựa
trên công nghệ
máy tính.
Mục đích:
hình hóa
loại dữ liệu.
Trang 3Mô hình công nghệ GIS
Khái quát hóa như một quá trình
vào ra:
Quản lý
số liệu
Phân tích
và mô hình hóa
Số
liệu
vào
Số liệu ra
Xử lý Số liệu
Trang 4Công nghệ số hóa bản đồ
Quá trình đưa thông tin từ bản đồ giấy vào máy tính.
Các bước trong việc số hóa bản đồ:
- Số hóa bản đồ.
- Định nghĩa cấu trúc dữ liệu.
- Gán thuộc tính cho đối tượng.
- Cài đặt cơ sở dữ liệu.
- Chuẩn bị bản đồ.
- Trình bày bản đồ.
Trang 5Bản đồ trong MapInfo
Thông tin:
Dữ liệu được thể hiện trên bảng và có cấu trúc như các bảng của SQL Server, Oracle,…
Bản đồ = đồ họa + thông tin.
Đồ họa:
- Điểm.
- Đường.
- Vùng.
Trang 6Bài toán tìm đường đi ngắn nhất
Đồ thị có hướng G = (V, E), |V| = n, |E|
= m.
Thuật toán đơn giản tìm đường đi ngắn nhất từ s đến t:
Mỗi cặp đỉnh s và t ≠ s → tìm được đỉnh v E sao cho: d(s,t)=d(s,v)+d(v, t),v như vậy gọi là đỉnh trước của t Từ giả thiết không âm về các trọng số ta có dãy s, v, t,…xác định, không lặp lại và kết thúc tại t Rõ ràng dãy thu được là xác định (lật ngược thứ tự các đỉnh) ta được đường đi ngắn nhất từ s tới t
∈
Trang 7Cách thức tính toán của việc
tìm đường đi ngắn nhất
Từ ma trận trọng số a[u,v]; u,v V, ta tính cận
trên d[v] của khoảng cách từ s đến tất cả các đỉnh v V Mỗi khi phát hiện:
thì cận trên d[v] sẽ được làm tốt lên:
d[v]:=d[u]+a[u,v]
Quá trình dừng khi nào ta không làm tốt lên được bất kỳ cận trên nào nữa.
Khi đó mỗi d[v] cho khoảng cách từ s đến v.
∈
∈
Trang 8Thuật toán Floyd
● Đầu vào: Đồ thị cho bởi ma trận trọng số a[i,j], i, j =1, ,n
● Đầu ra:
▪ Ma trận đường đi ngắn nhất giữa các cặp đỉnh
d[i,j], i,j=1, ,n.
trong đó d[i,j] cho độ dài đường đi ngắn nhất từ i đến j.
▪ Ma trận ghi nhận đường đi p[i,j], I,j=1,2,…,n.
trong đó p[i,j] ghi nhận đỉnh trước đỉnh j trong đường đi ngắn nhất từ i đến j
Trang 9Thuật toán Floyd
Khởi tạo:
for i:=1 to n do
for j:=1 to n do begin
d[i,j] :=a[i,j]; //Khởi tạo mảng độ dài DDNN p[i,j]:=i; //Khởi tạo mảng đỉnh trước.
end;
Trang 10Thuật toán Floyd
Bước lặp:
for k:=1 to n do
for i:= 1 to n do
for j:=1 to n do
if d[i,j] > d[i,k] + d[k,j] then begin
d[i,j]:=d[i,k] + d[k,j]; p[i,j]:=p[k,j];
end;