thiết kế và đánh giá thuật toán - trần tuấn minh -7 pdf

16 583 6
thiết kế và đánh giá thuật toán - trần tuấn minh -7 pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 97 if (m > w[b[i]]) { Vmax += v[b[i]]; C[b[i]] = 1; m -= w[b[i]]; } dct(d[i],d[j]); //Đổi chỗ } return Vmax; } VII Phương pháp tham lam Heuristic Trong thiết kế giải toán ta cố thử theo phương án để tìm lời giải tối ưu Nhưng lúc vậy, có nhiều trường hợp tổn phí nhiều thời gian Nên thay tìm lời giải tối ưu, ta tìm lời giải tốt theo nghóa : - Nó đáp ứng yêu cầu, thời gian mà thực tế chấp nhận Một thuật toán “tốt” ( tối ưu ) gọi thuật toán Heuristic Thuật toán Heuristic thường thể phương pháp tham lam Ta cố gán cho trật tự xử lý theo trật tự cho Ta xét toán “ Tô màu đồ thị “ sau : “ Tô màu cho đồ thị với số màu có thể.” Tô màu cho đồ thị gán màu cho đỉnh đồ thị cho đỉnh kề màu Bài toán tô màu đồ thị nghiên cứu nhiều thập kỷ nay, thuộc vào lớp rộng toán, gọi “ toán N-P đầy đủ “, mà chúng lời giải có chủ yếu thuộc loại “cố hết khả năng” Nếu đồ thị nhỏ ta cố thử phương án, để tới lời giải tối ưu Nhưng với đồ thị lớn cách làm Một lời giải “tốt” có từ thuật toán Heuristic cách tiếp cận ta cho trường hợp Thuật toán Heuristic hợp lý cho toán tô màu đồ thị thể cách thiết kế tham lam : - Ta cố tô màu cho đỉnh, trước hết màu, dùng tới màu thứ hai, thứ ba Thuật toán mô tả sau : Chọn đỉnh chưa tô màu, tô màu Tìm đỉnh chưa tô màu, với đỉnh xác định xem có phải đỉnh kề đỉnh tô màu chưa Nếu chưa tô đỉnh màu Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 98 minh hoïa : - Tô xanh cho đỉnh (1), theo thứ tự tô xanh cho (2) - Khi đó, (3) (4) phải tô khác màu, chẳng hạn đỏ - Khi , (5] lại phải tô màu thứ 3, chẳng hạn vàng Cách tiếp cận thể rõ ý tham lam Nó thực tô màu đỉnh mà tô được, không ý đến tình bất lợi xảy (khi theo trật tự xác định trước) Cân nhắc hơn, với đồ thị ta cần màu để tô, chẳng hạn : - Tô xanh cho (1), (3) (4) - Tô đỏ cho (2) và(5) BÀI TẬP Bài : Cho lưới hình vuông cấp n, ô gán với số tự nhiên Tại ô di chuyển đến ô khác theo hướng : lên trên, xuống dưới, rẽ trái, rẽ phải ( ô kề cạnh ) Tìm đường từ ô (1,1) đến ô ( m, m) cho tổng ô qua nhỏ ( ≤ m ≤ n ) Bài : Cho n thiết bị (pi )1≤ i ≤ n m công việc (wi )1≤ i ≤ m Các thiết bị làm việc đồng thời làm việc Mỗi việc làm thiết bị làm đến Thời gian làm công việc wi ti , i ∈ {1, ,m} Cần xây dựng lịch biểu thứ tự thực công việc cho tổng thời gian hoàn thành nhanh Bài : Cho m công việc (wi )1≤ i ≤ m tương ứng thời gian thực (ti )1≤ i ≤ m tập thiết bị chức Với thời gian T0 cho trước cố định, để hoàn thành m công việc cần bố trí công việc thiết bị cho số thiết bị đạt Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 99 Bài : Giải toán : ⎧n ⎪∑ ε i vi → max ⎪ i =1 ⎪n ⎨∑ ε i wi ≤ m ⎪ i =1 ⎪0 ≤ ε ≤ 1; ∀i = 1, n i ⎪ ⎩ Bài : Có n loại đồ vật, loại có số lượng không hạn chế Đồ vật loại i, đặc trưng trọng lượng wi giá trị sử dụng vi, với i ∈ {1, ,n} Cần chọn vật đặt vào túi xách có giới hạn trọng lượng m, cho tổng giá trị sử dụng vật chọn lớn Bài : Cho G = (V,E) đơn đồ thị liên thông V = {1, , n} tập đỉnh, E tập cạnh Thuật toán Kruscal xây dựng tập cạnh T bao trùm nhỏ H = (V,T) theo bước : - Sắp E theo thứ tự không giảm - Khởi đầu T = ∅; - Trong ( | T | < n – 1) { Chọn e cạnh có trọng số nhỏ E; E = E \ {e}; if ( T ∪ {e} không chứa chu trình ) T = T ∪ {e}; } Baøi : Cài đặt thuật toán tô màu đồ thị Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 100 - CHƯƠNG : PHƯƠNG PHÁP QUY HOẠCH ĐỘNG (Dynamic Programming) I Phương pháp tổng quát Đối với nhiều thuật toán, phương pháp chia để trị thường đóng vai trò chủ đạo việc thiết kế thuật toán Trong phương pháp quy họach động lại tận dụng phương pháp : Khi cần phải giải toán nào, ta giải tất toán lưu trử lời giải ( để khỏi phải tính toán lại ) nhằm sử dụng lại chúng để giải toán lớn Phương pháp tổ chức tìm kiếm lời giải theo kiểu từ lên (bottom up) Xuất phát từ toán nhỏ đơn giản nhất, tổ hợp lời giải chúng để có lời giải toán lớn để tìm lời giải toán ban đầu Khi sử dụng phương pháp quy họach động để giải vấn đề, ta gặp khó khăn sau : Số lượng lời giải toán lớn không chấp nhận Không phải lúc kết hợp lời giải toán cho lơi giải toán lớn ø Để giải trường hợp vậy, phương pháp quy hoạch động dựa vào nguyên lý, gọi nguyên lý tối ưu (The principle of optimality) Bellman : “ Nếu lời giải toán tối ưu lời giải toán tối ưu ” Trong thuật toán quy hoạch động thường dùng thao tác : - Xây dựng hàm quy hoạch động ( phương trình quy hoạch động ) - Lập bảng lưu lại giá trị hàm - Truy xuất lời giải tối ưu toán từ bảng lưu Trong chương ta giới thiệu số toán dùng quy hoạch động giải cách hiệu Những vấn đề liên quan đến toán tìm phương án tối ưu để thực công việc đó, chúng có chung tính chất đáp án tốt cho toán trì toán trở thành phần toán lớn II Thuật toán Floyd -Tìm đường ngắn cặp đỉnh Bài toán Cho G = (V,E) đơn đồ thị có hướng có trọng số V = {1, ,n} tập đỉnh E tập cung Tìm đường ngắn cặp đỉnh đồ thị Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 101 - Ý tưởng Thuật toán Floyd thiết kế theo phương pháp quy hoạch động Nguyên lý tối ưu vận dụng cho toán : “ Nếu k đỉnh nằm đường ngắn từ i đến j đoạn đường từ i đến k từ k đến j phải ngắn “ Thiết kế Đồ thị biểu diễn ma trận kề trọng số cung : a = (aij )nxn ⎧Trọng soá (i, j); (i, j) ∈ E ⎪ ∀i,j ∈ {1, ,n} : aij = ⎨0; i = j ⎪∞; (i, j) ∉ E ⎩ Ta ký hiệu : - Ma trận trọng số đường ngắn cặp đỉnh : d = (dij) dij : Trọng số đường ngắn từ i đến j - Ma trận xác định đỉnh trung gian đường ngắn từ i đến j : p = (pij) pij : đường ngắn từ i đến j có qua đỉnh trung gian pij hay không ? pij = 0; đường ngắn từ i đến j qua đỉnh trung gian pij pij ≠ 0; đường ngắn từ i đến j qua đỉnh trung gian pij - Ở bước k : - Ký hiệu ma trận d dk cho biết chiều dài nhỏ đường từ i đến j - Ký hiệu ma trận p pk cho biết đường ngắn từ i đến j có qua đỉnh trung gian thuộc tập đỉnh {1, ,k} Input a Output d,p; Mô tả : Bước : - Khởi động d : d = a ; (= d0 ) - Khởi động p : pij = 0; Bước : Kiểm tra cặp đỉnh i, j : Có/không đường từ i đến j qua đỉnh trung gian 1, mà có trọng số nhỏ bước ? Trọng số đường : d1ij = Min{ d0ij , d0i1 + d01j } Nếu d1ij = d0i1 + d01j p1ij = 1, tức đường tương ứng qua đỉnh Bước : Kiểm tra cặp đỉnh i, j : Có/không đường từ i đến j qua đỉnh trung gian 2, mà có trọng số nhỏ bước 1? Trọng số đường : d2ij = Min{ d1ij , d1i2 + d12j } Neáu d ij = d1i2 +d12j p2ij = : tức đường tương ứng qua đỉnh Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 102 Cứ tiếp tục vậy, thuật toán kết thúc sau bước n, ma trận d xác định trọng số đường ngắn đỉnh i, j Ma trận p cho biết đường ngắn từ i đến j có qua đỉnh trung gian pij Minh hoạ : Tìm đường ngắn cặp đỉnh đồ thị : 15 50 15 5 30 15 Hoạt động thuật toán Floyd : b1 d1 b2 d2 b3 d3 b4 d4 = d 50 30 15 35 20 ∞ 15 ∞ 15 50 30 15 35 20 20 15 10 15 45 30 15 35 20 20 15 10 15 20 30 15 35 20 15 10 10 15 p p p p = p 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 4 0 0 1 4 0 0 Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thieát keá and Split Unregistered Version - http://www.simpopdf.com - 103 Căn vào ma trận d, ta khoảng cách đường ngắn từ i đến j, dựa vào p xác định đỉnh nằm đường ngắn Chẳng hạn, với i = 1, j = Theo d, d13 = 15 Nên đường ngắn từ đến có khoảng cách 15 Theo p, đường ngắn từ đỉnh đến đỉnh qua đỉnh trung gian p13 = 4, đường ngắn từ đỉnh đến đỉnh qua đỉnh trung gian p14 = 2, đường ngắn từ đỉnh đến đỉnh không qua đỉnh trung gian ( p12 = 0) Vậy đường ngắn từ đỉnh đến đỉnh : → → → Cài đặt void floyd() { int i, j, k; // Khoi dong ma tran d va p for (i = 1; i

