You are on page 1of 8

30 CÂU TRẮC NGHIỆM ÔN TẬP CUỐI KỲ

Môn : Cấu trúc dữ liệu & giải thuật


Ban Học tập Khoa học và Kỹ thuật Thông tin – UIT
----------------------------------------------------

Câu 1: Thuật toán sắp xếp trộn (Merge Sort) là điển hình cho thuật toán nào dưới đây ?
a. Tham lam
b. Chia để trị
c. Vét cạn
d. Quay lui

Câu 2: Độ phức tạp trung bình của thuật toán sắp xếp nhanh (Quick Sort) là :
a. O(nlogn)
b. O(n)
c. O(logn)
d. O(n^2)

Câu 3: Trong kiểu dữ liệu cây (Tree), nút lá (leaf node) là nút :
a. Có bậc bằng 0
b. Không có nút cha
c. Trái nhất của cây
d. Có 2 nút con

Câu 4: Cho bảng băm A có kích thước 7 ô và đã nạp 3 giá trị như hình dưới đây:

k H(k)
15 0
1
2
33 3
4
28 5
6

Sử dụng hàm băm H(k) = k % 7 để nạp lần lượt hai giá trị k = 45 và k = 7 vào trong bảng băm A. Nếu có xảy ra
sự đụng độ (collision) thì dùng phương pháp dò tuyến tính (linear probing method) để xử lý.
a. k = 45 tại H(k) = 4 và k = 7 tại H(k) = 6
b. k = 45 tại H(k) = 2 và k = 7 tại H(k) = 1
c. k = 45 tại H(k) = 4 và k = 7 tại H(k) = 1
d. k = 45 tại H(k) = 6 và k = 7 tại H(k) = 2

Câu 5: Hãy cho biết chiều cao h của cây nhị phân tìm kiếm dưới đây và bậc của nút 37:
a. h = 2 và bậc nút 37 là 0
b. h = 4 và bậc nút 37 là 1
c. h = 4 và bậc nút 37 là 2 (h=5)
d. h = 3 và bậc nút 37 là 2

Câu 6: Đồ thị nào dưới đây là một đồ thị đầy đủ :


a. b.

c. d.

Câu 7: Cho hàm tìm kiếm phần tử x trên mảng a có khai báo như sau:
int Search(int a[], int n, int x) {
int l = 0, r = n-1;
while (l < r) {
int m = (l+r)/2;
if (a[m] < x) {
l = m+1;
}
else {
r = m;
}
}
if (a[l] == x) {
return l;
}
return -1;
}
Thuật toán tìm kiếm trên thuộc loại thuật toán tìm kiếm nào ?
a. Binary Search
b. Ternary Search
c. Jump Search
d. Exponential Search
Câu 8: Duyệt cây nhị phân tìm kiếm sau theo thứ tự Node-Left-Right:
a. 49 43 31 19 17 11 10 8 6 5 4
b. 11 6 19 4 8 17 43 5 10 31 49
c. 11 6 4 5 8 10 19 17 43 31 49
d. 4 5 6 8 10 11 17 19 31 43 49

Câu 9: Hãy tìm kết quả in ra màn hình cho chương trình sau:
#include<iostream>
using namespace std;

void function(int a[], int n) {


int b[100];
for (int i = 0; i < 100; i++)
b[i] = 0;
for (int i = 0; i < n; i++)
b[a[i]]++;
for (int i = 0; i < 100; i++)
if (b[i] != 0) cout << i << "-" << b[i] << " ";
}
int main() {
int a[100] = { 1,2,5,2,1,7,0,3,9,2 }, n = 10;
function(a, n);
}
a. 1-2 2-5 5-7 7-9 9-0 0-3 3-3
b. 0-1 1-2 2-3 3-1 5-1 7-1 9-1
c. 0-0 1-2 2-3 3-4 4-5 5-9 9-3
d. 0-1 1-3 2-2 3-1 5-2 7-1 9-2

Câu 10: Cho cây nhị phân tìm kiếm sau:

