1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng cấu trúc dữ liệu và giải thuật trong c++ bài 6 véc tơ (vector)

28 7 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

Cấu trúc liệu -Vector -List -Stack -Queue -Tree -HashTable -Dictionary Bài Véc tơ (Vector) Cấu trúc tuyến tính Cấu trúc tuyến tính cấu trúc phần tử nằm đường khơng có nhánh, phần tử liên tiếp Một số ví dụ:  Danh sách (lists)  Vector, chuỗi (vectors, sequences)  Danh sách kiểu ngăn xếp, danh sách kiểu hàng đợi (stack, queue) Cấu trúc tuyến tính Cấu trúc phi tuyến Vector Kiểu liệu trừu tượng Vector (Vector ADT) Kiểu liệu trừu tượng Vector mở rộng khái niệm mảng Vector mảng lưu trữ dãy đối tượng với số lượng tùy ý V n Một phần tử truy cập, chèn thêm loại bỏ biết số Khi thực thao tác xảy lỗi số phần tử khơng xác (Vd, số âm) Các thao tác Vector     int getAtRank(int r, object &o): Trả lại phần tử có số r, khơng loại bỏ int replaceAtRank(int r, object o, object & o1): Thay phần tử có số r phần tử o trả lại phần tử bị thay int insertAtRank(int r, object o): Chèn phần tử o vào vị trí r int removeAtRank(int r, object &o): loại bỏ phần tử vị trí r, trả lại phần tử bị loại bỏ  int size() cho biết kích thước Vector  int isEmpty() cho biết Vector có rỗng hay không? Cài đặt Vector mảng Sử dụng mảng V có kích thước N Một biến n lưu trữ kích thước vector (số phần tử lưu trữ) Phép toán getAtRank(r,o) thực thời gian O(1) việc trả lại V[r] V r n Chèn thêm phần tử Phép toán insertAtRank(r, o), Chúng ta cần tạo có số r cách đẩy n-r phần tử từ V[r], …, V[n  1] sau vị trí Trong trường hợp xấu (r = 0), phép toán thực thời gian O(n) V V V r n r n o r n Loại bỏ phần tử Phép toán removeAtRank(r,o), cần đẩy n  r  phần tử từ V[r + 1], …, V[n  1] trước vị trí Trong trường hợp xấu (r = 0), phép toán thực thời gian O(n) V V V o r n r n r n Các ứng dụng Vector Ứng dụng trực tiếp  Lưu trữ tập hợp đối tượng (cơ sở liệu đơn giản) Ứng dụng gián tiếp   Cấu trúc liệu bổ trợ cho thuật toán Thành phần cấu trúc liệu khác 10 So sánh hai chiến lược Ta so sánh chiến lược phát triển theo hằn số chiến lược gấp đơi cách phân tích tổng thời gian T(n) cần thiết để thực thao tác push dãy n phần tử vào mảng Chúng ta thực bắt đầu với mảng có phần tử Và xác định thời gian trung bình push phần tử vào mảng T(n)/n 14 Thời gian thực thao tác push Thời gian thực đưa dãy phần tử vào mảng cách sử dụng chiến lược gấp đôi 10 11 12 13 14 Số phần tử có mảng 15 16 15 Thời gian thực thao tác push Thời gian thực đưa dãy phần tử vào mảng cách sử dụng chiến lược phát triển theo số 10 11 12 13 14 Số phần tử có mảng 15 16 16 Thời gian thực phép toán push Thời gian thực đưa dãy phần tử vào mảng cách sử dụng chiến lược gấp đôi Số phần tử có mảng 17 Thời gian thực phép toán push Thời gian thực đưa dãy phần tử vào mảng cách sử dụng chiến lược phát triển theo số 10 11 12 13 14 Số phần tử có mảng 15 16 18 Phân tích chiến lược phát triển theo số Chúng ta thay mảng k = n/c lần Tổng thời gian T(n) phép toán push n phần tử vào mảng tương ứng n + c + 2c + 3c + 4c + … + kc = n + c(1 + + + … + k) = n + ck(k + 1)/2 Trong c số, T(n) O(n + k2), O(n2) Vậy thời gian trung bình phải trả cho phép tốn push O(n) 19 Phân tích chiến lược gấp đôi Chúng ta thay mảng k = log2 n lần Tổng thời gian thực phép toán push n phần tử vào mảng T(n) tương ứng là: n + + + + + …+ 2k = n + 2k + 1 = 3n 1 T(n) O(n) Thời gian trung bình phải tra cho phép toán push phần tử mảng O(1) Mơ tả hình học 1 20 Một số ý cài đặt mảng Khi sử dụng mảng để cài đặt Vector việc sử dụng ngơn ngữ có khả dễ dàng cấp phát nhớ quan trọng Trong số ngôn ngữ, mảng mở rộng sau tạo 21 Một số ý cài đặt mảng Các ngôn ngữ thủ tục chia thành lớp ngôn ngữ dựa vào khia cạnh này:    Các ngôn ngữ là: Ada, Algol, C and JAVA cho phép xác định kích thước mảng vào thời gian chạy chương trình mảng tạo Như vậy, mảng mở rộng tùy ý Các ngôn ngữ là: Pascal, Modula-2 and Fortran hạn chế, u cầu kích thước mảng phải xác định dịch chương trình Nếu khơng thể thay đổi động cài đặt cấu trúc liệu mảng phải có phương pháp mở rộng mảng 22 Cài đặt Vector C++ template class Vector{ private: int N; //Số chiều tối đa Vector Object *V; //lưu trữ liệu int n; //Số phần tử có Vector public: Vector(); ~Vector(); int getAtRank(int r, Object &o); int replaceAtRank(int r, Object o); int insertAtRank(int r, Object o); int removeAtRank(int r, Object &o); int size(); int isEmpty(); }; 23 Iterator – Bộ lặp Trong ADT không hỗ trợ phép tìm duyệt phần tử Bộ lặp sử dụng để tìm duyệt phần tử ADT như: Vector, List, Tree,… Đối tượng lặp cung cấp phần tử đối tượng ADT sử dụng theo thứ tự xác định Tại thời điểm có nhiều đối tượng lặp đối tượng ADT 24 Cấu trúc lặp Thuộc tính - Một thuộc tính có kiểu trỏ lưu địa thuộc tính quản lý phần tử đối tượng sử dụng lặp - Một thuộc tính lưu địa phần tử đối tượng sử dụng lặp Phương thức - int hasnext(): Cho biết có cịn phần tử khơng? - Object next(): trả lại phần tử chuyển trỏ đến phần tử 25 Bộ lặp cho đối tượng Vector template class VectorItr{ private : Vector* theVector; int current_Index; public: VectorItr(Vector*v) { theVector = v; current_Index = 0; } int hasNext(){ if (current_Index< theVector->size()) return 1; else return 0; } Object next(){ Object o; theVector->getAtRank(current_index, o); current_Index++; return o; } };//End of class VectorItr 26 Bài tập Sử dụng lớp Vector lớp lăp lớp vector xây dựng chương trình có chức sau: Chèn phần tử vào vector Xóa phần tử vector Thay phần tử vector Lấy giá trị phần tử vector In danh sách phần tử có vector Các phần tử lưu vào vector số thực 27 Hết 28 ... tượng (cơ sở liệu đơn giản) Ứng dụng gián tiếp   Cấu trúc liệu bổ trợ cho thuật toán Thành phần cấu trúc liệu khác 10 Tóm lại Cài đặt Vector mảng:    Không gian sử cho cấu trúc liệu O(n) Các.. .Bài Véc tơ (Vector) Cấu trúc tuyến tính Cấu trúc tuyến tính cấu trúc phần tử nằm đường khơng có nhánh, phần tử liên tiếp Một số... ngăn xếp, danh sách kiểu hàng đợi (stack, queue) Cấu trúc tuyến tính Cấu trúc phi tuyến Vector Kiểu liệu trừu tượng Vector (Vector ADT) Kiểu liệu trừu tượng Vector mở rộng khái niệm mảng Vector

Ngày đăng: 26/12/2021, 17:20

Xem thêm: