Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
381,98 KB
Nội dung
I Nội dung: 1.Các mơ hình thuật tốn: A,Mơ hình thuật toán sinh Thuật toán sinh dùng để giải lớp tốn thỏa mãn hai điều kiện: •Xác định thứ tự tập cấu hình cần liệt kê tốn Biết cấu hình đầu tiên, biết cấu hình cuối •Từ cấu hình cuối cùng, ta xây dựng thuật tốn sinh cấu hình đứng sau theo thứ tự bMơ hình thuật tốn đệ qui Thuật tốn giải tốn P thơng qua tốn P’ giống P gọi thuật toán đệ qui Một hàm gọi đệ qui gọi đến Một tốn giải đệ qui thỏa mãn hai điều kiện: • Phân tích được: Có thể giải tốn P toán P’ giống P khác P liệu đầu vào Việc giải toán P’ thực theo cách phân tích giống P • Điều kiện dừng: Dãy toán P’ giống P hữu hạn dừng tốn xác định bMơ hình thuật tốn quay lui -Quay lui kĩ thuật thiết kế giải thuật dựa đệ quy Ý tưởng quay lui tìm lời giải bước, bước chọn số lựa chọn đệ quy -Bản chất quay lui trình tìm kiếm theo chiều sâu(Depth-First Search) Về chất, tư tưởng phương pháp thử khả tìm thấy lời giải Đó trình tìm kiếm theo độ sâu tập hợp lời giải Trong trình tìm kiếm, ta gặp hướng lựa chọn không thỏa mãn, ta quay lui điểm lựa chọn nơi có hướng khác thử hướng lựa chọn Khi thử hết lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại điểm lựa chọn trước thử hướng lựa chọn Quá trình tìm kiếm thất bại khơng cịn điểm lựa chọn *Giả sử ta cần xác định X =(x1, x2, ,xn) thỏa mãn số ràng buộc Ứng với thành phần xi ta có ni khả cần lựa chọn Ứng với khả j∈ni dành cho thành phần xi ta cần thực hiện: • Kiểm tra xem khả j có chấp thuận cho thành phần xi hay không? Nếu khả j chấp thuận i thành phần cuối (i=n) ta ghi nhận nghiệm toán Nếu i chưa phải cuối ta xác định thành phầnthứ i +1 • Nếu khơng có khả j chấp thuận cho thành phần xi ta quay lại bước trước (i-1) để thử lại khả khác (� − 1) Nhánh cận : Mơ hình thuật tốn đệ quy quay lui chương trước việc tìm kiếm n cấp có 2n nút điều có nghĩa liệu đầu vào n ta phải duyệt 2n lần trường hợp tồi nhất, số lớn so với liệu ban đầu q trình duyệt có số thao tác thừa việc chọn nghiệm xi tối ưu Tư tưởng kĩ thuật nhánh cận loại bỏ thao tác thừa q trình tiến hành gọi thủ tục đệ quy Như việc bỏ thao tác thừa mơ hình việc thêm vào dòng lệnh if (việc thử hi vọng tìm cấu hình tốt hơn) then Điều có nghĩa bước giá trị thử cho xi khơng cịn hi vọng tìm cấu hình tốt thử giá trị khác mà khơng cần gọi đệ quy hay ghi nhận cấu hình nghiệm toán làm tốt dần bước sau tối ưu bước cấu hình cuối cấu hình tối ưu • • • • • • cMơ hình thuật toán tham lam -Thuật toán tham lam (Greedy Algorithm): thuật tốn xem xét q trình giải tốn việc tạo nên lựa chọn tối ưu cục bước thực với mong muốn tìm lựa chọn tối ưu toàn cục Giải thuật tham lam thường khơng mang tính tổng qt Tuy vậy, việc xem xét lựa chọn tối ưu cục cho ta lời giải gần với phương án tối ưu toàn cục giải pháp tốt thời gian chấp nhận -Để thực thuật toán tham lam, ta xác định cấu trúc tốn tối ưu tốn Sau đó, xác định giải pháp bao gồm (ví dụ: tổng lớn nhất, đường ngắn nhất, v.v.) Tạo số cách lặp lặp lại để qua tất toán xây dựng giải pháp.-Thuật toán tham lam thực sau: Ban đầu, tập giải pháp (chứa câu trả lời) rỗng Ở bước, phần tử thêm vào tập giải pháp Nếu tập giải pháp khả thi, phần tử giữ lại Mặt khác, phần tử bị loại bỏ không xem xét lại Nhược điểm Khó thiết kế: Khi ta tìm cách tiếp cận giải thuật tham lam phù hợp, việc thiết kế thuật toán tham lam dễ dàng Tuy nhiên, việc tìm cách tiếp cận phù hợp khó Khó xác định: Việc biểu diễn thuật toán tham lam phù hợp thường đòi hỏi lập luận sắc bén d,Mơ hình thuật tốn chia trị -Chia để trị phương pháp áp dụng cho toán giải cách chia nhỏ thành toán từ việc giải tốn Sau lời giải toán nhỏ tổng hợp lại thành lời giải cho toán Devide (Chia) Chia toán lớn thành tốn có kiểu với tốn lớn Conquer (Trị) Giải tốn Thơng thường toán khác liệu vào nên ta thực thủ tục đệ qui Combine (Tổng hợp) Tổng hợp lại kết toán để nhận kết tốn lớn -Vấn đề khó khăn phương pháp làm để chia toán lớn cách hiệu thành toán dựa nguyên tắc để phân chia Nhìn chung trình phân chia cần phải đảm bảo hai yếu tố là: Một liệu toán phải nhỏ liệu toán ban đầu; Hai tốn sử dụng thuật tốn thuật tốn khác tốt điều đảm bảo cho việc kết hợp nghiệm toán thành nghiệm toán ban đầu Kĩ thuật nhánh cận phương pháp chia để trị góp phần giải số tốn có liệu đầu vào lớn toán phức tạp liên quan đến nhiều vấn đề thực tiễn góp phần đưa lời giải “chấp nhận được” lĩnh vực để giải lớp tốn tối ưu • • e,Mơ hình thuật tốn qui hoạch động Quy hoạch động kỹ thuật lập trình giúp giải cách hiệu lớp vấn đề có toán chồng chéo (gối nhau) thuộc tính cấu trúc tối ưu Các tốn chồng chéo: Bài toán toán nhỏ toán ban đầu Bất kỳ toán có tốn trùng việc tìm lời giải liên quan đến việc giải tốn nhiều lần Thuộc tính cấu trúc tối ưu: Bất kỳ toán có thuộc tính cấu trúc tối ưu giải pháp tối ưu tổng thể xây dựng từ giải pháp tối ưu tốn -Bài tốn lớn cần giải phân rã thành nhiều tốn Trong đó, phối hợp lời giải toán cho ta lời giải toán lớn Bài tốn có lời giải đơn giản gọi sở qui hoạch động Công thức phối hợp nghiệm tốn để có nghiệm tốn lớn gọi cơng thức truy hồi qui hoạch động - Phải có đủ không gian vật lý lưu trữ lời giải tốn (Bảng phương án qui hoạch động) Vì qui hoạch động giải tất tốn con, ta khơng lưu trữ lời giải tốn khơng thể phối hợp lời giải toán - Q trình giải từ tốn sở (bài tốn con) để tìm lời giải tốn lớn phải thực sau hữu hạn bước dựa bảng phương án qui hoạch động Khi dùng thuật toán quy hoạch động Bài toán gối Tương tự thuật toán chia để trị, quy hoạch động chia toán lớn thành toán nhỏ Quy hoạch động sử dụng toán gọi gọi lại Phương pháp quy hoạch động lưu kết tốn này, gọi, khơng cần phải tính lại, làm giảm thời gian tính tốn Quy hoạch động khơng thể áp dụng (hoặc nói áp dụng khơng có tác dụng gì) tốn khơng gối Ví dụ với thuật tốn tìm kiếm nhị phân, quy hoạch động tối ưu cả, chia nhỏ toán lớn thành toán con, tốn cần giải lần mà khơng gọi lại Cấu trúc tối ưu Cấu trúc tối ưu tính chất lời giải toán lớn tập hợp lời giải từ toán nhỏ hơn.Chúng ta áp dụng phương pháp quy hoạch động cách tốn dp(0) sau tiếp tục với toán lớn Lời giải toán xây dựng xây dựng đến toán dp(S) kết tốn lớn Một điều cần lưu ý với kỹ thuật tốn khơng thể giải chưa giải tốn trước f,Mơ hình thuật tốn xếp tìm kiếm Algorithm Selection Sort Bubble Sort Insertion Sort Heap Sort Quick Sort Merge Sort Bucket Sort Radix Sort thuật tốn tìm kiếm nhị phân Chú ý: Trong viết giả sử mảng xếp tăng dần Với trường hợp mảng xếp giảm dần, bạn đọc sau hiểu thuật toán tự làm Do tính chất mảng xếp, cơng việc tìm kiếm phần tử x triển khai sau: Xét đoạn mảng arr[left…right] cần tìm kiếm phần tử x Ta so sánh x với phần tử vị trí mảng(mid = (left + right)/2) Nếu: Nếu phần tử arr[mid] = x Kết luận chương trình Nếu arr[mid] < x Chỉ thực tìm kiếm đoạn arr[mid+1…right] Nếu arr[mid] > x Chỉ thực tìm kiếm đoạn arr[left…mid-1] Bằng cách áp dụng thuật tốn tìm kiếm nhị phân, độ phức tạp cho trường hợp xấu O(log(n)) 2.Cấu trúc liệu danh sách liên kết - - Danh sách liên kết đơn Định nghĩa: Tập hợp node thông tin (khối liệu) tổ chức rời rạc nhớ Trong đó, node gồm hai thành phần: • Thành phần liệu (infor): dùng để lưu trữ thông tin node • Thành phần trỏ (pointer): dùng để trỏ đến node liệu Biểu diễn: Sử dụng kiểu liệu cấu trúc tự trỏ để định nghĩa node danh sách liên kết đơn - - - - - Các thao tác danh sách liên kết đơn • Khởi tạo danh sách liên kết đơn: đưa trạng thái danh sách liên kết đơn trạng thái rỗng Ta gọi thao tác Init() • Cấp phát miền nhớ cho node: thực thêm node vào danh sách node cần thêm vào cần trỏ đến miền nhớ cụ thể thông qua thao tác cấp phát nhớ • Thêm node vào đầu bên trái danh sách liên kết đơn • Thêm node vào đầu bên phải theo chiều trỏ next • Thêm node vào node danh sách liên kết đơn • Loại node cuối bên trái danh sách liên kết đơn • Loại node cuối bên phải theo chiều trỏ next • Loại node danh sách liên kết đơn • Duyệt thơng tin danh sách liên kết đơn • Tìm node danh sách liên kết đơn Ứng dụng danh sách liên kết • Xây dựng lược đồ quản lý nhớ: • Thuật toán Best Fit: • Thuật toán First Fit: • Thuật toán Best Availbale • Biểu diễn ngăn xếp : • Danh sách L + { Add-Top, Del-Top} • Danh sách L + { Add-Bottom, Del-Bottom} • Biểu diễn hàng đợi: • Danh sách L + { Add-Top, Del-Bottom} • Danh sách L + { Add-Bottom, Del-Top} • Biểu diễn • Biểu diễn đồ thị • Biểu diễn tính tốn Danh sách liên kết kép Định nghĩa Tập hợp node (khối liệu) tổ chức rời rạc nhớ Trong đó, node gồm ba thành phần: • Thành phần liệu (infor): dùng để lưu trữ thơng tin node • Thành phần trỏ prev: dùng để trỏ đến node liệu sau • Thành phần trỏ next: dùng để trỏ đến node liệu trước Biểu diễn danh sách liên kết kép: typedef struct node { Item Infor; //Thành phần liệu node struct node *prev; //Thành phần trỏ sau struct node *next; //Thành phần trỏ trước }*L; Các thao tác danh sách liên kết kép • Khởi tạo danh sách liên kết kép • Cấp phát miền nhớ cho node • Thêm node vào đầu bên trái danh sách liên kết kép • Thêm node vào đầu bên phải danh sách liên kết kép • Thêm node vào node danh sách liên kết kép • Loại node cuối bên trái danh sách liên kết kép • Loại node cuối bên phải danh sách liên kết kép • Loại node danh sách liên kết kép • Duyệt trái danh sách liên kết kép • Duyệt phải danh sách liên kết kép • Tìm node danh sách liên kết kép… Dưới số thao tác danh sách liên kết kép 3.Cấu trúc liệu ngăn xếp Định nghĩa ngăn xếp Stack kiểu cấu trúc liệu chế LIFO (Last In First Out) nghĩa vào sau trước, hình dung Stack chồng đĩa, lấy đĩa thêm đĩa khác vào đỉnh đĩa nằm đỉnh gọi Top Các phương pháp biểu diễn ngăn xếp Thực chất stack danh sách liên kết , nên bạn sử dụng dạng cài đặt sau: Cài đặt stack danh sách liên kết Biểu diễn trực tiếp ngăn xếp mảng chiều Cài đặt trỏ (sử dụng node stack) Ở viết sử dụng cách thứ tức sử dụng mảng chiều Xem ngăn xếp stack đặt trỏ • • • • • • Các thao tác ngăn xếp 2.1 Kiểm tra stack đầy(IsFull) 2.2 Kiểm tra stack rỗng(IsEmpty) 2.3 Thêm phần tử vào đỉnh stack(Push) 2.4 Xóa phần tử khỏi đỉnh stack(Pop) 2.5 Lấy giá trị phần tử đỉnh stack(Top) 2.6 Lấy số lượng phần tử stack có(Size) Ứng dụng ngăn xếp Các ngăn xếp sử dụng để đánh giá biểu thức Ngăn xếp sử dụng để kiểm tra khớp dấu ngoặc đơn biểu thức Ngăn xếp sử dụng để Chuyển đổi từ dạng biểu thức sang dạng biểu thức khác Ngăn xếp sử dụng để quản lý nhớ • Biểu diễn tính tốn duyệt đồ thị… 4.Cấu trúc liệu hàng đợi Định nghĩa hàng đợi Hàng đợi hay queue cấu trúc liệu động hoạt động theo chế FIFO (First In, First Out), nghĩa phần tử thêm vào phần tử lấy Hàng đợi (tiếng Anh: queue) cấu trúc liệu dùng để chứa đối tượng làm việc theo chế FIFO (viết tắt từ tiếng Anh: First In First Out), nghĩa "vào trước trước" Các phương pháp biểu diễn hàng đợi Tương tự cấu trúc liệu ngăn xếp, cấu trúc liệu hàng đợi triển khai sử dụng Mảng (Array), Danh sách liên kết (Linked List), Con trỏ (Pointer) Cấu trúc (Struct) Các thao tác hàng đợi • Kiểm tra tính rỗng hàng đợi (Empty(queue q)) Thao tác sử dụng ta cần đưa liệu vào hàng đợi • Kiểm tra tính đầy hàng đợi (Empty(queue q)) Thao tác sử dụng ta muốn lấy dữ liệu khỏi hàng đợi • Thao tác đưa liệu vào hàng đợi (Push(queue q, int x)) • Thao tác lấy liệu khỏi hàng đợi (Pop(queue q)) Ứng dụng hàng đợi Duyệt • Duyệt đồ thị • Xây dựng thuật toán lập lịch 5.Cấu trúc liệu Một số khái niệm: • Node gốc (Root): Node định hình • Node cha (Father): Node A node cha node B B node bên trái node A (left son) B node bên phải node B (right son) • Node (Leaf): Node khơng có node trái, khơng có node phải • Node trung gian (Internal Node): Node có node trái, có node phải, hai hai • Node trước (Ancestor): Node A gọi node trước node B node gốc A chứa node B • Node sau trái (left descendent): node B node sau bên trái node A bên trái node A chứa node B • Node sau phải (right descendent): node B node sau bên phải node A bên phải node A chứa node B • Node anh em (brother): A B anh em A B node trái node phải node cha • Bậc node (degree of node): Số tối đa node • Mức node (level of node): mức node gốc có bậc 0, mức node khác mức node cha cộng thêm • Chiều sâu (depth of tree): mức lớn node Như vậy, độ sâu độ dài đường dài từ node gốc đến node Định nghĩa nhị phân/ nhị phân tìm kiếm Các loại nhị phân: • Cây lệch trái: Cây có node bên trái • Cây lệch phải: Cây có node bên phải •Cây nhị phân (strickly binary tree): Node gốc tất node trung gian có hai node • Cây nhị phân đầy (complete binary tree): Cây nhị phân tất node có mức d • Cây nhị phân gần đầy (almost complete binary tree):Cây nhị phân gần đầy cóchiều sâu d nhị phân thỏa mãn: Tất node có mức khơng nhỏ d-1 có hai node con.Các node mức d đầy từ trái qua phải • Cây nhị phân hồn tồn cân bằng.Cây nhị phân có số node thuộc nhánh trái số node thuộc nhánh phải chênh lệch khơng q • Cây nhị phân tìm kiếm Cây nhị phân thỏa mãn điều kiện:Hoặc rỗng có node gốc Mỗi node gốc có tối đa hai Nội dung node gốc lớn nội dungnode bên trái nhỏ nội dung node bên phải Hai bên trái bên phải hình thành nên hai tìm kiếm • Cây nhị phân tìm kiếm hồn tồn cân Cây nhị phân tìm kiếm có chiều sâu bên trái chiều sâu bên phải chênh lệch không Biểu diễn nhị phân/ nhị phân tìm kiếm Biểu diễn liên tục • Biểu diễn liên tục: Sử dụng mảng, đó: • Node gốc: Lưu trữ vị trí • Nếu node cha lưu trữ vị trí p node bên trái lưu trữ vị trí 2p+1, node phải lưu trữ vị trí 2p+2 Ví dụ: với lưu trữ mảng Tree[MAX] sau: 4.2.1 Biểu diễn rời rạc: • Biểu diễn rời rạc: Sử dụng danh sách liên kết typedef struct node { Item Infor; //Thông tin node struct nde *left;//Con trỏ node bên trái struct nde *right;//Con trỏ node bên phải } *Tree; Các thao tác nhị phân/ nhị phân tìm kiếm Các thao tác nhị phân • Tạo node gốc cho • Thêm vào node bên trái node p • Thêm vào node bên phải node p • Loại bỏ node bên trái node p • Loại bỏ node bên phải node p • Loại bỏ • Tìm kiếm node • Duyệt theo thứ tự trước • Duyệt theo thứ tự • Duyệt theo thứ tự sau Thêm : Kiểm tra tính rỗng T: 4.6 Cây nhị phân tìm kiếm 4.6.1 Định nghĩa Cây nhị phân thỏa mãn điều kiện: • Hoặc rỗng có node gốc Mỗi node gốc có tối đa hai Nội dung node gốc lớn nội dung node bên trái nhỏ nội dung node bên phải • Hai bên trái bên phải hình thành nên hai tìm kiếm 4.6.3 Thao tác • Tạo node gốc cho • Thêm vào node vào tìm kiếm • Loại bỏ node tìm kiếm •Tìm kiếm node • Xoay trái tìm kiếm • Xoay phải tìm kiếm • Duyệt theo thứ tự trước • Duyệt theo thứ tự • Duyệt theo thứ tự sau 4.7 Cây nhị phân tìm kiếm cân • Định nghĩa Là nhị phân tìm kiếm tự cân Cây tìm kiếm cân có tính chất độ cao bên trái độ cao bên phải chên lệch khơng q • Cây AVL: Cho phép ta tìm kiếm, bổ sung, loại bỏ node nhanh nhị phân thơng thường độ cao ln O(log (n)) 4.8 Cây nhiều nhánh: Tập hữu hạn node có kiểu liệu chia thành tập, đó: • Hoặc tập rỗng có node gốc, node gốc có nhiều khóa xếp • Các tập cịn lại rỗng hoăc tự hình thành nên cây nhiều nhánh Ứng dụng nhị phân/ nhị phân tìm kiếm 4 Ứng dụng nhị phân 4.1.4.1 Kích cỡ nhị phân (size of a tree) Ta định nghĩa kích cỡ số node có thực 4.4 Xác định hai nhị phân giống Ta định nghĩa hai nhị phân giống chúng có chung node node đặt giống 4.4.3 Tìm độ cao Độ cao định nghĩa đường dài từ node gốc đến node 4.4.4 Cây phản chiếu (Mirror Tree) Cây phản chiếu nhị phân T nhị phân M(T), bên trái T trở thành bên phải M(T) bên phải T trở thành trái M(T) Bài toán đặt l dịch chuyển nhị phân T cho trước thành nhị phân phản chiểu T M(T) 4.4.5 Tìm độ cao Độ cao định nghĩa đường dài từ node gốc đến node 4.4.6 Tìm tất đường từ node gốc đến node 4.4.7 Đến tất node 4.4.8 Kiểm tra thỏa mãn điều kiện node trung gian tổng hai node trái phải hay khơng? Node khơng có node trái phải xem có giá trị Common Data Structure Operations Data Structure Ti A Array Stack Queue Singly-Linked List Doubly-Linked List Skip List Hash Table Binary Search Tree Cartesian Tree B-Tree Red-Black Tree Splay Tree AVL Tree KD Tree Array Sorting Algorithms Algorithm Quicksort Mergesort Timsort Heapsort Bubble Sort Insertion Sort Selection Sort Tree Sort Shell Sort Bucket Sort Radix Sort Counting Sort Cubesort 1) a) b) c) d) e) Đồ thị Định nghĩa khái niệm đồ thị vơ hướng/có hướng Các phương pháp biểu diễn đồ thị vơ hướng/có hướng Thuật tốn DFS/BFS đồ thị vơ hướng/có hướng Các thuật tốn xây dựng khung đồ thị Các thuật tốn xây tìm chu trình/ đường Euler đồ thị A Θ Θ Θ Θ Θ Θ N Θ N Θ Θ N Θ Θ f) Các thuật tốn tìm đường ngắn đồ thị 6.Đồ thị a) b) c) d) e) f) Đồ thị vô hướng Đồ thị G= gọi đồ thị vô hướng cạnh thuộc E khơng tính đến thứ tự đỉnh V Đơn đồ thị có hướng Đồ thị G = bao gồm V tập đỉnh, E tập cặp có thứ tự gồm hai phần tử V gọi cung Giữa hai đỉnh G tồn nhiều cung PHương pháp biểu diễn 1.1 Biểu diễn ma trận kề: • Dòng ghi lại số tự nhiên N số đỉnh đồ thị; • N dịng ghi lại ma trận kề đồ thị Hai phần tử khác ma trận kề ghi cách vài khoảng trống 1.2 Biểu diễn danh sách cạnh: • Dịng ghi lại hai số tự nhiên N M tương ứng với số đỉnh số cạnh đồ thị Hai số viết cách vài khoảng trống • M dòng kế tiếp, dòng ghi lại cạnh đồ thị Đỉnh đầu đỉnh cuối cạnh viết cách vài khoảng trống 1.3 Biểu diễn đồ thị danh sách kề: • Dịng ghi lại số đỉnh đồ thị • Những dòng ghi lại dòng danh sách kề đỉnh tương ứng Danh sách kề đỉnh ghi theo khuôn dạng: + < danh sách đỉnh kề đỉnh> Các đỉnh (số) viết cách vài khoảng trống DFS BFS Cây khung đồ thị Thuật toán TreeDfs(u): kruskal prim Thuật toán: Tìm chu trình/đường Euler distra bellman ford ... hay ghi nhận cấu hình nghiệm toán làm tốt dần bước sau tối ưu bước cấu hình cuối cấu hình tối ưu • • • • • • cMơ hình thuật tốn tham lam -Thuật toán tham lam (Greedy Algorithm): thuật tốn xem... chéo: Bài toán toán nhỏ toán ban đầu Bất kỳ toán có tốn trùng việc tìm lời giải liên quan đến việc giải tốn nhiều lần Thuộc tính cấu trúc tối ưu: Bất kỳ toán có thuộc tính cấu trúc tối ưu giải pháp... hình thuật tốn chia trị -Chia để trị phương pháp áp dụng cho tốn giải cách chia nhỏ thành toán từ việc giải toán Sau lời giải tốn nhỏ tổng hợp lại thành lời giải cho toán Devide (Chia) Chia toán