1. Trang chủ
  2. » Công Nghệ Thông Tin

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

50 77 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 6,99 MB

Nội dung

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 học các kiến thức: Thuật toán và độ phức tạp, ký hiệu tiệm cận, giả ngôn ngữ, một số kỹ thuật phân tích 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 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 CuuDuongThanCong.com Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT 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 tố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 tố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 CuuDuongThanCong.com Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT 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) CuuDuongThanCong.com Cấu trúc liệu thuật tốn - N.Đ Nghĩa Bộ mơn KHMT 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; } CuuDuongThanCong.com Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT 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) CuuDuongThanCong.com Cấu trúc liệu thuật toán - N.Đ Nghĩa Bộ mơn KHMT 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:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN