intTypePromotion=1

Luận văn Thạc sĩ Hệ thống thông tin: Tối ưu tìm đường hệ thống giao thông công cộng Hà Nội

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:52

0
3
lượt xem
0
download

Luận văn Thạc sĩ Hệ thống thông tin: Tối ưu tìm đường hệ thống giao thông công cộng Hà Nội

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hiện nay đã có một vài ứng dụng trên di động hỗ trợ người dùng nhưng có một vài nhược điểm, đó là không cập nhật dữ liệu một cách liên tục, không hỗ trợ sử dụng offline, giao diện không thân thiện khó sử dụng. Luận văn sẽ nghiên cứu sâu hơn về vấn đề này.

Chủ đề:
Lưu

Nội dung Text: Luận văn Thạc sĩ Hệ thống thông tin: Tối ưu tìm đường hệ thống giao thông công cộng Hà Nội

  1. 1 LỜI CAM ĐOAN Tôi xin cam đoan bài luận văn này là sự nghiên cứu của bản thân (ngoài phần tham khảo đã được trích rõ) cùng với sự hướng dẫn của PGS.TS Nguyễn Long Giang và TS Lê Xuân Tuấn. Tôi xin chịu trách nhiệm hoàn toàn nếu xảy ra sai phạm. Tác giả luận văn Phạm Trung Dũng
  2. 2 LỜI CẢM ƠN Trước hết, em xin gửi lời cảm ơn sâu sắc đến PGS.TS Nguyễn Long Giang và TS Lê Xuân Tuấn – người trực tiếp hướng dẫn khóa luận đã luôn dành nhiều thời gian, công sức hướng dẫn em trong suốt quá trình thực hiện nghiên cứu và hoàn thành đề tài nghiên cứu khoa học. Tôi xin trân trọng cám ơn Viện Công nghệ thông tin và Học viện Khoa học & Công nghệ giúp đỡ tôi trong quá trình học tập và nghiên cứu luận văn. Tuy có nhiều cố gắng, nhưng trong đề tài nghiên cứu khoa học này không tránh khỏi những thiếu sót. Em kính mong các chuyên gia, những người quan tâm đến đề tài, đồng nghiệp tiếp tục có những ý kiến đóng góp, giúp đỡ để đề tài được hoàn thiện hơn. Một lần nữa em xin chân thành cám ơn! Hà Nội, 26 tháng 5 năm 2020 Tác giả
  3. 3 MỤC LỤC LỜI CAM ĐOAN ............................................................................................................... 1 LỜI CẢM ƠN .................................................................................................................... 2 MỤC LỤC.......................................................................................................................... 3 DANH MỤC HÌNH VẼ....................................................................................................... 5 DANH MỤC CÁC TỪ VIẾT TẮT ...................................................................................... 6 MỞ ĐẦU............................................................................................................................ 7 CHƯƠNG 1. TỔNG QUAN VỀ GIAO THÔNG CÔNG CỘNG HÀ NỘI ............................. 8 1.1. CƠ SỞ HẠ TẦNG GIAO THÔNG CÔNG CỘNG HÀ NỘI ............................................ 8 1.1.1. Xe buýt............................................................................................................... 8 1.1.2. Xe buýt nhanh .................................................................................................... 8 1.1.3. Đường sắt đô thị ................................................................................................. 9 1.2. CÁC TUYẾN VÀ ĐIỂM DỪNG ............................................................................... 12 1.2.1. Điểm dừng ........................................................................................................ 12 1.2.2. Tuyến xe........................................................................................................... 13 CHƯƠNG 2. PHÂN TÍCH TÌM GIẢI THUẬT TÌM ĐƯỜNG TỐI ƯU .............................. 16 2.1. CÁC THUẬT TOÁN TÌM ĐƯỜNG TỐI ƯU PHỔ BIỂN ............................................. 16 2.1.1. Thuật toán Dijkstra .......................................................................................... 16 2.1.2. Thuật toán Bellman-Ford.................................................................................. 18 2.1.3. Thuật toán Floyd-Warshall ............................................................................... 19 2.2. THUẬT TOÁN TÌM ĐƯỜNG TỐI ƯU GIAO THÔNG CÔNG CỘNG TRÊN THIẾT BỊ DI ĐỘNG........................................................................................................................... 21 2.2.1. Đồ thị mô phỏng hệ thống giao thông công cộng Hà Nội ..................................... 21 2.2.2. Giải thuật tìm đường ........................................................................................ 21 2.2.3. Độ phức tạp của giải thuật ................................................................................ 25 CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG ................................. 26 3.1. PHÂN TÍCH THIẾT KẾ ỨNG DỰNG ....................................................................... 26 3.1.1 Bản đặc tả chức năng ứng dụng: ........................................................................ 26 3.1.2 Sơ đồ luồng hoạt động của ứng dụng: ................................................................. 27 3.1.3 Database: .......................................................................................................... 28 3.1.4 Thiết kế giao diện: ............................................................................................. 31 3.2. XÂY DỰNG ỨNG DỤNG TRÊN NỀN TẢNG ANDROID .......................................... 34 3.2.1. Nền tảng Android ................................................................................................. 34 3.2.2. Công cụ Android Studio .................................................................................... 40 3.2.3. Hệ quản trị cơ sở dữ liệu SQLite ....................................................................... 43
  4. 4 3.2.4. Bản đồ Google Map và API Google Maps .......................................................... 45 CHƯƠNG 4. KẾT LUẬN VÀ KIẾN NGHỊ ....................................................................... 51 4.1. KẾT LUẬN ............................................................................................................. 51 4.2. KIẾN NGHỊ ............................................................................................................ 51 TÀI LIỆU THAM KHẢO ................................................................................................. 52
  5. 5 DANH MỤC HÌNH VẼ Hình 1 Bản đồ quy hoạch đường sắt đô thị Hà Nội ......................................... 10 Hình 2 Mạng lưới điểm dừng của hệ thống giao thông công cộng Hà Nội ..... 12 Hình 3 Bản đồ tuyến xe buýt Hà Nội ............................................................... 14 Hình 4 Xác định các điểm dừng tại điểm đến và điểm đi ................................ 23 Hình 5 Xác định góc của một tuyến xe ............................................................ 23 Hình 6 Mô tả đường đi khi đi bằng một tuyến xe ............................................ 24 Hình 7 Mô tả cách tìm đường đi bằng hai tuyến xe ......................................... 25 Hình 8 Sơ đồ luồng tìm lộ trình đi xe của ứng dụng........................................ 28 Hình 9 Cơ sở dữ liệu của điểm dừng ............................................................... 30 Hình 10 Cơ sở dữ liệu của các tuyến xe........................................................... 31 Hình 11 Thiết kế trang chủ của ứng dụng ........................................................ 32 Hình 12 Thiết kế giao diện nhập điện chỉ đến và đi ........................................ 32
  6. 6 DANH MỤC CÁC TỪ VIẾT TẮT STT Từ viết tắt Cụm từ đầy đủ 1. BRT Bus Rapid Transit 2. ODA Official Development Assistance 3. CPU Central Processing Unit 4. ADT Android Development Tools 5. IDE Integrated Development Environment 6. SDK Software Development Kit 7. API Application Programming Interface 8. SQL Structured Query Language 9. GPS Global Positioning System
  7. 7 MỞ ĐẦU Thành phố Hà Nội là một trong những thành phố có số dân và mật độ dân cư cao của cả nước. Các phương tiện giao thông cá nhân ngày một nhiều gây áp lực rất lớn lên hạ tầng giao thông. Để giải quyết vấn đề này thành phố đang đầu tư lớn và khuyến kích người dân sử dụng vào hệ thống giao thông công cộng. Một vài năm gần đây người dân đã ngày càng tiếp xúc nhiều với giao thông công cộng, nhưng để biết hết thông tin về điểm dừng, tuyến bus, tuyến tàu điện, đặc biệt là xác định được đường đi tối ưu là khó. Hiện nay đã có một vài ứng dụng trên di động hỗ trợ người dùng nhưng có một vài nhược điểm, đó là không cập nhật dữ liệu một cách liện tục, không hỗ trợ sử dụng offline, giao diện không thân thiện khó sử dụng. Từ những điều trên tôi đã nghiên cứu để hoàn thiện luận văn “Tối ưu tìm đường hệ thống giao thông công cộng Hà Nội” cung cấp thông tin hệ thống giao thông công cộng và chỉ đường đi tối ưu, hỗ trợ sử dụng offline
  8. 8 CHƯƠNG 1. TỔNG QUAN VỀ GIAO THÔNG CÔNG CỘNG HÀ NỘI 1.1. CƠ SỞ HẠ TẦNG GIAO THÔNG CÔNG CỘNG HÀ NỘI Theo xu thế phát triển chung của thế giới, Hà Nội đang phải đối mặt với những vấn đề về giao thông đô thị như sự gia tăng của phương tiện cá nhân, áp lực về cơ sở hạ tầng và nhu cầu đi lại của người dân ngày càng cao, hình ảnh các phương tiện nêm kín mặt đường vào các giờ cao điểm không còn là chuyện mới. Đi cùng với đó nhiều vấn đề văn hóa xã hội khác như tình trạng ô nhiễm môi trường do khói bụi từ các phương tiện giao thông, ảnh hưởng đến tốc độ tăng trưởng kinh tế.... Nhận thức rõ áp lực của phát triển dịch vụ vận tải đối với phát triển đô thị, thành phố Hà Nội nhiều năm nay đã xác định phát triển giao thông công cộng là giải pháp tối ưu và được ưu tiên phát triển để giải quyết tình trạng trên. Hiện nay Hà Nội đang phát triển các loại hình giao thông công cộng sau: 1.1.1. Xe buýt Tại Hà Nội, xe buýt là phương tiện giao thông công cộng chủ yếu với hơn 100 tuyến được vận hành bởi Tổng công ty Vận tải Hà Nội cùng một số công ty khác. Các tuyến xe buýt được phân bố phủ khắp khu vực trung tâm Hà Nội, đồng thời kết nối với các huyện ngoại thành cũng như các tỉnh kế cận. Thời gian xe buýt hoạt động từ 4h30 - 23h15, tần suất là 5–60 phút/chuyến tùy vào số lượng khách sử dụng, trung bình tần suất các tuyến là 10–20 phút/chuyến. Xe buýt hoạt động tất cả các ngày trong tuần kể cả những ngày lễ tết sự đi lại của người dân khu vực nội thành Hà Nội và các vùng lân cận. Xe buýt áp dụng vé lượt cho 1 lần đi. Giá vé lượt dành các tuyến có cự li dưới 25 km là 7.000 đồng/lượt, từ 25 – 30 km là 8.000 đồng/lượt, và 30 km trở lên là 9.000 đồng/lượt. Riêng đối với tuyến 86 giá vé là 35.000 đồng/lượt và tuyến 68 là 40.000 đồng/lượt. 1.1.2. Xe buýt nhanh Xe buýt nhanh Hà Nội, hay Hanoi BRT, là một loại hình giao thông công cộng tại Hà Nội do Xí nghiệp xe buýt nhanh Hà Nội vận hành. Theo quy hoạch được Thủ tướng chính phủ Việt Nam phê duyệt năm 2016, thành phố Hà Nội sẽ
  9. 9 có 8 tuyến xe buýt nhanh và 3 tuyến quá độ. Tuyến xe buýt nhanh đầu tiên được đưa vào hoạt động ngày 31 tháng 12 năm 2016 là tuyển BRT01 từ bến xe Yên Nghĩa đến Cát Linh. Tới năm 2019, chưa có thêm tuyến xe buýt nhanh nào được đưa vào hoạt động. Xe buýt nhanh sẽ đi trên 2 làn đường riêng sát dải phân cách giữa của trục đường. Làn đường này được phân cách bằng gờ cao 20 cm. Nhà chờ cho hành khách được đặt trên dải phân cách giữa. Vị trí nhà chờ sẽ ở gần ngã tư nên hành khách đi theo vạnh sơn kẻ đường tại các nút giao thông để tiếp cận xe buýt. Theo thiết kế, hành khách sẽ sử dụng vé từ, được tự động soát vé trước khi vào nhà chờ nhưng hiện tại khi đưa vào hoạt động, hành khách sẽ sử dụng vé giấy giống xe buýt thông thường. Tuyến BRT01 sẽ chạy với tần suất 5-15 phút/chuyến, công suất vận chuyển 90 khách, có 4 cửa ra vào, tốc độ di chuyển 22 km/h. Các xe đều có hệ thống GPS, kết nối với Trung tâm điều hành để giải quyết các sự cố có thể phát sinh. Tại nút giao thông cũng có hệ thống tích hợp với đèn tín hiệu để ưu tiên xe buýt nhanh qua nút. 1.1.3. Đường sắt đô thị Đường sắt đô thị Hà Nội là tên gọi của hệ thống đường sắt đô thị ở Hà Nội. Hệ thống được vận hành bởi Công ty Đường sắt Hà Nội, bao gồm 8 tuyến đường sắt đô thị với tổng chiều dài khoảng 318 km, và 3 tuyến tàu điện một ray. Đây là hệ thống đường sắt đô thị đầu tiên tại Việt Nam. Theo Quy hoạch giao thông vận tải Thủ đô Hà Nội đến năm 2030, tầm nhìn năm 2050 được Thủ tướng Chính phủ phê duyệt năm 2016, mạng lưới đường sắt đô thị Hà Nội bao gồm 10 tuyến, bao gồm cả các tuyến trên cao và đi ngầm. Các dự án Metro của Hà Nội được Chính phủ giao cho Bộ Giao thông Vận tải và Ủy ban nhân dân thành phố Hà Nội làm chủ đầu tư. Tổng quan quy hoạch cụ thể năm 2016 của đường sắt đô thị Hà Nội như sau:
  10. 10 Hình 1 Bản đồ quy hoạch đường sắt đô thị Hà Nội Hiện nay, Hà nội đang có 02 tuyến đường sắt đô thị đang được xây dựng đó là: Tuyến số 2A: Cát Linh - Hà Đông, hay còn gọi là Tuyến Cát Linh, có chiều dài 13,1 km, được khởi công xây dựng vào ngày 10 tháng 10 năm 2011 và do Bộ Giao thông Vận tải làm Chủ đầu tư. Toàn tuyến đi qua 12 nhà ga, trải qua ba quận Đống Đa, Thanh Xuân và Hà Đông. Tuyến đường sắt này được đầu
  11. 11 tư năm 2008 bằng vốn vay ODA của Trung Quốc. Ban đầu dự án có tổng mức đầu tư 552,86 triệu USD trong đó vốn vay ODA của Trung Quốc 419 triệu USD. Đến năm 2019, tổng mức đầu tư được điều chỉnh là 868,04 triệu USD, trong đó phần vốn vay ODA của Trung Quốc là 669,62 triệu USD. Vào tháng 10 năm 2015, tại Triển lãm Giảng Võ, Ban Quản lý dự án đường sắt đô thị Hà Nội đã trưng bày mẫu tàu điện Cát Linh - Hà Đông. Theo đó, tuyến số Cát Linh - Hà Đông sẽ có 13 đoàn tàu, mỗi đoàn tàu có 4 toa tàu. Đoàn tàu có chiều dài là 79 m, chiều cao toa tàu 3,8 m tính từ mặt ray đến đỉnh tàu, độ rộng lớn nhất toa tàu 2,8 m. Khi vận hành đoàn tàu có tốc độ tối đa 80 km/giờ, tốc độ trung bình ≥ 35 km/giờ. Năng lực vận chuyển tối đa khoảng 28.500 hành khách/giờ/hướng. Tuyến số 3: Trôi - Nhổn - Hoàng Mai, ban Quản lý Đường sắt đô thị Hà Nội làm chủ đầu tư đoạn Nhổn - Ga Hà Nội. Tuyến có tổng chiều dài 12,5 Km (trong đó đoạn đi trên cao 8,5 Km và đoạn đi ngầm 4,5 Km), được khởi công vào 10 tháng 10 năm 2010 và dự kiến khai thác thương mại năm 2021. Toàn tuyến đi qua 12 nhà ga, bao gồm 8 ga trên cao (Nhổn, Minh Khai, Phú Diễn, Cầu Diễn, Lê Đức Thọ, Đại học Quốc gia Hà Nội, Chùa Hà, Cầu Giấy) và 4 ga ngầm (Kim Mã, Cát Linh, Văn Miếu, ga Hà Nội), trong đó có 2 ga kết nối trung chuyển. Tuyến chạy nổi trên cao dọc theo tim đường quốc lộ 32 từ: Cầu Diễn - Hồ Tùng Mậu - Xuân Thủy - Cầu Giấy - Kim Mã- tới ngã ba phố Nguyễn Văn Ngọc- Kim Mã thì chuyển chạy ngầm theo tim đường Kim Mã - đến đầu phố Núi Trúc chạy ngầm vòng qua khu dân cư (Nằm giữa đường Giang Văn Minh và Núi Trúc) - tiếp tục chạy ngầm theo tim đường Cát Linh - Quốc Tử Giám - xuyên ngậm dưới ga Hà nội và kết thúc điểm cuối ngã ba phố Dã Tượng với Trần Hừng Đạo.
  12. 12 1.2. CÁC TUYẾN VÀ ĐIỂM DỪNG Cũng giống như các hệ thống giao thông công cộng trên thế giới, hệ thống giao thông công cộng Hà Nội có các tuyến và điểm dừng có định. 1.2.1. Điểm dừng Hiện nay, hệ thống giao thông công cộng Hà Nội có trên 2500 điểm dừng, bến xe đón trả khách. Các điểm dừng này có mặt ở 24/24 quận, huyện và tất cả các phường và gần hết các xã thuộc địa bạn Hà Nội, ngoài ra còn có mặt ở một số tỉnh lân cận Hà Nội như Bắc Ninh, Hà Nam, Hưng Yên. Hình 2 Mạng lưới điểm dừng của hệ thống giao thông công cộng Hà Nội
  13. 13 1.2.2. Tuyến xe Hiện nay, hệ thống giao thông công cộng Hà Nội có 141 tuyến, trong đó có 128 tuyến tiêu chuẩn nằm phần chính ở các quận của Hà Nội, 01 tuyến xe buýt nhanh, và 12 tuyến kết nối với các huyện thuộc Hà Nội và các tỉnh lân cận:
  14. 14 Hình 3 Bản đồ tuyến xe buýt Hà Nội Hệ thống giao thông cộng cộng Hà Nội do các đợn vị sau vận hành: - Xí nghiệp Xe buýt Hà Nội: 13 tuyến xe buýt
  15. 15 - Xí nghiệp Xe buýt Thăng Long: 9 tuyến xe buýt - Xí nghiệp Xe buýt 10-10: 15 tuyến xe buýt - Công ty Cổ phần Xe Điện Hà Nội: 11 tuyến xe buýt - Xí nghiệp Xe buýt Cầu Bươu: 10 tuyến xe buýt - Xí nghiệp Xe buýt Yên Viên: 9 tuyến xe buýt - Công ty CPVT và DV Liên Ninh: 8 tuyến xe buýt - Công ty Cổ phần Vận tải Newway: 4 tuyến xe buýt - Công ty Cổ phần Xe Khách Hà Nội: 5 tuyến xe buýt - Trung tâm Tân Đạt: 9 tuyến xe buýt - Xí nghiệp Xe khách Nam Hà Nội: 9 tuyến xe buýt - Xí nghiệp Xe buýt nhanh Hà Nội: 5 tuyến xe buýt và 1 tuyến BRT - Công ty TNHH Bắc Hà: 6 tuyến xe buýt - Công ty CPVT TM và Du lịch Đông Anh: 1 tuyến xe buýt - Công ty TNHH Bảo Yến: 14 tuyến xe buýt - Công ty Liên doanh VCQT Hải Vân: 2 tuyến xe buýt - Công ty CPVT Xe Khách Hà Tây: 3 tuyến xe buýt - Công ty CP DV và VT Bảo Châu: 1 tuyến xeb buýt
  16. 16 CHƯƠNG 2. PHÂN TÍCH TÌM GIẢI THUẬT TÌM ĐƯỜNG TỐI ƯU 2.1. CÁC THUẬT TOÁN TÌM ĐƯỜNG TỐI ƯU PHỔ BIỂN Trên thực tế, để tìm đường đi tối ưu, người ta không chỉ quan tâm đến việc tìm đường đi giữa hai địa điểm mà còn phải lựa chọn một hành trình tiết kiệm nhất theo khoảng cách, thời gian hay chi phí. Khi đó phát sinh yêu cầu tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị. Bài toán đó phát biểu dưới dạng tổng quát như sau: Cho đồ thị có trọng số G = (V, E) từ đỉnh xuất phát S  V đến đỉnh đích F  V, ký hiệu độ dài của đường này là d[S, F]. Nếu đường đi từ S tới F không tồn tại thì ta sẽ đặt khoảng cách d[S, F]= +. Hãy tìm một đường đi ngắn nhất từ S tới F[1] Nếu đồ thị có chu trình âm thì khoảng cách giữa một số cặp đỉnh nào đó có thể không xác định, bởi vì bằng cách đi vòng theo chu trình này một số lần đủ lớn, ta có thể chỉ ra đường đi giữa hai đỉnh nào đó trong chu trình này nhỏ hơn bất kỳ một số cho trước nào. Trong trường hợp như vậy, có thể đặt vấn đề tìm đường đi cơ bản ngắn nhất. Vấn đề đó là một vấn đề hết sức phức tạp mà ta sẽ không bàn tới ở đây. Dưới đây ta sẽ xét một số thuật toán tìm đường đi ngắn nhất từ đỉnh S tới đỉnh F trên đơn đồ thị có hướng G = (V, E) có n đỉnh và m cung. Trong trường hợp đơn đồ thị vô hướng với trọng số không âm, bài toán tìm đường đi ngắn nhất có thể dẫn về bài toán trên đồ thị có hướng bằng cách thay mỗi cạnh của nó bằng hai cung có hướng ngược chiều nhau. Lưu ý rằng các thuật toán dưới đây sẽ luôn luôn tìm được đường đi ngắn nhất là đường đi cơ bản. Các thuật toán quan trọng nhất giải quyết bài toán này là: 2.1.1. Thuật toán Dijkstra Thuật toán Dijkstra, được đặt tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956, là một thuật toán giải tốt nhất để quyết bài
  17. 17 toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng số âm. Thuật toán thường được sử dụng trong định tuyến với một chương trình con trong các thuật toán đồ thị hay trong công nghệ Hệ thống định vị toàn cầu. Dijkstra đã nghĩ về bài toán đường đi ngắn nhất khi làm việc tại Trung tâm Toán học ở Amsterdam năm 1956 với tư cách là một lập trình viên để chứng minh khả năng của một máy tính mới có tên ARMAC. Mục tiêu của ông là chọn cả một bài toán và giải pháp (sẽ được tạo bởi máy tính) mà những người không thuần tính toán vẫn có thể hiểu được. Ông đã thiết kế thuật toán đường đi ngắn nhất và sau đó triển khai nó cho ARMAC bằng bản đồ giao thông được đơn giản hóa một chút của 64 thành phố ở Hà Lan. Một năm sau, ông gặp một vấn đề khác từ các kỹ sư phần cứng làm việc trên máy tính tiếp theo của học viện: giảm thiểu lượng dây cần thiết để kết nối các chân trên bảng điều khiển phía sau của máy. Như một giải pháp, ông đã phát hiện lại thuật toán Prim (được biết đến trước đó với Jarník, và cũng được Prim khám phá lại). Dijkstra đã xuất bản thuật toán vào năm 1959, 2 năm sau Prim và 29 năm sau Jarník. Ví dụ: Chúng ta dùng các đỉnh của đồ thị để mô phỏng các thành phố trong một vùng và các cạnh là đường nối giữa chúng. Khi đó trọng số các cạnh có thể xem như độ dài của các con đường. Chúng ta cần vận chuyển từ thành phố S đến thành phố T. Thuật toán Dijkstra sẽ giúp chỉ ra đường đi ngắn nhất chúng ta có thể đi. Giã mã giải thuật Dijkstra như sau: function Dijkstra(Graph, source): create vertex set Q for each vertex v in Graph: dist[v] ← INFINITY prev[v] ← UNDEFINED add v to Q dist[source] ← 0 while Q is not empty: u ← vertex in Q with min dist[u] remove u from Q
  18. 18 for each neighbor v of u: alt ← dist[u] + length(u, v) if alt < dist[v]: dist[v] ← alt prev[v] ← u return dist[], prev[] Thời gian chạy thuật toán hay còn gọi là độ phức tạp của giải thuật Dijkstra bình thường là O(n2+m)[2]. Để cải thiệp thời gian chạy ta có thể sử dụng kết hợp với cấu trúc Heap vào trong giải thuật Dijkstra, khi đó độ phức tạp sẽ là O((m+n)log(n)), nếu kết hợp với Fibonacci Heap thì độ phức tạp giảm xuống còn O(m+nlog n). 2.1.2. Thuật toán Bellman-Ford thuật toán Bellman-Ford là một thuật toán mà tính con đường ngắn nhất từ một nguồn duy nhất đỉnh đến tất cả các đỉnh khác trong một đồ thị có trọng số. Nó chậm hơn thuật toán của Dijkstra cho cùng một đồ thị, nhưng linh hoạt hơn, vì nó có khả năng xử lý các đồ thị trong đó một số trọng số cạnh là số âm. Thuật toán này lần đầu tiên được đề xuất bởi Alfonso Shimbel, nhưng thay vào đó được đặt theo tên của Richard Bellman và Lester Ford Jr. , người đã xuất bản nó vào năm 1958 và 1956 , tương ứng Edward F. Moore cũng đã xuất bản thuật toán tương tự vào năm 1957 và vì lý do này, đôi khi nó còn được gọi là thuật toán Bellman-Ford-Moore. Giả mã của giải thuật như sau: function BellmanFord(list vertices, list edges, vertex source) is ::distance[], predecessor[] // This implementation takes in a graph, represented as // lists of vertices and edges, and fills two arrays // (distance and predecessor) about the shortest path // from the source to each vertex // Step 1: initialize graph for each vertex v in vertices do distance[v] := inf // Initialize the distance to all vertices to infinity predecessor[v] := null // And having a null predecessor
  19. 19 distance[source] := 0 // The distance from the source to itself is, of course, zero // Step 2: relax edges repeatedly for i from 1 to size(vertices)−1 do //just |V|−1 repetitions; i is never referenced for each edge (u, v) with weight w in edges do if distance[u] + w < distance[v] then distance[v] := distance[u] + w predecessor[v] := u // Step 3: check for negative-weight cycles for each edge (u, v) with weight w in edges do if distance[u] + w < distance[v] then error "Graph contains a negative-weight cycle" return distance[], predecessor[] Độ phức tạp của thuật toán Bellman Ford là O(n*m), trong đó n là số đỉnh và m là số cung của đồ thị. 2.1.3. Thuật toán Floyd-Warshall Trong khoa học máy tính, thuật toán Floyd-Warshall là một thuật toán cho việc tìm kiếm đường đi ngắn nhất trong một đồ thị có trọng với trọng số cạnh dương hay âm đều được. Một lần thực hiện thuật toán sẽ tìm ra độ dài (tổng trọng số) của các đường đi ngắn nhất giữa tất cả các cặp đỉnh. Mặc dù nó không trả về chi tiết của các đường dẫn, nhưng có thể xây dựng lại các đường dẫn với các sửa đổi đơn giản cho thuật toán. Thuật toán Floyd-Warshall là một ví dụ về lập trình động và được xuất bản dưới dạng hiện được công nhận bởi Robert Floyd vào năm 1962. Tuy nhiên, về cơ bản nó giống như các thuật toán được Bernard Roy xuất bản năm 1959 và cả bởi Stephen Warshall vào năm 1962 vì đã tìm thấy sự đóng cửa quá độ của đồ thị và có liên quan chặt chẽ với thuật toán của Kleene (xuất bản năm 1956) để chuyển đổi một máy tự động hữu hạn xác định thành biểu thức chính quy. Công thức hiện đại của thuật toán như ba vòng lặp lồng nhau được mô tả lần đầu tiên bởi Peter Ingerman, cũng vào năm 1962.
  20. 20 * Thuật toán: Thuật toán Floyd-Warshall so sánh tất cả các đường dẫn có thể thông qua biểu đồ giữa mỗi cặp đỉnh. Hãy xem xét một biểu đồ G với các đỉnh V đánh số từ 1 đến N. Xem xét thêm một chức năng shortestPath(i,j,k) trả về con đường ngắn nhất có thể từ i đến j chỉ sử dụng các đỉnh từ tập hợp {1,2,…,k} như các điểm trung gian trên đường đi. Bây giờ, với chức năng này, mục tiêu là tìm ra con đường ngắn nhất từ mỗi i cho mỗi j sử dụng bất kỳ đỉnh trong {1,2,…,N}[3]. Đối với mỗi cặp đỉnh này, shortestPath(i,j,k) có thể là một trong hai trường hợp. Một là một con đường không đi qua k (chỉ sử dụng các đỉnh trong tập hợp {1,…,k-1}[4] hoặc hai là một con đường đi qua k (từ i đến k và sau đó từ k đến i, cả hai chỉ sử dụng các đỉnh trung gian trong {1,…,k-1}) Chúng tôi biết rằng con đường tốt nhất từ i đến j chỉ sử dụng các đỉnh 1 xuyên qua k-1 được định nghĩa bởi shortestPath(i,j,k-1) và rõ ràng là nếu có một con đường tốt hơn từ i đến k đến j, sau đó độ dài của con đường này sẽ là sự kết hợp của con đường ngắn nhất từ i đến k (chỉ sử dụng các đỉnh trung gian trong {1,…,k-1}) và con đường ngắn nhất từ k đến j (chỉ sử dụng các đỉnh trung gian trong {1,…,k-1}). Nếu w(i,j) là trọng lượng của cạnh giữa các đỉnh i và j, chúng ta có thể định nghĩa shortestPath(i,j,k) theo công thức đệ quy sau : trường hợp cơ sở là shortestPath(i,j,0) = w(i,j) và trường hợp đệ quy là shortestPath(i,j,k) = min(shortestPath(i,j,k-1), shortestPath(i,k,k-1) + shortestPath(k,j,k-1)). Công thức này là trái tim của thuật toán Floyd-Warshall. Thuật toán hoạt động bằng máy tính đầu tiên shortestPath(i,j,k) cho tất cả (i,j) cặp cho k=1, sau đó k=2, và như thế. Quá trình này tiếp tục cho đến khi k = N và chúng tôi đã tìm ra con đường ngắn nhất cho tất cả (i,j) cặp sử dụng bất kỳ đỉnh trung gian. Mã giả cho phiên bản cơ bản này như sau:
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2