Hotline: 024.62511017

024.62511081

  Trang chủ   Sản phẩm   Phần mềm Dành cho nhà trường   Phần mềm Hỗ trợ học tập   Kho phần mềm   Liên hệ   Đăng nhập | Đăng ký

Tìm kiếm

School@net
 
Xem bài viết theo các chủ đề hiện có
  • Hoạt động của công ty (726 bài viết)
  • Hỗ trợ khách hàng (498 bài viết)
  • Thông tin tuyển dụng (57 bài viết)
  • Thông tin khuyến mại (80 bài viết)
  • Sản phẩm mới (216 bài viết)
  • Dành cho Giáo viên (549 bài viết)
  • Lập trình Scratch (3 bài viết)
  • Mô hình & Giải pháp (156 bài viết)
  • IQB và mô hình Ngân hàng đề kiểm tra (127 bài viết)
  • TKB và bài toán xếp Thời khóa biểu (242 bài viết)
  • Học tiếng Việt (183 bài viết)
  • Download - Archive- Update (289 bài viết)
  • Các Website hữu ích (70 bài viết)
  • Cùng học (92 bài viết)
  • Learning Math: Tin học hỗ trợ học Toán trong nhà trường (78 bài viết)
  • School@net 15 năm (154 bài viết)
  • Mỗi ngày một phần mềm (7 bài viết)
  • Dành cho cha mẹ học sinh (124 bài viết)
  • Khám phá phần mềm (122 bài viết)
  • GeoMath: Giải pháp hỗ trợ học dạy môn Toán trong trường phổ thông (36 bài viết)
  • Phần mềm cho em (13 bài viết)
  • ĐỐ VUI - THƯ GIÃN (363 bài viết)
  • Các vấn đề giáo dục (1210 bài viết)
  • Bài học trực tuyến (1037 bài viết)
  • Hoàng Sa - Trường Sa (17 bài viết)
  • Vui học đường (275 bài viết)
  • Tin học và Toán học (220 bài viết)
  • Truyện cổ tích - Truyện thiếu nhi (180 bài viết)
  • Việt Nam - 4000 năm lịch sử (97 bài viết)
  • Xem toàn bộ bài viết (8223 bài viết)
  •  
    Đăng nhập/Đăng ký
    Bí danh
    Mật khẩu
    Mã kiểm traMã kiểm tra
    Lặp lại mã kiểm tra
    Ghi nhớ
     
    Quên mật khẩu | Đăng ký mới
     
    Thành viên có mặt
    Khách: 8
    Thành viên: 0
    Tổng cộng: 8
     
    Số người truy cập
    Hiện đã có 89622460 lượt người đến thăm trang Web của chúng tôi.

    Thuật toán Floyd ứng dụng cho bài toán tìm đường đi ngắn nhất

    Ngày gửi bài: 19/02/2010
    Số lượt đọc: 6529

    Đề bài: Cho một đồ thị có trọng số, với mọi cặp đỉnh x, y hãy tìm đường đi từ x tới y sao cho đoạn đường đi là ngắn nhất?

    (Đường đi từ đỉnh x tới đỉnh y trong một đồ thị là một danh sách các đỉnh mà hai đỉnh liên tiếp nhau trong danh sách đó được nối bởi một cạnh của đồ thị.)

    Bài toán tìm đường đi ngắn nhất cho tất cả các cặp đỉnh trong một đồ thị có rất nhiều phương pháp để giải, một trong những phương pháp ứng dụng tìm đường đi ngắn nhất phải kể đến là sử dụng thuật toán Floyd.

    ++

    for y:=1 to V do

    for x:= 1 to V do

    if a[x,y]>0 then

    for j:=1 to V do

    if a[y,j]>0 then

    if (a[x,j]=0) or (a[x,y]+a[y,j]

    then a[x,j]:= a[x,y]+a[y,j];

    ++

    Cấu trúc của thuật toán dùng phép logic “or” để theo dõi các đường đi, chúng ta thêm một ít tính toán cho mỗi cạnh để xác định xem nó có là bộ phận của đường đi ngắn nhất mới hay không: “ đường đi ngắn nhất từ nút x tớinút j chỉ đi qua các nút có chỉ số nhỏ hơn y+1 thì hoặc là đường đi ngắn nhất từ nút x tới nút j chỉ đi qua các nút có chỉ số nhỏ hơn y hoặc nếu ngắn hơn thì nó là đường đi ngắn nhất từ x tới y cộng vớiđường đi ngắn nhất từ y tới j”. Phần tử 0 trong ma trận tương ứng không có cạnh nối hai đỉnh, chương trình có thể cải tiến đơn giản hơn (bỏ đi các phép so sánh với 0) bằng cách dùng một biến để ký hiệu cạnh có trọng số vô hạn.

    *** Thuật toán Floyd cần O(V3) để giải bài toán đường đi ngắn nhất cho mỗi cặp đỉnh.

    Các hình dưới đây minh hoạ chi tiết tính năng của thuật toán Floyd trên ví dụ của chúng ta, chúng được bố trí chính xác để dễ so sánh. Các phần tử 0 tương ứng với ý nghĩa không có đường đi, các phần tử khác 0 trong thuật toán Floyd chứa độ dài của đường đi ngắn nhất. Đường đi ngắn nhất cũng có thể được tìm ra bằng cách dùng phiên bản ma trận của mảng dad: cho phần tử trong dòng x cột j nhận tên của đỉnh trước trong đường đi ngắn nhất từ x tới j (trong đoạn chương trình trên chính là đỉnh y ở vòng lặp trong).

    (Mảng dad[1..V] chứa chỉ số đỉnh cha của mỗi đỉnh (thành phần có giá trị 0 dùng cho nút gốc của cây). Để tìm cha của đỉnh j, ta chỉ đơn giản gán j:=dad[j] và để tìm gốc của cây có chứa đỉnh j, ta lặp lại thao tác này cho tới khi gặp giá trị 0.)

    Chúng ta cùng xét một ví dụ sử dụng thuật toán Floyd để tìm đường đi ngắn nhất trong đồ thị như sau:

    Cho đồ thị có trọng số như hình dưới đây:

    Với thuật toán Floyd thì trạng thái khởi động của thuật toán này cho ví dụ trên sẽ như sau:


    Và dưới đây là trạng thái cuối cùng của thuật toán Floyd



    School@net



     Bản để in  Lưu dạng file  Gửi tin qua email


    Những bài viết khác:



    Lên đầu trang

     
    CÔNG TY CÔNG NGHỆ TIN HỌC NHÀ TRƯỜNG
     
    Phòng 804 - Nhà 17T1 - Khu Trung Hoà Nhân Chính - Quận Cầu Giấy - Hà Nội
    Phone: 024.62511017 - 024.62511081
    Email: kinhdoanh@schoolnet.vn


    Bản quyền thông tin trên trang điện tử này thuộc về công ty School@net
    Ghi rõ nguồn www.vnschool.net khi bạn phát hành lại thông tin từ website này
    Site xây dựng trên cơ sở hệ thống NukeViet - phát triển từ PHP-Nuke, lưu hành theo giấy phép của GNU/GPL.