Cây nhị phân tìm kiếm trên có bị mất cân bằng tại nút 40 không ? Nếu có thì bị mất cân bằng loại nào ?
a. Cây nhị phân không mất cân bằng ở nút 40
b. Cây nhị phân bị mất cân bằng loại Left-Left ở nút 40
c. Cây nhị phân bị mất cân bằng loại Left-Right ở nút 40
d. Cây nhị phân bị mất cân bằng loại Right-Left ở nút 40

Câu 11: Cho bảng băm B có kích thước 5 ô và tập khóa K bao gồm các chuỗi như sau = {12,25,3,7,19}. Hỏi phải dùng
hàm băm H(k) nào dưới đây để các giá trị khóa K được nạp lần lượt vào bảng băm B có thứ tự như sau. (Biết nếu xảy ra
đụng độ (collision) thì dùng phương pháp dò bậc hai (quadratic probing method) để xử lý)

k H(k)
7 0
12 1
3 2
19 3
25 4
a. H(k) = 2k % 5
b. H(k) = k^2 % 5
c. H(k) = k % 5
d. H(k) = (k-1) % 5

Câu 12: Tổng giá trị của các nút chỉ có 1 con trên cây nhị phân dưới đây là bao nhiêu ?

a. 75
b. 66
c. 56
d. 72

Câu 13: Thuật toán sắp xếp nào dưới đây chỉ có thể áp dụng trên tập số nguyên ?
a. Merge Sort
b. Insertion Sort
c. Bubble Sort
d. Radix Sort dương

Câu 14: Thủ tục khai báo của kiểu dữ liệu cây nhị phân tìm kiếm được cho như sau:
#include<iostream>
using namespace std;
struct node {
int data;
node* left;
node* right;
};
typedef node* Tree;
---------------------------------------------------
Hỏi hàm dưới đây thực hiện chức năng gì ?
int function(Tree a) {
if (a == NULL) return 0;
if (a->left == NULL || a->right == NULL)
return function(a->left) + function(a->right);
return 1 + function(a->left) + function(a->right);
}
a. Đếm số lượng nút có 1 con trên cây nhị phân
b. Tổng giá trị của các nút có 1 con trên cây nhị phân
c. Đếm số lượng nút lá trên cây nhị phân
d. Đếm số lượng nút có đầy đủ 2 con trên cây nhị phân

Câu 15: Cho đồ thị sau:


g f e

a b c d
Hãy liệt kê các đỉnh có bậc bằng 4 :
a. b,c,e,g
b. a,c,f,g
c. a,b,e,f
d. c,d,e,g

Câu 16: Phương pháp băm kép (double hashing method) có tính chất nào dưới đây ?
a. Dùng hai hàm băm khác nhau
b. Luôn phải sử dụng phương pháp dò tuyến tính để xử lý đụng độ
c. Luôn phải sử dụng phương pháp dò bậc hai để xử lý đụng độ
d. Dùng ít nhất 1 hàm logarit

