1. Trang chủ
  2. » Tất cả

Đề thi cấu trúc dữ liệu giải thuật midterm 2011 v3a

2 13 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

1/2 Đại học Quốc Gia TP Hồ Chí Minh Trường đại học Bách Khoa Khoa Khoa học & Kỹ thuật Máy tính Bộ môn Khoa học Máy tính ĐỀ KIỂM TRA GIỮA HỌC KỲ 1 Năm học 2011 – 2012 Môn Cấu trúc dữ liệu & Giải thuật[.]

Đại học Quốc Gia TP Hồ Chí Minh Trường đại học Bách Khoa Khoa: Khoa học & Kỹ thuật Máy tính Bộ mơn: Khoa học Máy tính ĐỀ KIỂM TRA GIỮA HỌC KỲ Năm học: 2011 – 2012 Môn: Cấu trúc liệu & Giải thuật MSMH: 503001 Ngày thi: 23/10/2011 - Thời gian: 70 phút (Được sử dụng tài liệu) Lưu ý: Đề kiểm tra gồm câu với thang điểm 11/10 Sinh viên làm 10 điểm làm tròn thành 10 Câu 1: (2 điểm) Cho danh sách số nguyên a gồm n phần tử Hãy viết hàm func(int* a, int n) có độ phức tạp (theo Big-O Notation) sau: a) trường hợp xấu O(n2), trường hợp tốt O(n); b) trường hợp xấu O(n log n), trường hợp tốt O(n) Gợi ý: chia thành nhiều trường hợp để giải với độ phức tạp khác nhau, xét trường hợp n chẵn n lẻ Câu 2: (4 điểm) Cho cấu trúc danh sách liên kết vịng đơi mơ tả Hình count=1 pHead count=N pHead 1 … N //just an entry in the list, a “struct++” in fact class Node { public: int data; Node* next, back; }; //interface part class List { private: int count; Node* pHead; public: List(); void add(int data, int index); Node* remove(int index); void display(); ~List(); }; Hình Đặc tả cấu trúc danh sách liên kết vòng đôi Method remove thực tác vụ sau: a) rút phần tử vị trí thứ index khỏi danh sách liên kết vịng đơi (giả sử phần tử bắt đầu danh sách có số tham khảo pHead), 1/2 b) pHead cập nhật lại cách tham khảo đến phần tử đứng sau, liền kề với phần tử xóa, c) remove trả tham khảo phần tử vừa rút khỏi danh sách (lưu ý tính an tồn danh sách: cần phải gán tham khảo next/back phần tử NULL) Ví dụ : Giả sử danh sách list (1,2,3,4,5) Sau gọi list.remove(2) list trở thành (3,4,5,1) Nếu gọi tiếp list.remove(6) list trở thành (5,1,3) Hãy thực method remove theo hai cách: (i) không đệ quy (ii) đệ quy Câu 3: (2 điểm) Xét trò chơi Josephus sau: N cá nhân hình thành vịng trịn số ngun m Trò chơi bước loại bỏ người thứ m vòng tròn lặp lại khơng cịn người vịng trịn Ví dụ, "N = 9, m = 4", danh sách ban đầu gồm số theo thứ tự : 1,2, 3,4,5,6,7,8, Thứ tự loại bỏ theo trò chơi Josephus là: 4,8,3,9,6,5,7,2,1 Để thực toán này, giả sử danh sách ban đầu lưu trữ danh sách liên kết vịng đơi (được thực class List hình 1) Do vậy, hàm method remove câu Giả sử có cấu trúc liệu stack queue thực với hàm sau: boolean isEmpty(stack s) // kiểm tra xem s có rỗng hay không Node* top(stack s) // trả tham khảo phần tử đỉnh s void push(Node* x, stack s) // đẩy phần tử x vào s Node* pop(stack s) // lấy phần tử khỏi s trả tham khảo phần tử boolean isEmpty(queue q) // kiểm tra xem q có rỗng hay không Node* queueFront(queue q) // trả tham khảo phần tử đầu q Node* queueRear(queue q) // trả tham khảo phần tử cuối q void enQueue(Node* x, queue q) // thêm phần tử x vào cuối hàng đợi q Node* deQueue(queue q) // lấy phần tử khỏi q trả tham khảo đến phần tử a) Theo bạn nên chọn cấu trúc liệu queue hay stack để nhằm phục vụ cho ngõ toán : lưu trữ danh sách cá nhân theo thứ tự loại bỏ trò chơi Tại sao? b) Viết thuật giải để giải toán với cấu trúc liệu mà bạn chọn câu (a) Josephus(List l, queue q, int m) hay Josephus(List l, stack s, int m) Câu 4: (2 điểm) Giả sử dùng queue để lưu trữ kết toán Josephus Hãy viết thuật giải để khôi phục lại danh sách phần tử theo thứ tự ban đầu (nghĩa theo thứ tự tăng dần giá trị data) void restore(queue q) // danh sách trả lưu trữ q Sinh viên lớp thường khai báo biến tạm tuỳ ý thực hàm này, sinh viên lớp KSTN phép khai báo thêm biến tạm thuộc kiểu Node* biến tạm khác phải thuộc kiểu queue Câu 5: (1 điểm) Hãy so sánh hai loại cấu trúc: liên kết đơn vòng mảng vịng (circular array) (Ví dụ: độ phức tạp trường hợp xấu việc thêm/xóa phần tử, …) Sinh viên lớp thường cần nêu giải thích (ưu/khuyết) điểm, sinh viên lớp KSTN cần nêu giải thích (ưu/khuyết) điểm – Hết – 2/2

Ngày đăng: 25/03/2023, 08:37

w