Professional Documents
Culture Documents
De Tuan 12 My Opinion
De Tuan 12 My Opinion
De Tuan 12 My Opinion
1.Cho bảng băm đánh địa chỉ đóng, dùng danh sách liên kết để lưu trữ chuỗi đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
// Định nghĩa cấu trúc của một nút trong danh sách liên kết
struct Node {
int key;
int data;
struct Node* next;
};
A: hashTable[hashIndex] == NULL
A: hashTable[hashIndex]->next == NULL
B: newNode
B: newNode->next
C : newNode
C: newNode->next
C: NULL
2.Trong Java 8, bảng băm được cài đặt dùng đánh địa chỉ đóng + mảng các cây cân bằng (R-B tree)
để xử lý đụng độ. Ưu điểm của cách này so với việc dùng 1 cây AVL hoặc R-B đơn là gì?
Thời gian tìm kiếm trung bình cỡ O(1) thay vì O(logn)
Tiết kiệm bộ nhớ hơn so với dùng một cây R-B
Nếu số lượng phần tử càng lớn thì thời gian tìm kiếm bằng R-B tree càng tồi hơn bảng
băm
Luôn đảm bảo cận thời gian trong trường hợp tồi nhất trên bảng băm là O(logn)
Có thể duyệt và in ra danh sách theo thứ tự như với cây nhị phân tìm kiếm cân bằng
3.Cho bảng băm đánh địa chỉ đóng, dùng danh sách liên kết để lưu trữ chuỗi đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
// Định nghĩa cấu trúc của một nút trong danh sách liên kết
struct Node {
int key;
int data;
struct Node* next;
};
A: hashTable[hashIndex]
A: hashTable[0]
B: temp->next != NULL
B: temp != NULL
C : NULL
C: 1
C: -1
4.Trong các kỹ thuật sau của đánh địa chỉ mở, đâu là kỹ thuật tránh được việc tạo cụm sơ cấp/thứ
cấp tốt nhất
Dò tuyến tính
Dò bậc hai
Băm kép
Băm lại – rehasing
5.Cho bảng băm đánh địa chỉ mở, dùng phương pháp băm kép để xử lý đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
#define SIZE 10
#define PRIME 7
// Định nghĩa cấu trúc của một phần tử trong bảng băm
struct Node {
int key;
int data;
int isDeleted; // Cờ đánh dấu phần tử đã bị xóa
};
A: hashTable[hashIndex] != NULL
A: hashTable[hashIndex+1] != NULL
B: hashTable[hashIndex]->isDeleted
B: hashTable[hashIndex]->isDeleted==0
C : hashIndex + stepSize
C: hashIndex + stepSize * i
6.So với bảng băm đánh địa chỉ mở thì bảng băm đánh địa chỉ đóng
Tốn bộ nhớ hơn
Có thể lưu trữ số lượng phần tử lớn
Không bị ảnh hưởng nhiều bởi hàm băm
Thời gian tìm kiếm nhanh hơn
Tiết kiệm bộ nhớ hơn
Xóa phần tử đơn giản hơn
Mở rộng bảng đơn giản hơn
Dễ dàng cài đặt hơn
7.Cho hàm tìm đoạn con dài nhất chứa các phần tử không trùng lặp bằng C++ sau
Đâu là khẳng định đúng
return maxLength;
}
Hàm trên chỉ chạy đúng nếu giá trị các phần tử trong khoảng 0-1000
Hàm trên chỉ chạy đúng nếu số lượng các phần tử trong khoảng 0-1000
Độ phức tạp tính toán của hàm trên là O(n)
Độ phức tạp tính toán của hàm trên là O(n^2)
Độ phức tạp tính toán của hàm trên là O(nlogn)
9.Tại sao trong phương pháp đánh địa chỉ mở, ô bị xóa chỉ được đánh dấu chứ không được xóa
trắng
vì sẽ làm đứt gãy chuỗi dò khi tìm kiếm
vì xóa trắng mất thêm thời gian ghi đè
vì chỉ cần đánh dấu cho nhanh, giảm thời gian xóa
không có phương án nào ở trên là đúng
10.Cho bảng băm đánh địa chỉ mở, dùng phương pháp băm kép để xử lý đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
#define SIZE 10
#define PRIME 7
// Định nghĩa cấu trúc của một phần tử trong bảng băm
struct Node {
int key;
int data;
int isDeleted; // Cờ đánh dấu phần tử đã bị xóa
};
// Duyệt qua các vị trí trong bảng băm cho đến khi tìm được phần tử cần xóa hoặc quay lại vị trí
ban đầu
while (A) {
if (B && !hashTable[hashIndex]->isDeleted) {
C; // Đánh dấu phần tử đã bị xóa
return;
}
hashIndex = (hashIndex + stepSize) % SIZE;
if (hashIndex == startIdx) {
break; // Đã duyệt qua tất cả các vị trí
}
}
printf("Key %d not found for deletion!\n", key);
}
A: hashTable[hashIndex] != NULL
A: hashTable[hashIndex+1] != NULL
B: hashTable[hashIndex]->key == key
B: hashTable[hashIndex]->key != key
C : hashTable[hashIndex]->isDeleted = 1
C: hashTable[hashIndex]->isDeleted = 0
11.Bảng băm dùng đánh địa chỉ mở và dò tuyến tính với hàm băm là kích thước bảng băm h=k%10
Khi thêm lần lượt khóa sau vào thì kết quả sẽ là
13.Trong các phương pháp xây dựng hàm băm sau, phương pháp nào phân phối các khóa kém nhất
phương pháp cắt bỏ
phương pháp gấp
chia module
phương pháp nhân
14.Trong phương pháp xử lý đụng độ nào ta ít bị ảnh hưởng bởi hàm băm, tỉ lệ nạp của bảng băm
đánh địa chỉ mở
đánh địa chỉ đóng
băm kép
băm lại
15.Cho đoạn code tìm phần tử có tần số xuất hiện lớn nhất trong dãy dùng C++ sau
cout << "Tần số của phần tử xuất hiện nhiều nhất là: " << maxFrequency << endl;
}
16.Cho bảng băm đánh địa chỉ mở, dùng phương pháp dò tuyến tính để xử lý đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
// Định nghĩa cấu trúc của một phần tử trong bảng băm
struct Node {
int key;
int data;
};
A: hashTable[hashIndex] != NULL
A: hashTable[hashIndex+1] != NULL
B: hashTable[hashIndex]->key == key
B: hashTable[hashIndex].key == key
C : (hashIndex + 1) % SIZE
C: hashIndex + 1
D :DELETED_VALUE
D: -1
D:0
17.Trong phương pháp xử lý đụng độ dùng đánh địa chỉ đóng - chaining, các khóa bị đụng độ có
thể được lưu trữ dùng
danh sách liên kết đơn
mảng kích thước biến đổi
cây tìm kiếm nhị phân cân bằng
mảng cố định phần tử
19.Cho bảng băm đánh địa chỉ mở, dùng phương pháp dò tuyến tính để xử lý đụng độ
Đâu là giá trị phù hợp cần điền vào chỗ trống
// Định nghĩa cấu trúc của một phần tử trong bảng băm
struct Node {
int key;
int data;
};
A: NULL
A: -1
B: (hashTable[hashIndex])->key != key
B: hashTable[hashIndex] != NULL
C : (hashIndex + 1) % SIZE
C: hashIndex + 1
20.Nếu bạn cần 1 cấu trúc dữ liệu hỗ trợ các việc sau
+ Thêm/xóa dễ dàng
+ Tìm kiếm các phần tử theo khóa nhanh nhất có thể
+ Dễ dàng tìm và trả về phần tử lớn nhất/nhỏ nhất trong dãy
+ Số lượng phần tử từ 10000-1tr
CTDL nào phù hợp nhất
Cây nhị phân tìm kiếm cân bằng AVL/R-B Tree
Mảng + tìm kiếm nhị phân
Bảng Băm