Câu 17: Hàm mô tả sắp xếp nổi bọt (Bubble Sort) trên mảng a có n phần tử
void BubbleSort(int a[], int n) {
for (int i = 0; i < n - 1; i++)
/*---*/
if (a[j] < a[j - 1]) {
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
Lệnh nào sau đây sẽ được thay thế dòng /*---*/ để trở thành hàm sắp xếp nổi bọt hoàn chỉnh ?
a. for (int j = n - 1; j > i; j--)
b. for (int j = n - 1; j > i; j++)
c. for (int j = n; j < i; j--)
d. Không có dòng lệnh nào phù hợp, không cần thêm vào thuật toán vẫn chạy đúng

Câu 18: Các thuật toán nào dưới đây phải có đệ quy ?
a. quay lui, chia để trị
b. quay lui, quy hoạch động
c. tham lam, chia để trị
d. quy hoạch động, tham lam

Câu 19: Cho đồ thị sau:


b 5 d
2 2
a 1 z
2 4
3
c 5 e
Đường đi ngắn nhất từ a đến z có độ dài là :
a. 11
b. 7
c. 9
d. 5

Câu 20: Đối với thuật toán sắp xếp chon trực tiếp (Selection Sort) cho mảng M có các phần tử sau (gồm 10 phần tử):
16 60 2 25 15 45 5 30 33 20
Cần thực hiện ……. chọn lựa phần tử nhỏ nhất để sắp xếp mảng M có thứ tự tăng dần.
a. 7 lần
b. 8 lần
c. 9 lần
d. 10 lần

Câu 21: Xóa nút có giá trị 10 trên cây nhị phân thì nút thế mạng có giá trị nào sau đây?

a. 8 b. 3 c. 14 d. 13

Câu 22: Giá trị m nào là tốt nhất khi sử dụng bảng băm theo phương pháp chia?
a. Số nguyên tố b. Số chẳn
c. 2^p – 1 d. 2^p

Câu 23: Nếu G = (V,E) là một đồ thị vô hướng thì :


a. Số đỉnh bậc lẻ phải là một số lẻ
b. Tổng bậc của các đỉnh phải là một số lẻ
c. Số đỉnh bậc chẵn phải là một số chẵn
d. Số đỉnh bậc lẻ phải là một số chẵn

Câu 24: Cho dãy số : 3 1 6 0 5 4 8 2 9 7 và các bước sắp xếp sau:


Bước 1: 1 3 6 0 5 4 8 2 9 7
Bước 2: 1 3 6 0 5 4 8 2 9 7
Bước 3: 1 3 6 0 5 4 8 2 9 7
Bước 4: 0 1 3 5 6 4 8 2 9 7
Bước 5: 0 1 3 5 6 4 8 2 9 7
Bước 6: 0 1 3 5 6 2 4 8 9 7
Bước 7: 0 1 3 5 6 2 4 8 7 9
Bước 8: 0 1 3 5 6 2 4 7 8 9
Bước 9: 0 1 2 3 4 5 6 7 8 9
Các bước trên dựa theo giải thuật sắp xếp nào?
a. Select sort b. Quick sort
c. Merge sort d. Insert sort

Câu 25: Mỗi nút trong cây có :


a. tối đa 2 nút con
b. nhiều nút con
c. tối đa 1 nút con
d. tối đa 3 nút con

Câu 26: Tìm cây khung nhỏ nhất của đồ thị sau:
a. af, fb, da, de, ca
b. fa, bc, da, cd, ae
c. fb, af, ac, de, dc
d. ca, ab, ce, fa, de

Câu 27: Kỹ thuật Separate Chaining (Nối kết trực tiếp) được sử dụng trong bảng băm, dùng kiểu dữ liệu nào sau đây ?
a. Hàng đợi (queue)
b. Danh sách liên kết (linked list)
c. Ngăn xếp (stack)
d. Đồ thị (graph)

Câu 28: Trong một chương trình có 3 bước thực hiện, mà thời gian thực hiện từng bước lần lượt là O(n^2), O(n^3) và
O(nlogn). Cho biết thời gian thực hiện của chương trình là bao nhiêu trong các phương án sau ?
a. O(n^2) + O(n^3) + O(nlogn)
b. O(n^2)
c. O(n^3)
d. O(nlogn)

Câu 29: Dựa vào yếu tố nào sau đây để đánh giá thời gian thực hiện của giải thuật?
a. Tính dừng
b. Thời gian mà thiết bị chạy chương trình
c. Tính xác định
d. Độ phức tạp tính toán của giải thuật

Câu 30: Kết quả khi chạy chương trình dưới đây:
#include<iostream>
using namespace std;
void Function(int a[], int n, int x)
{
int demi = 0;
for (int i = 0; i < n; i++)
{
int demj = 0, p = i, q = a[i];
for (int j = i + 1; j < n && q < x; j++)
{
q += a[j];
p = j;
}
if (q == x)
{
for (int k = i; k <= p; k++)
{
cout << a[k] << " ";
}
demj++;
return;
}
if (demj != 0) demi++;
}
if (demi == 0) cout << "Khong ton tai.";
}

int main()
{
int a[100] = { 2,3,4,2,1,7,6,4 };
Function(a, 8, 14);
}

a. 4217
b. 176
c. 3421
d. 234

You might also like