tiểu luận nguyên lý sáng tạo ứng dụng trong một số thuật toán sắp xếp nội

23 992 1
tiểu luận nguyên lý sáng tạo ứng dụng trong một số thuật toán sắp xếp nội

Đ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

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN  BÀI THU HOẠCH MÔN HỌC PHƢƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG TIN HỌC LỚP CAO HỌC KHOA HỌC MÁY TÍNH KHĨA 22 Giảng viên: GS.TSKH Hoàng Văn Kiếm ĐỀ TÀI NGUYÊN LÝ SÁNG TẠO ỨNG DỤNG TRONG MỘT SỐ THUẬT TOÁN SẮP XẾP NỘI Học viên: Trần Huy Quang Mã số: TP.HCM, 12-2012 12 11 058 MỤC LỤC THUẬT TOÁN SẮP XẾP I Sắp xếp theo phương pháp chọn Phương pháp chọn trực tiếp – Selection Sort Phương pháp vun đống – Heap Sort Đánh giá II Sắp xếp theo phương pháp chèn 10 Phương pháp chèn trực tiếp – Insertion Sort 10 Phương pháp độ dài bước giảm dần - Shell Sort 11 Đánh giá 13 III Phương pháp xếp phân hoạch - Quick Sort 14 Ý tưởng 14 Thuật toán 14 Minh họa 14 Độ phức tạp thuật toán 15 Đánh giá 16 PHỤ LỤC: CÁC NGUYÊN LÝ SÁNG TẠO 17 Nguyên lý phân nhỏ 17 Nguyên lý “tách khỏi” 17 Nguyên lý phẩm chất cục 17 Nguyên lý phản đối xứng 17 Nguyên lý kết hợp 17 Nguyên lý vạn 17 Nguyên lý “chứa trong” 17 Nguyên lý phản trọng lượng 17 Nguyên lý gây ứng suất sơ 18 10 Nguyên lý thực sơ 18 11 Nguyên lý dự phòng 18 12 Nguyên lý đẳng 18 13 Nguyên lý đảo ngược 18 14 Ngun lý cầu (trịn) hóa 18 15 Nguyên lý linh động 18 16 Nguyên lý giải “thiếu” “thừa” 19 17 Nguyên lý chuyển sang chiều khác 19 18 Nguyên lý sử dụng dao động học 19 19 Nguyên lý tác động theo chu kỳ 19 20 Nguyên lý liên tục tác động có ích 19 21 Nguyên lý “vượt nhanh” 20 22 Nguyên lý biến hại thành lợi 20 23 Nguyên lý quan hệ phản hồi 20 24 Nguyên lý sử dụng trung gian 20 25 Nguyên lý tự phục vụ 20 26 Nguyên lý chép (Copy) 20 27 Nguyên lý “rẻ” thay cho “đắt” 20 28 Thay sơ đồ học 20 29 Sử dụng kết cấu khí lỏng 21 30 Sử dụng vỏ dẻo màng mỏng 21 31 Sử dụng vật liệu nhiều lỗ 21 32 Nguyên lý thay đổi màu sắc 21 33 Nguyên lý đồng 21 34 Nguyên lý loại bỏ tái sinh phần 21 35 Thay đổi thơng số lý hóa đối tượng 22 36 Sử dụng chuyển pha 22 37 Sử dụng nở nhiệt 22 38 Sử dụng chất oxy hóa 22 39 Sử dụng môi trường trơ 22 40 Sử dụng vật liệu hợp thành (composite) 22 TÀI LIỆU THAM KHẢO 23 THUẬT TOÁN SẮP XẾP Sắp xếp q trình bố trí lại phần tử tập đối tượng theo thứ tự ấn định, chẳng hạn tăng dần hay giảm dần dãy số Với cấu trúc xếp thuận tiện thực tác vụ tìm kiếm, duyệt cấu trúc… Có hai loại thuật toán xếp: Sắp xếp nội Sắp xếp ngoại Sắp xếp nội - Toàn liệu đưa vào nhớ - Kích thước liệu cần xếp không lớn - Thời gian xếp thực nhanh Sắp xếp ngoại - Chỉ phần nhỏ liệu cần xếp đưa vào nhớ trong, phần lớn liệu lại lưu nhớ (đĩa cứng, băng từ…) - Kích thước liệu xếp lớn - Thời gian xếp chậm Trong khuôn khổ đề tài, xét thuật toán xếp nội với thứ tự tăng dần mảng chiều có N số nguyên a1, a2, …, aN-1, aN (N>0) Sắp xếp dãy số thực bố trí lại phần tử cho hình thành dãy tăng dần Để thay đổi vị trí phần tử dãy, cần dựa vào kết loạt phép so sánh hốn vị Do hai thao tác thuật toán xếp phép so sánh phép gán Số lượng phép tốn chi phí thực hiện, hay cịn gọi độ phức tạp thuật toán Khi xây dựng thuật toán xếp, cần tìm cách giảm thiểu phép so sánh hốn vị khơng cần thiết để tăng hiệu thuật toán Do dãy số lưu trọn vẹn nhớ máy tính, nên thuật tốn xếp nội thường khơng sử dụng vùng nhớ thêm trình xếp, mà hướng đến xếp trực tiếp dãy số ban đầu Một số thuật toán xếp nội đề cập đề tài gồm Selection Sort, Heap Sort, Insertion Sort, Shell Sort, Quick Sort Trong thuật tốn Selection Sort, Insertion Sort thuật toán đơn giản có chi phí cao Trong thuật tốn Shell Sort, Heap Sort, Quick Sort thuật toán phức tạp có hiệu cao I Sắp xếp theo phƣơng pháp chọn Phƣơng pháp chọn trực tiếp – Selection Sort a) Ý tưởng Chọn phần tử nhỏ N phần tử ban đầu, đưa phần tử vị trí đầu dãy hành Lúc ta có dãy đầu a1 có thứ tự, nên khơng cần quan tâm đến phần tử Xét dãy sau N-1 phần tử cần xếp, lặp lại thao tác để đưa phần tử nhỏ đầu dãy hành Ta dãy đầu a1, a2 có thứ tự, cần xếp dãy sau có N-2 phần tử cịn lại Lặp lại dãy cần xếp phần tử, ta dãy kết có thứ tự b) Thuật toán Bước 1: i := Bước 2: Tìm phần tử amin nhỏ dãy hành ai, ai+1, …, aN Bước 3: Hoán vị amin Bước 4: Nếu i < N-1: tăng i thêm lặp lại Bước Ngược lại: Dừng c) Minh họa Cho dãy phần tử: 25 55 45 40 10 90 85 35 Dãy ban đầu 25 55 45 40 10 90 85 35 i=1 10 55 45 40 25 90 85 35 i=2 10 25 45 40 55 90 85 35 i=3 10 25 35 40 55 90 85 45 i=4 10 25 35 40 55 90 85 45 i=5 10 25 35 40 45 90 85 55 i=6 10 25 35 40 45 55 85 90 i=7 10 25 35 40 45 55 85 90 Dãy kết 10 25 35 40 45 55 85 90 d) Độ phức tạp thuật toán - Số phép so sánh: lượt thứ i, cần thực N-i phép so sánh để tìm phần tử nhỏ dãy chưa có thứ tự Số phép so sánh khơng phụ thuộc vào tình trạng dãy ban đầu, tổng số phép so sánh n(n-1)/2 - Số phép gán: lượt, cần thực ba phép gán để hoán vị amin với ai, cần 3n(n-1)/2 phép gán Tuy nhiên điều phụ thuộc vào tình trạng ban đầu dãy số, dãy ban đầu có thứ thự không cần thực phép gán - Độ phức tạp thuật toán T(N) = O(N2) Phƣơng pháp vun đống – Heap Sort a) Ý tưởng Sử dụng cấu trúc liệu gọi Heap cho phép tích lũy thơng tin so sánh phần tử trình xếp Cấu trúc Heap Là nhị phân gần đầy đủ, cài đặt mảng chiều al al+1…ar, với nút heap có nội dung nhỏ hay nội dung nút cha - a0 nút gốc (là phần tử lớn nhất) -  a2i -  a2i+1 Nút cha lớn hay hai nút (ai, a2i), (ai, a2i+1) hai cặp phần tử liên đới Trong l ≤ i ≤ r 30 26 22 21 12 16 14 15 19 Cấu trúc heap cài đặt mảng chiều: 30 26 22 21 12 19 15 16 14 Tính chất Heap Heap có nút gốc lớn nhất, đánh theo số 0, 1, 2,… cho nút Đướng từ gốc đến nút có nội dung - giá trị nút giảm dần Nếu al al+1…ar heap, cắt bỏ số phần tử hai đầu heap, dãy cịn lại heap Heap con: SubHeap(p,m), có nút gốc p nút nhỏ hay m (nếu p > m subheap rỗng) Mọi dãy al al+1…ar với 2l > r heap b) Thuật toán Giai đoạn 1: Hiệu chỉnh dãy số ban đầu thành heap al al+1…ar Với l=0 r=N-1 Giai đoạn 2: Sắp xếp dãy số dựa heap Bước 1: Hoán vị phần tử lớn - nút gốc heap với phần tử cuối dãy Bước 2: Loại bỏ phần tử lớn khỏi heap: r=r-1 Hiệu chỉnh phần lại dãy al al+1…ar-1 thành heap Bước 3: Nếu r>l: lặp lại Bước Ngược lại: Dừng Dựa theo tính chất heap, thực Giai đoạn cách heap dãy am+1, am+2,…, aN-1 (với m=N/2) Lần lượt thêm vào đầu heap phần tử am, am-1, …, a0 đồng thời hiệu chỉnh dãy thành heap c) Minh họa Cho dãy phần tử: 12 15 Giai đoạn 1: Hiệu chỉnh dãy ban đầu thành heap Dãy ban đầu 12 15 12 15 12 15 12 15 12 15 12 15 l=4 l=3 l=2 12 15 12 15 12 15 12 15 15 12 15 12 l=1 Dãy kết Giai đoạn 2: Sắp xếp dãy số dựa heap Heap ban đầu 15 12 r=7 12 15 Hiệu chỉnh lại heap 12 15 r=6 12 15 Hiệu chỉnh lại heap 12 15 r=5 12 15 Hiệu chỉnh lại heap 12 15 r=4 12 15 Hiệu chỉnh lại heap 12 15 r=3 12 15 Hiệu chỉnh lại heap 12 15 r=2 12 15 Hiệu chỉnh lại heap 12 15 r=1 12 15 r=l: Dừng 12 15 d) Độ phức tạp thuật toán - Độ phức tạp thuật toán T(N) = O(Nlog2N) Đánh giá Trong phương pháp Selection Sort, tìm phần tử nhỏ bước thứ i khơng tận dụng thơng tin có phép so sánh bước i-1 Vấn đề giải với cấu trúc liệu có khả tích lũy thơng tin so sánh phần tử trình xếp J.Wiliams đề xuất cấu trúc vậy, gọi Heap thuật toán Heap Sort Từ Selection Sort đến Heap Sort thể nguyên lý sáng tạo ứng dụng sau - Nguyên lý phân nhỏ Dãy số biểu diễn mảng chiều chuyển sang cấu trúc heap phân cấp, dãy đồng phân chia thành thành phần độc lập, nhánh Do q trình xếp, số lượng phép so sánh phép gán giảm thiểu thuật toán làm việc số nhánh liên quan bước thuật toán - Nguyên lý phẩm chất cục Cấu trúc mảng chiều tuyến tính chuyển thành cấu trúc phân cấp, cụ thể nhị phân Trong đó, phần tử mức i phần tử lớn cặp phần tử mức i+1, phần tử mức tức nút gốc phần tử lớn dãy Khi loại phần tử gốc khỏi cây, cần phải cập nhật lại để đảm bảo tính chất heap, nhiên việc cập nhật xảy cách cục nhánh liên quan đến phần tử vừa loại bỏ, nhánh khác giữ nguyên Như bước thuật tốn sử dụng lại kết so sánh bước - Nguyên lý linh động Dãy số biểu diễn cách tự nhiên cấu trúc mảng chiều, với heap, dãy số biểu diễn dạng phân cấp Với đặc trưng cấu trúc gồm nhiều nhánh, dãy số chia thành nhiều thành phần độc lập dạng nhánh có khả dịch chuyển nhau, cập nhật heap trình xếp - Nguyên lý chuyển sang chiều khác Ở bước xếp, Selection Sort hoạt động toàn chiều dài dãy lại nên số lượng phép so sánh ln nhiều Hạn chế cấu trúc mảng chiều Trong Heap Sort sử dụng cấu trúc heap cấu trúc - nhiều chiều, bước, việc so sánh xảy nhánh liên quan nên giảm thiểu số phép so sánh Thay sơ đồ học - Phương pháp Heap Sort sử dụng cấu trúc phân cấp thay cho mảng chiều với phần tử cố định Như phần tử đồng dãy số chuyển sang cấu trúc không đồng nhất, phần tử phân cấp qua giá trị - Nguyên lý loại bỏ tái sinh phần Cấu trúc heap có nút gốc ln phần tử lớn dãy hành, loại bỏ phần tử khỏi cây, có nghĩa đưa vị trí sau khơng cần quan tâm đến Sau loại bỏ nút gốc, heap cần phải phục hồi với phần tử cịn lại, nhiên chi phí cho thao tác không lớn, việc cập nhật xảy cục nhánh liên quan II Sắp xếp theo phƣơng pháp chèn Phƣơng pháp chèn trực tiếp – Insertion Sort a) Ý tưởng Từ dãy ban đầu, ta ln có dãy a1 có thứ tự Chèn phần tử a2 vào dãy có thứ tự trên, ta dãy có thứ tự a1, a2 Lặp lại chèn xong phần tử aN vào dãy có thứ tự, ta dãy kết có thứ tự Như vậy, với dãy có thứ tự a1, a2, …, ai-1, cần tìm cách chèn phần tử vào vị trí thích hợp: - Xét ≤ k ≤ i, vị trí thích hợp vị trí ak-1 ak ak-1 ≤ < ak - Dời phần tử ak, ak+1, …, ai-1 phía sau vị trí chèn vào vị trí k, ta dãy a1, a2, …, ai-1 có thứ tự b) Thuật tốn Bước 1: i := Bước 2: x := Tìm vị trí k thích hợp dãy a1, a2, …, ai-1 để chèn vào Bước 3: Dời chỗ phần tử ak, ak+1, …, ai-1 phía sau vị trí Bước 4: ak := x Bước 5: i := i+1 Nếu i  N: Lặp lại Bước Ngược lại: Dừng 10 c) Minh họa Cho dãy phần tử: 12 15 Dãy ban đầu 12 15 i=1 12 15 i=2 12 15 i=3 12 15 i=4 12 15 i=5 12 15 i=6 12 15 i=7 12 15 i=8 12 15 Dãy kết 12 15 d) Độ phức tạp thuật toán - Trong lần lặp, cần thực phép so sánh hai phép gán Tổng số phép so sánh phép gán phụ thuộc vào tình trạng ban đầu dãy - Độ phức tạp thuật toán T(N) = O(N2) Phƣơng pháp độ dài bƣớc giảm dần - Shell Sort a) Ý tưởng Từ dãy ban đầu a1, a2, …, aN, chia dãy ban đầu thành h dãy gồm phần tử cách h vị trí Như dãy ban đầu xen kẽ h dãy sau: Dãy thứ nhất: a1, ah+1, a2h+1, … Dãy thứ nhất: a2, ah+2, a2h+2, … … Dãy thứ nhất: ah, a2h, a3h, … Thực xếp phần tử dãy ta có phần tử đưa vị trí tương đối – có thứ tự dãy xét Sau giảm khoảng cách h để tạo thành dãy mới, tạo hội so sánh phần tử với nhiều phần tử 11 khác trước khơng nằm dãy Sắp xếp dãy Lặp lại h=1, ta dãy kết có thứ tự Cách lựa chọn khoảng cách h số bước xếp k thỏa: hi > hi+1, hk=1, với i=1 k Khoảng cách phần tử dãy bước sau phải nhỏ bước trước Sau k bước, khoảng cách (lúc dãy có phần tử) Theo Knuth đề nghị: hi = (hi-1 - 1)/3, hk=1, k=log3n – Hoặc: hi = (hi-1 - 1)/2, hk=1, k=log2n - b) Thuật toán Bước 1: Chọn k khoảng cách h1, h2, …, hk i := Bước 2: Chia dãy ban đầu thành dãy cách hi phần tử Sắp xếp dãy theo phương pháp Chèn trực tiếp Bước 3: i := i+1 Nếu i ≤ k: Lặp lại Bước Ngược lại: Dừng c) Minh họa Cho dãy phần tử: 12 15 Chọn k=3 khoảng cách h1=5, h2=3, h3=1 - h=5 12 15 Sắp xếp dãy theo phương pháp Chèn trực tiếp - 12 15 12 15 h=3 12 Sắp xếp dãy theo phương pháp Chèn trực tiếp 12 15 - 1 12 15 h=1 Sắp xếp dãy theo phương pháp Chèn trực tiếp - 12 15 Dừng h=1 d) Độ phức tạp thuật toán - Hiệu thuật toán phụ thuộc vào dãy với độ dài chọn - Khi chọn theo công thức Knuth: hi = (hi-1-1)/2, hk=1, k=log2n-1, thuật tốn có độ phức tạp T(N) = O(N1.2) Đánh giá Hai thuật toán Insertion Sort Shell Sort dựa ý tưởng chèn phần tử vào dãy có thứ tự Tuy nhiên độ phức tạp thuật toán Shell Sort O(N1.2) nhỏ nhiều so với độ phức tạp O(N2) Insertion Sort Sự cải tiến nói kết việc ứng dụng nguyên lý sáng tạo q trình xây dựng thuật tốn - Nguyên lý phân nhỏ Trong phương pháp Shell Sort, dãy ban đầu chia thành nhiều dãy độc lập tiến hành xếp dãy con, giúp giảm thiểu số phép so sánh phép gán Rồi tiếp tục tăng mức độ phân nhỏ dãy con, độ dài dãy dãy kết có thứ tự - Nguyên lý thực sơ Trong phương pháp Insertion Sort, phần tử cần chèn so sánh dãy tổng thể có độ dài tối đa, dẫn đến thời gian so sánh dịch chuyển Phương pháp Shell Sort thực xếp phần tử dãy để đưa chúng vị trí tương đối nhanh – có thứ tự dãy xét Sau 13 giảm độ dài dãy con, tạo hội so sánh phần tử với nhiều phần tử khác trước khơng nằm dãy với - Ngun lý linh động Phương pháp Shell Sort chia dãy ban đầu thành phần xen kẽ tiến hành xếp phần Các phần có khả dịch chuyển giảm khoảng cách h, mức độ xen kẽ tăng lên phần có hội tương tác với III Phƣơng pháp xếp phân hoạch - Quick Sort Ý tƣởng Chọn ngẫu nhiên phần tử x, gọi phần tử khóa, dãy a1, a2, …, aN, phân hoạch dãy thành ba dãy liên tiếp: Dãy 1: ak < x Dãy 2: ak = x Dãy 3: ak > x với k=1…i với k=i…j với k=j…N (đã thứ tự) Nếu dãy có phần tử dãy a1, a2, …, aN xếp Ngược lại, dãy có nhiều phần tử, tiếp tục phân hoạch dãy thành dãy tương tự Phần tử x chọn có tác động nhiều đến hiệu thuật tốn, định số lần phân hoạch dãy Số lần phân hoạch chọn phần tử x có độ lớn trung bình dãy Tuy nhiên việc chọn phần tử x khó, nên người ta thường chọn phần tử dãy làm mốc phân hoạch Khi đó, với l=1 r=N ak phần tử mốc, với k=(l+r)/2 Thuật toán Bước 1: Phân hoạch dãy al, al+1, …, ar thành dãy con: Dãy 1: al…aj < x Dãy 2: aj+1…ai-1 = x Dãy 3: ar > x Bước 2: Đệ quy: Nếu (l

Ngày đăng: 05/04/2014, 10:34

Từ khóa liên quan

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

Tài liệu liên quan