CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN

75 9 0
CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN

Đ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

CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN 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 Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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 tố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) Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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 Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa Thuật toá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; ip 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?! Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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; } Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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 Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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; Tham khảo tài liệu PGS TS Nguyễn Đức Nghĩa 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) Ví dụ: Thuật tốn ví dụ mở đầu int maxSum =0; for (int i=0; i

Ngày đăng: 23/12/2021, 10:24

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

Tài liệu liên quan