Ngày đăng: 21/07/2014, 23:22

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • CHƯƠNG 1 : GIỚI THIỆU THIẾT KẾ, ĐÁNH GIÁ THUẬT TOÁN

    • I. Định nghĩa trực quan về Thuật toán

      • 1. Định nghĩa

      • 2. Các đặc trưng cơ bản của thuật toán

      • 3. Đặc tả thuật toán

      • II. Các dạng diễn đạt thuật toán

        • 1. Dạng lưu đồ ( sơ đồ khối )

        • 2. Dạng ngôn ngữ tự nhiên

        • 3. Ngôn ngữ lập trình

        • 4. Dạng mã giả

        • III. Thiết kế thuật toán

          • 1. Modul hóa và thiết kế từ trên xuống (Top-Down)

          • 2. Phương pháp làm mịn dần

          • 3. Một số phương pháp thiết kế

          • IV. Phân tích thuật toán

            • 1. Các bước trong quá trình phân tích đánh giá thời gian chạy của thuật toán

            • 2. Các ký hiệu tiệm cận

            • 3. Một số lớp các thuật toán

            • 4. Phân tích thuật toán đệ qui

            • 5. Các phép toán trên các ký hiệu tiệm cận

            • 6. Phân tích trường hợp trung bình

            • V. Tối ưu thuật toán

            • Bài tập

            • CHƯƠNG 2: PHƯƠNG PHÁP CHIA ĐỂ TRỊ

              • I. Mở đầu

                • 1. Ý tưởng

Tài liệu cùng người dùng

Tài liệu liên quan