Font size
WorksheetsCấu trúc dữ liệu và giải thuật
Total questions: 47
Worksheet time: 26mins
Kiểu dữ liệu trừu tượng (ADT) là gì?
Một kiểu dữ liệu được định nghĩa trong thư viện chuẩn
Một kiểu dữ liệu có thể mô phỏng được bằng mảng
Một mô hình dữ liệu được mô tả bởi các thao tác có thể thực hiện
Một kiểu dữ liệu do người dùng định nghĩa trong C++
Cấu trúc dữ liệu nào sau đây cho phép truy cập ngẫu nhiên (random access)?
Danh sách liên kết đơn
Cây nhị phân
Mảng
Hàng đợi
Kết quả của đoạn mã sau là gì? int a[] = {1, 2, 3, 4}; cout << a[2];
1
2
3
4
Chọn phát biểu đúng về danh sách liên kết đơn:
Chỉ có thể thêm phần tử ở cuối danh sách
Mỗi nút chứa con trỏ tới nút liền sau
Không thể xóa phần tử ở đầu danh sách
Không thể duyệt danh sách
Đâu là điểm yếu của mảng tĩnh trong C++?
Không thể lưu dữ liệu số nguyên
Không có chỉ số
Kích thước cố định tại thời điểm biên dịch
Không thể khởi tạo giá trị
Giá trị trả về của hàm sizeof(int) thường là bao nhiêu (trên hệ thống 64-bit)?
1
2
4
8
Câu lệnh nào đúng để tạo một node mới trong danh sách liên kết đơn (C++)?
Node *p = new Node();
Node p = new Node();
Node p = malloc(sizeof(Node));
Node *p = malloc(sizeof(Node));
Cấu trúc dữ liệu nào phù hợp để cài đặt ngăn xếp (stack)?
Mảng
Cây nhị phân
Hash Table
Đồ thị
Trong cấu trúc dữ liệu hàng đợi (queue), thao tác nào được thực hiện ở cuối hàng?
Push
Enqueue
Pop
Dequeue
Phát biểu nào sau đây là đúng với stack?
Cấu trúc FIFO
Có thể thêm ở cả đầu và cuối
Cấu trúc LIFO
thao tác nào được thực hiện ở cuối hàng?
Push
Enqueue
Pop
Dequeue
Phát biểu nào sau đây là đúng với stack?
Cấu trúc FIFO
Có thể thêm ở cả đầu và cuối
Cấu trúc LIFO
Không thể xóa phần tử
Đệ quy là gì?
Hàm gọi chính nó
Hàm gọi một hàm khác
Vòng lặp lặp lại nhiều lần
Cách viết lại chương trình ngắn hơn
Kết quả của đoạn mã sau là gì? int fun(int n) { if (n == 0) return 0; return n + fun(n - 1); } cout << fun(3);
3
6
9
10
Tìm kiếm nhị phân yêu cầu điều kiện gì với mảng đầu vào?
Mảng bất kỳ
Mảng giảm dần
Mảng tăng dần hoặc giảm dần
Mảng đã sắp xếp
Đâu là độ phức tạp thời gian của thuật toán tìm kiếm nhị phân?
O(n)
O(log n)
O(n log n)
O(n²)
Ngăn xếp (stack) được sử dụng trong quá trình nào sau đây?
BFS
Quản lý bộ nhớ
Triển khai hàng đợi
Đọc ghi file
Câu nào đúng về hàng đợi ưu tiên (priority queue)?
Phần tử nào đến trước được xử lý trước
Phần tử có độ ưu tiên cao hơn được xử lý trước
Phần tử nào lớn hơn sẽ được xử lý cuối cùng
Nó không khác gì hàng đợi thường
Trong thuật toán sắp xếp chèn (insertion sort), trường hợp xấu nhất có độ phức tạp là:
O(log n)
O(n)
O(n log n)
O(n²)
Đâu là cách hoạt động của thuật toán selection sort?
Chọn phần tử lớn nhất và đưa ra đầu mảng
Chọn phần tử nhỏ nhất và đưa về đầu mảng
Chọn phần tử bất kỳ và sắp xếp đệ quy
So sánh từng cặp phần tử liê
oạt động của thuật toán selection sort?
Chọn phần tử lớn nhất và đưa ra đầu mảng
Chọn phần tử nhỏ nhất và đưa về đầu mảng
Chọn phần tử bất kỳ và sắp xếp đệ quy
So sánh từng cặp phần tử liên tiếp
Sự khác biệt chính giữa hàng đợi và ngăn xếp là gì?
Hàng đợi là LIFO, stack là FIFO
Hàng đợi thêm ở đầu, stack thêm ở cuối
Stack là LIFO, queue là FIFO
Không có sự khác biệt
Giả sử bạn có mảng int a[] = {3, 2, 1}. Sau một lần duyệt của bubble sort, mảng sẽ thành:
{1, 2, 3}
{2, 1, 3}
{3, 1, 2}
{2, 3, 1}
Đâu là đặc điểm đúng của cây nhị phân tìm kiếm (BST)?
Tất cả các nút đều có tối đa 3 con
Nút bên trái có giá trị lớn hơn nút gốc
Nút bên phải luôn nhỏ hơn nút gốc
Nút bên trái nhỏ hơn và nút bên phải lớn hơn nút gốc
Duyệt cây theo thứ tự trung thứ (in-order) sẽ cho ra dãy tăng dần nếu cây là:
Cây nhị phân đầy đủ
Cây nhị phân cân bằng
Cây nhị phân tìm kiếm
Cây nhị phân ngẫu nhiên
Cấu trúc dữ liệu phù hợp nhất để cài đặt thuật toán BFS là:
Stack
Queue
Heap
Tree
Cấu trúc dữ liệu phù hợp nhất để cài đặt thuật toán DFS là:
Stack
Queue
Heap
Priority queue
Heap nhị phân được dùng chủ yếu để cài đặt:
Hàng đợi thông thường
Hàng đợi ưu tiên
Ngăn xếp
Danh sách liên kết
Tổng số nút trong cây nhị phân đầy đủ có độ cao hhh là:
2^h
h^2
( 2^h+1)-1
h.log(h)
Thuật toán nào sau đây có độ phức tạp trung bình tốt
Tổng số nút trong cây nhị phân đầy đủ có độ cao hhh là:
2^h
h^2
( 2^h+1)-1
h.log(h)
Thuật toán nào sau đây có độ phức tạp trung bình tốt nhất để sắp xếp mảng lớn?
Bubble sort
Insertion sort
Quick sort
Selection sort
Với bảng băm (hash table), điều kiện để tìm kiếm hiệu quả nhất là:
Không dùng mảng
Không xảy ra va chạm (collision)
Dùng cây thay cho mảng
Kích thước bảng băm càng nhỏ càng tốt
Thuật toán merge sort có đặc điểm nào sau đây?
Sắp xếp tại chỗ (in-place)
Không sử dụng đệ quy
Luôn chia mảng làm hai phần bằng nhau
Có độ phức tạp trung bình là O(n^2)
Kết quả của đoạn đệ quy sau là gì? int f(int n) { if (n <= 1) return 1; return f(n - 1) + f(n - 2); } cout << f(5);
5
8
13
3
Cây AVL là gì?
Cây nhị phân tìm kiếm không cân bằng
Cây mà mỗi nút có tối đa 4 con
Cây nhị phân tìm kiếm được cân bằng theo chiều cao
Cây có số lượng nút bằng nhau ở mỗi nhánh
Trong cây AVL, khi chênh lệch chiều cao giữa cây con trái và cây con phải lớn hơn 1, ta cần:
Xóa nút gốc
Tìm kiếm lại từ đầu
Thực hiện phép quay (rotation)
Sắp xếp lại cây
Giả sử có thuật toán có độ phức tạp T(n)=T(n−1)+O(n). Tổng thể là:
O(log(N))
O(N)
O(Nlog(N))
O(N^2)
Thuật toán Floyd-Warshall dùng để:
Tìm đường đi ngắn nhất từ một đỉnh đến mọi đỉnh
Tìm cây khung nhỏ nhất
Tìm đường
Độ phức tạp của thuật toán dijkstra với hàng đợi ưu tiên là:
O(V+E)
O(V^2)
O((V+E)log(V))
O(V⋅E)
Kỹ thuật "Sliding Window" được dùng tốt nhất trong bài toán nào?
Đếm số phần tử nhỏ hơn k trong mảng chưa sắp xếp
Tìm tổng lớn nhất của dãy con liên tiếp dài k
Đếm số lượng đường đi trong đồ thị
Tìm cây khung nhỏ nhất
Câu nào sau đây là đúng về thuật toán KMP (Knuth-Morris-Pratt)?
So sánh từng ký tự một trong văn bản
Có độ phức tạp O(nm)O(nm)O(nm)
Không xử lý được chuỗi lặp
Sử dụng mảng prefix để tránh so sánh lại
Segment Tree thường dùng để:
Sắp xếp mảng
Tính tổng hoặc giá trị lớn nhất trong khoảng
Quản lý hàng đợi ưu tiên
Duyệt đồ thị theo BFS
Trie là gì?
Cây nhị phân đặc biệt cho đồ thị
Cấu trúc dữ liệu dùng lưu trữ và tìm kiếm chuỗi hiệu quả
Dạng cây AVL dành cho số nguyên
Thuật toán tìm đường đi ngắn nhất
Trong quy hoạch động (Dynamic Programming), điều kiện cần là:
Có mảng
Có đệ quy tuyến tính
Có tính chất tối ưu con và chồng lặp bài toán con
Không có ràng buộc về bộ nhớ
Thuật toán Floyd-Warshall dùng để:
Tìm đường đi ngắn nhất từ một đỉnh đến mọi đỉnh
Tìm cây khung nhỏ nhất
Tìm đường đi ngắn nhất giữa mọi cặp đỉnh
Duyệt toàn bộ đồ thị
Độ phức tạp của thuật toán dijkstra với hàng đợi ưu tiên là:
O(V+E)
O(V^2)
O((V+E)log(V))
O(V⋅E)
