intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Bài 9: Thiết kế thuật toán

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

69
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Bài 9: Thiết kế thuật toán do Hoàng Thị Điệp biên soạn trình bày về các chiến lược thiết kế thuật toán, thuật toán tiêu biểu, số Fibonacci thứ n đệ quy, Fibonacci(n) quy hoạch động, cấu trúc chung của phương pháp quy hoạch động.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Bài 9: Thiết kế thuật toán

Bài 9: Thiết kế thuật toán<br /> Giảng viên: Hoàng Thị Điệp<br /> Khoa Công nghệ Thông tin – ĐH Công Nghệ<br /> <br /> Các chiến lược thiết kế thuật toán<br /> •<br /> <br /> Chia-để-trị (Divide-and-conquer)<br /> <br /> •<br /> <br /> – Thực hiện từng bước một. Tại mỗi<br /> bước, chọn phương án được xem<br /> là tốt lúc đó.<br /> – Không phải tất cả các thuật toán<br /> tham ăn đều cho kết quả tối ưu<br /> toàn cục<br /> <br /> – Chia bài toán thành các bài toán<br /> kích thước nhỏ có thể giải quyết<br /> độc lập. Sau đó kết hợp nghiệm<br /> các bài toán kích thước nhỏ thành<br /> nghiệm bài toán gốc<br /> – Thuật toán đệ quy<br /> <br /> •<br /> <br /> Quy hoạch động (Dynamic<br /> programming)<br /> <br /> Tham ăn (Greedy method)<br /> <br /> •<br /> <br /> – Giải bài toán lớn dựa vào kết quả<br /> bài toán con. Tránh lặp lại việc<br /> giải cùng một bài toán con bằng<br /> cách lưu nghiệm các bài toán con<br /> trong một bảng<br /> – Thuật toán lặp<br /> <br /> INT2203<br /> <br /> Các chiến lược khác<br /> – Quay lui<br /> – Thuật toán ngẫu nhiên<br /> <br /> Thuật toán tiêu biểu<br /> – Tìm dãy con chung của hai<br /> dãy số (longest common<br /> subsequence)<br /> <br /> • Chia-để-trị<br /> – Tìm kiếm nhị phân (binary<br /> search)<br /> – Sắp xếp trộn (merge sort)<br /> – Sắp xếp nhanh (quick sort)<br /> <br /> • Tham ăn<br /> – Xây dựng mã Huffman<br /> (Huffman encoding)<br /> – Tìm cây bao trùm nhỏ nhất<br /> (minimum spanning tree)<br /> <br /> • Quy hoạch động<br /> – Tìm dãy con tăng dài nhất<br /> (longest increasing<br /> subsequence)<br /> – Bài toán ba lô<br /> (backpacker/knapsack)<br /> – Bài toán người bán hàng<br /> (traveling salesman)<br /> <br /> INT2203<br /> <br /> Tìm số Fibonacci thứ n đệ quy<br /> •<br /> •<br /> <br /> Algorithm Fib(n)<br /> Input n<br /> Output số Fibonacci thứ n<br /> if n = 0 then return 0<br /> else if n = 1 then return 1<br /> else<br /> return Fib(n – 2) + Fib(n – 1)<br /> <br /> Fn= Fn-1+ Fn-2<br /> F0 =0, F1 =1<br /> – 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …<br /> <br /> •<br /> <br /> Thủ tục tính đệ quy trực tiếp<br /> thực hiện chậm do tính lặp<br /> nhiều lần.<br /> <br /> F(6) = 8<br /> F(5)<br /> <br /> F(4)<br /> <br /> F(4)<br /> F(3)<br /> F(2)<br /> F(1)<br /> <br /> F(0)<br /> <br /> F(3)<br /> F(2)<br /> <br /> F(1) F(1)<br /> <br /> F(3)<br /> <br /> F(2) F(1)<br /> <br /> F(0) F(1)<br /> <br /> F(0)<br /> INT2203<br /> <br /> F(2)<br /> F(1)<br /> <br /> F(0)<br /> <br /> F(2)<br /> <br /> F(1) F(1)<br /> <br /> F(0)<br /> <br /> Phân tích<br /> • Có bao nhiêu phép cộng?<br /> Fn +1<br /> 1+ 5<br /> • Tỉ lệ vàng<br /> ≈φ<br /> =<br /> ≈ 1.61803...<br /> 2<br /> Fn<br /> • Suy ra Fn≈1.6n<br /> • Cây đệ quy có các lá bằng 0 hoặc 1, do đó có tổng cộng<br /> khoảng 1.6n phép cộng<br /> • Thời gian thực hiện là hàm mũ<br /> <br /> INT2203<br /> <br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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