Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 1 - Nguyễn Đức Nghĩa (tt)

50 69 0
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 1 - Nguyễn Đức Nghĩa (tt)

Đ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

Phần tiếp theo bài giảng Cấu trúc dữ liệu và thuật toán - Chương 1: Các kiến thức cơ bản cung cấp cho người đọc các kiến thức về thuật toán trực tiếp, thuật toán nhanh hơn, thuật toán đệ qui, so sáng các thuật toán,... Mời các bạn cùng tham khảo.

CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN Data Structures and Algorithms NguyỄN ĐỨC NGHĨA Bộ mơn Khoa học Máy tính Đại học Bách khoa Hà nội Tel: 0438696121 (Off), 0903210111 (Mob) nghiand@soict.hut.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Chương CÁC KIẾN THỨC CƠ BẢN Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT NỘI DUNG 1.1 Ví dụ mở đầu 1.2 Thuật toán độ phức tạp 1.3 Ký hiệu tiệm cận 1.4 Giả ngôn ngữ 1.5 Một số kĩ thuật phân tích thuật tốn Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ mở đầu • Bài tốn tìm dãy lớn nhất: Cho dãy số a1, a2, … , an Dãy số ai, ai+1 , …, aj với ≤ i ≤ j ≤ n gọi dãy dãy cho ∑jk=i ak gọi trọng lượng dãy Bài toán đặt là: Hãy tìm trọng lượng lớn dãy con, tức tìm cực đại giá trị ∑jk=i ak Để đơn giản ta gọi dãy có trọng lượng lớn dãy lớn • Ví dụ: Nếu dãy cho -2, 11, -4, 13, -5, cần đưa câu trả lời 20 (là trọng lượng dãy 11, -4, 13) Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT Thuật tốn trực tiếp • Thuật tốn đơn giản nghĩ để giải toán đặt là: Duyệt tất dãy ai, ai+1 , …, aj với ≤ i ≤ j ≤ n tính tổng dãy để tìm trọng lượng lớn • Trước hết nhận thấy rằng, tổng số dãy dãy cho C(n,2) + n = n2/2 + n/2 Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật tốn trực tiếp • Thuật tốn cài đặt đoạn chương trình sau: int maxSum = 0; for (int i=0; i T[k], j*=j, i*=(i+j) div + 1, d*=j*i*+1 = j - (i+j) div  j -(i+j-1)/2 - i = (j - i + 1)/2 = d/2 – Nếu x = T[k], d* = cịn d  Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT Binary-Search (tiếp) • Vậy ln có: d*  d/2 • Do vịng lặp kết thúc d  1, nên từ suy thuật tốn phải kết thúc • Gọi dp giá trị j - i + lần lặp thứ p  d0 = n Khi dp  dp-1/2, p  • Thuật tốn kết thúc bước p dp  1, điều xảy p = log n • Vậy thời gian tính thuật toán O(log n) Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT CuuDuongThanCong.com https://fb.com/tailieudientucntt Các mơ tả khác thuật tốn Binary Search Function mid=bsearch1(L,p,q,key) Function mid=bsearch2(L,p,q,key) while q>p mid=floor((p+q)/2); if keyp mid=floor((p+q)/2); if key==L(mid) break break p=mid; if key==L(p) mid=p; else mid=0; end Tìm thấy dừng?! elseif key 0) { i = n / 2; if (a[i] == x) return true; if (a[i] < x) { /* Tiếp tục tìm nửa trái */ a = &a[i + 1]; n = n - i - 1; } else /* Tiếp tục tìm nửa phải */ n = i; } return false; } Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT CuuDuongThanCong.com https://fb.com/tailieudientucntt Câu lệnh đặc trưng • Định nghĩa Câu lệnh đặc trưng câu lệnh thực thường xuyên câu lệnh thuật tốn • Nếu giả thiết thời gian thực câu lệnh bị chặn số thời gian tính thuật tốn cỡ với số lần thực câu lệnh đặc trưng • => Để đánh giá thời gian tính đếm số lần thực câu lệnh đặc trưng Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT Ví dụ: FibIter function Fibiter(n) begin i:=0; j:=1; for k:=1 to n begin j:= j+i; i:= j-i; end; Fibiter:= j; end; Câu lệnh đặc trưng • Số lần thực câu lệnh đặc trưng n • Vậy thời gian tính thuật tốn O(n) Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Thuật tốn ví dụ mở đầu int maxSum =0; for (int i=0; i T[k], j*=j, i*=(i+j) div + 1, d*=j*i* +1 = j - (i+j) div  j -( i+j -1 ) /2 - i = (j - i + 1) /2 = d/2

Ngày đăng: 11/01/2020, 17:20

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

Tài liệu liên quan