Font size
WorksheetsUntitled Quiz
Total questions: 90
Worksheet time: 45mins
Cấu trúc dữ liệu là gì?
Cấu trúc dữ liệu là cách tổ chức, lưu trữ và quản lý dữ liệu trong bộ nhớ máy tính nhằm tối ưu việc truy xuất, cập nhật và xử lý dữ liệu.
Cấu trúc dữ liệu là các thiết bị phần cứng dùng để lưu trữ dữ liệu trong máy tính.
Cấu trúc dữ liệu là ngôn ngữ lập trình dùng để viết chương trình máy tính.
Cấu trúc dữ liệu là tập hợp các câu lệnh điều khiển luồng chương trình.
Thuật toán là gì?
Là một tập hợp hữu hạn các bước rõ ràng, xác định và có thứ tự, dùng để giải quyết một bài toán hoặc thực hiện một nhiệm vụ cụ thể, biến dữ liệu đầu vào thành kết quả đầu ra.
Là một chương trình máy tính được viết bằng ngôn ngữ lập trình.
Là thiết bị phần cứng dùng để xử lý dữ liệu.
Là cách tổ chức dữ liệu trong bộ nhớ máy tính.
Tại sao thuật toán cần phải hữu hạn?
Vì thuật toán cần đảm bảo quá trình thực hiện sẽ kết thúc, cho ra kết quả xác định, có thể triển khai trên máy tính và tránh vòng lặp vô hạn gây treo chương trình.
Vì thuật toán phải chạy càng lâu càng tốt để xử lý nhiều dữ liệu.
Vì máy tính chỉ xử lý được số lượng bước vô hạn.
Vì thuật toán không cần kết quả đầu ra.
Mô tả các hoạt động và ứng dụng của thuật toán tìm kiếm tuần tự là gì?
So sánh giá trị cần tìm với từng phần tử từ đầu đến cuối danh sách; nếu tìm thấy thì kết thúc. Thuật toán thường dùng cho mảng chưa sắp xếp, dữ liệu nhỏ và các bài toán đơn giản.
Chia mảng thành hai phần bằng nhau rồi tìm kiếm dệ quy trong mỗi phần.
Sắp xếp dữ liệu trước khi tìm kiếm để tăng tốc độ xử lý.
Chỉ áp dụng cho các mảng đã được sắp xếp tăng dần.
Khi không tìm thấy phần tử cần tìm, thuật toán tìm kiếm tuyến tính trả về kết quả gì?
Trả về một giá trị đặc biệt (thường là −1 ) để biểu thị rằng phần tử không tồn tại trong tập dữ liệu, giúp phân biệt với các chỉ số hợp lệ.
Trả về phần tử cuối cùng của mảng.
Trả về giá trị 0 .
Tự động thêm phần tử cần tìm vào mảng.
Các trường hợp tốt nhất, xấu nhất và trung bình trong lý thuyết độ phức tạp thuật toán là gì?
Trường hợp tốt nhất: thuật toán chạy nhanh nhất, ít bước nhất. Trường hợp xấu nhất: thuật toán chạy lâu nhất, nhiều bước nhất. Trường hợp trung bình: thời gian chạy kỳ vọng trung bình của thuật toán.
Tốt nhất: dữ liệu lớn nhất. Xấu nhất: dữ liệu nhỏ nhất. Trung bình: dữ liệu ngẫu nhiên.
Tốt nhất: luôn chạy trong thời gian hằng số. Xấu nhất: không bao giờ kết thúc. Trung bình: không xác định.
Chỉ tồn tại trường hợp xấu nhất; không có trường hợp tốt nhất và trung bình.
Thuật toán được coi là một phương pháp giải quyết vấn đề vì lý do nào sau đây?
Vì thuật toán cung cấp một quy trình rõ ràng, có hệ thống và hữu hạn để biến dữ liệu đầu vào thành kết quả mong muốn.
Vì thuật toán luôn chạy nhanh nhất.
Vì thuật toán không cần dữ liệu đầu vào.
Vì thuật toán chỉ dùng cho máy tính mạnh.
Đặc điểm nào sau đây thể hiện rõ khả năng giải quyết vấn đề của thuật toán?
Có tính xác định, tuần tự, đảm bảo kết thúc và có thể áp dụng cho nhiều trường hợp.
Không cần kết thúc.
Phụ thuộc vào máy tính.
Chỉ áp dụng cho một trường hợp duy nhất.
Mối quan hệ giữa độ phức tạp thời gian và độ phức tạp không gian của thuật toán là gì?
Thường tồn tại sự đánh đổi giữa thời gian chạy và lượng bộ nhớ sử dụng.
Luôn giống nhau.
Không liên quan gì đến nhau.
Chỉ xét một trong hai.
Ví dụ nào sau đây thể hiện rõ việc đánh đổi không gian để cải thiện thời gian?
Sử dụng bảng băm (Hash Table) để đạt thời gian tìm kiếm trung bình O(1) nhưng tốn bộ nhớ O(n) .
Tìm kiếm tuyến tính trong mảng.
Bubble Sort.
Insertion Sort.
Vì sao tính đúng đắn và chính xác là yếu tố quan trọng nhất của thuật toán?
Vì thuật toán cho kết quả sai thì dù nhanh hay tối ưu đến đâu cũng vô nghĩa.
Vì giúp code ngắn hơn.
Vì giúp tiết kiệm bộ nhớ.
Vì dễ lập trình hơn.
Thứ tự ưu tiên đúng trong thiết kế và đánh giá thuật toán là gì?
Đúng → Chính xác → Hiệu quả → Tối ưu
Tối ưu → Đúng → Hiệu quả
Nhanh → Ít bộ nhớ → Đúng
Hiệu quả → Tối ưu → Đúng
Nhược điểm chính của việc biểu diễn thuật toán bằng ngôn ngữ tự nhiên là gì?
Dễ mơ hồ, khó kiểm tra tính chính xác và không thể thực thi trực tiếp.
Khó đọc.
Phụ thuộc ngôn ngữ lập trình.
Không mô tả được thuật toán.
Cách biểu diễn thuật toán nào được sử dụng phổ biến nhất trong giảng dạy và học thuật?
Giả mã (Pseudocode) vì rõ ràng, logic và dễ chuyển sang code
Ngôn ngữ tự nhiên
Lưu đồ
Ngôn ngữ lập trình
Vì sao không thể kết luận thuật toán B tốt hơn A chỉ dựa vào thời gian chạy 0,9 ms và 1,41 ms?
Vì thời gian chạy phụ thuộc vào dữ liệu đầu vào, môi trường và độ phức tạp thuật toán.
Vì mili giây không chính xác.
Vì thuật toán A luôn tốt hơn.
Vì thuật toán B chậm hơn.
Độ phức tạp O(1) có ý nghĩa gì trong thực tế?
Thời gian thực thi không phụ thuộc vào kích thước dữ liệu đầu vào.
Chỉ áp dụng cho dữ liệu nhỏ.
Luôn dùng nhiều bộ nhớ.
Chỉ dùng cho sắp xếp.
Thuật toán nào sau đây có độ phức tạp O(log2n) ?
Thuật toán tìm kiếm nhị phân
Tìm kiếm tuyến tính
Bubble Sort
Insertion Sort
Độ phức tạp O(n) được hiểu như thế nào?
Thời gian thực thi tăng tuyến tính theo số phần tử đầu vào
Thời gian tăng theo cấp số nhân
Không phụ thuộc vào dữ liệu
Giảm một nửa sau mỗi bước
Đặc điểm nào đúng với thuật toán có độ phức tạp O(n2) ?
Có hai vòng lặp lồng nhau, số bước xử lý xấp xỉ n×n
Chỉ có một vòng lặp
Luôn chạy nhanh
Không phụ thuộc dữ liệu
Vì sao thuật toán tìm kiếm nhị phân hiệu quả hơn tìm kiếm tuyến tính?
Vì mỗi bước loại bỏ được một nửa dữ liệu cần tìm
Vì không cần sắp xếp dữ liệu
Vì dùng nhiều bộ nhớ
Vì luôn tìm thấy kết quả
Ưu điểm chính của quy hoạch động là gì?
Lưu và tái sử dụng kết quả bài toán con để tránh tính toán lặp
Không dùng bộ nhớ
Không dùng đệ quy
Không cần điều kiện dừng
Nhược điểm lớn nhất của thuật toán vét cạn là gì?
Độ phức tạp rất lớn, không phù hợp với dữ liệu lớn
Khó cài đặt
Không tìm được lời giải
Không chính xác
Điều kiện quan trọng nhất để thuật toán đệ quy hoạt động chính xác là gì?
Có điều kiện dừng rõ ràng
Có nhiều vòng lặp
Không dùng bộ nhớ
Không gọi lại chính nó
Tối ưu hóa thuật toán nhằm mục tiêu nào sau đây?
Giải cùng một bài toán nhưng hiệu quả hơn về thời gian và/hoặc bộ nhớ
Làm thuật toán phức tạp hơn
Làm code dài hơn
Chỉ giảm bộ nhớ
Vì sao Quick Sort thường hiệu quả hơn Bubble Sort trong thực tế?
Vì Quick Sort có độ phức tạp trung bình O(nlogn)
Vì Bubble Sort không sắp xếp được
Vì Quick Sort không dùng đệ quy
Vì Bubble Sort luôn chậm
Vì sao độ phức tạp của tìm kiếm tuyến tính là O(n) ?
Vì trong trường hợp xấu nhất phải duyệt qua toàn bộ n phần tử
Vì luôn chia đôi dữ liệu
Vì dùng đệ quy
Vì cần sắp xếp trước
Vì sao thuật toán Fibonacci đệ quy có độ phức tạp O(2n) ?
Vì mỗi lời gọi sinh ra hai lời gọi con và nhiều giá trị bị tính lặp
Vì không có điều kiện dừng
Vì dùng mảng
Vì không dùng bộ nhớ
Chiến lược “chia để trị” được mô tả đúng nhất như thế nào?
Chia bài toán thành các bài toán con, giải độc lập và kết hợp kết quả
Giải trực tiếp bài toán lớn
Thử tất cả các khả năng
Không dùng đệ quy
Trường hợp xấu nhất của tìm kiếm tuyến tính xảy ra khi nào?
Khi phần tử không tồn tại hoặc nằm ở vị trí cuối cùng của mảng
Khi phần tử ở đầu mảng
Khi mảng đã sắp xếp
Khi dữ liệu nhỏ
Vì sao việc chọn pivot nhỏ nhất trong Quick Sort dẫn đến độ phức tạp cao nhất?
Vì làm mảng con bị chia mất cân bằng, phá vỡ lợi thế chia để trị
Vì làm thuật toán dừng sớm
Vì giảm số phép so sánh
Vì tăng bộ nhớ sử dụng
Thuật toán sắp xếp trộn (Merge Sort) hoạt động như thế nào và vì sao gọi là “trộn”?
Chia mảng thành các mảng con, sắp xếp rồi trộn các mảng con đã sắp xếp
So sánh từng cặp phần tử liền kề
Chọn phần tử nhỏ nhất đưa lên đầu
Chèn phần tử vào vị trí thích hợp
Thuật toán sắp xếp Shell hoạt động dựa trên nguyên lý nào và thuộc loại sắp xếp gì?
Sắp xếp chèn với khoảng cách giảm dần, thuộc sắp xếp nội bộ
Sắp xếp đổi chỗ trực tiếp
Sắp xếp dựa trên heap
Sắp xếp ngoài
Phân vùng trong Quick Sort có vai trò gì?
Chia mảng thành hai phần nhỏ hơn và lớn hơn pivot
Gộp các mảng con
So sánh các phần tử kề nhau
Xây dựng heap
Kết quả cuối cùng của Heap Sort là gì?
Mảng được sắp tăng hoặc giảm hoàn chỉnh
Mảng chỉ sắp xếp một phần
Mảng giữ nguyên thứ tự ban đầu
Mảng đảo ngược
Độ phức tạp trung bình của Selection Sort là gì?
O(n2)
O(nlogn)
O(n)
O(logn)
Nhược điểm chính của Selection Sort là gì?
Thời gian chạy tốn với dữ liệu lớn
Tốn nhiều bộ nhớ
Khó cài đặt
Không xác định kết quả
Thuật toán sắp xếp ngoài là gì?
Sắp xếp dữ liệu không đủ chứa trong bộ nhớ chính
Sắp xếp dữ liệu trong RAM
Sắp xếp mảng nhỏ
Sắp xếp tại chỗ
Khi nào nên dùng sắp xếp ngoài?
Khi dữ liệu rất lớn vượt quá bộ nhớ
Khi dữ liệu nhỏ
Khi mảng đã sắp xếp
Khi cần tốc độ cao
Heap Sort dựa trên cấu trúc dữ liệu nào?
Heap
Stack
Queue
List
Trong Heap Sort, phần tử lớn nhất nằm ở đâu?
Ở gốc heap
Ở lá trái
Ở lá phải
Ở giữa mảng
Vì sao tìm kiếm tuyến tính không luôn nhanh hơn tìm kiếm nhị phân?
Vì phải duyệt từng phần tử
Vì cần mảng sắp xếp
Vì dùng đệ quy
Vì dùng nhiều bộ nhớ
Yếu tố giúp tìm kiếm nhị phân nhanh hơn là gì?
Giảm không gian tìm kiếm sau mỗi bước
Duyệt tuần tự
So sánh tất cả phần tử
Không cần sắp xếp
Nhược điểm của tìm kiếm tuyến tính với dữ liệu lớn là gì?
Thời gian chạy tăng tuyến tính
Không tìm được kết quả
Tốn nhiều bộ nhớ
Khó cài đặt
Khi nào nên dùng tìm kiếm tuyến tính đệ quy?
Khi cần minh họa đệ quy, dữ liệu nhỏ
Khi dữ liệu lớn
Khi cần tốc độ cao
Khi mảng đã sắp xếp
Trong dãy 1,2,3,6,8,10, số 6 được tìm ở lần gọi thứ mấy (đệ quy)?
Lần gọi thứ 4
Lần gọi thứ 2
Lần gọi thứ 6
Lần gọi thứ 1
Khi nào tìm kiếm tuyến tính đệ quy kết luận 17 không tồn tại?
Sau lần gọi cuối cùng
Sau lần gọi đầu
Ngay khi so sánh lần 2
Không bao giờ
Trường hợp tốt nhất của tìm kiếm tuyến tính đệ quy là gì?
O(1)
O(n)
O(logn)
O(n2)
Với danh sách không sắp xếp, thuật toán nào áp dụng được?
Tìm kiếm tuyến tính
Tìm kiếm nhị phân
Ưu điểm của đệ quy so với lặp là gì?
Code ngắn gọn, dễ hiểu
Chạy nhanh hơn
Ít dùng bộ nhớ
Không cần điều kiện dừng
Vì sao tìm kiếm tuyến tính kém hiệu quả với dữ liệu lớn?
Phải kiểm tra từng phần tử
Cần sắp xếp mảng
Dùng đệ quy
Dùng nhiều biến
Khi nào tìm kiếm tuyến tính là lựa chọn phù hợp?
Dữ liệu nhỏ, chưa sắp xếp
Dữ liệu rất lớn
Yêu cầu tốc độ cao
Mảng đã sắp xếp
Sau khi xác định phạm vi, tìm kiếm nhảy hoạt động thế nào?
Tìm tuyến tính trong phạm vi đó
Tìm nhị phân
Tìm toàn bộ mảng
Sắp xếp lại mảng
Tìm kiếm nội suy nhanh khi nào?
Khi dữ liệu phân bố đều
Khi dữ liệu ngẫu nhiên
Khi mảng nhỏ
Khi không sắp xếp
Vì sao best case của tìm kiếm tuyến tính là O(1) ?
Phần tử nằm ở vị trí đầu
Phần tử ở cuối
Phần tử không tồn tại
Mảng rộng
Worst case của tìm kiếm tuyến tính là gì?
O(n)
O(1)
O(logn)
O(n2)
Tìm kiếm tuyến tính đệ quy chậm hơn dạng lặp vì sao?
Tốn chi phí gọi hàm
Duyệt ít phần tử
Không có điều kiện dừng
Phải sắp xếp mảng
Về bộ nhớ, tìm kiếm tuyến tính đệ quy thế nào so với lặp?
Tốn nhiều bộ nhớ hơn
Ít bộ nhớ hơn
Bằng nhau
Không dùng bộ nhớ
Worst case của tìm kiếm tuyến tính đệ quy là gì?
O(n)
O(1)
O(logn)
O(n2)
Thuật toán sắp xếp nào hiệu quả với mảng nhỏ?
Insertion Sort
Merge Sort
Heap Sort
Quick Sort
Merge Sort hoạt động theo nguyên lý nào?
Chia để trị
Tham lam
Quy hoạch động
Vét cạn
Merge Sort bottom-up khác Heap Sort ở điểm nào?
Không dùng đệ quy
Tốn nhiều bộ nhớ hơn
Chậm hơn
Không ổn định
Vì sao Quick Sort thường nhanh?
Phân vùng hiệu quả
Không cần so sánh
Không dùng đệ quy
Luôn O(n)
Ưu điểm chính của Selection Sort là gì?
Ít hoán đổi
Chạy rất nhanh
Ổn định
O(nlogn)
Số lần lặp của Insertion Sort với N phần tử là bao nhiêu?
Phụ thuộc thứ tự dữ liệu
Luôn bằng N
Luôn bằng N2
Không xác định
Bubble Sort giống Insertion Sort ở điểm nào?
So sánh và hoán đổi cục bộ
Dùng heap
Chia để trị
Không so sánh
Trong C, vòng lặp thường dùng cho Insertion Sort là gì?
for và while
do while
switch
goto
Vì sao Insertion Sort hiệu quả với mảng đã sắp xếp?
Ít phép so sánh và dịch chuyển
Không dùng vòng lặp
Không cần bộ nhớ
Không cần điều kiện
Best và worst case của Insertion Sort là gì?
O(n) và O(n2)
O(logn) và O(n)
O(n2) và O(n2)
O(1) và O(n)
Trường hợp xấu nhất của Insertion Sort là khi nào?
Mảng đảo ngược
Mảng đã sắp xếp
Mảng rỗng
Mảng 1 phần tử
Với mảng đã sắp xếp, thuật toán nào hiệu quả nhất?
Insertion Sort
Bubble Sort thường
Selection Sort
Heap Sort
Bubble Sort worst case có độ phức tạp gì?
O(n2)
O(n)
O(logn)
O(1)
Bubble Sort tối ưu hóa mạnh khi nào?
Mảng đã sắp xếp
Mảng đảo ngược
Mảng ngẫu nhiên
Mảng lớn
Thời gian chạy của Heap Sort là gì?
O(nlogn)
O(n2)
O(n)
O(logn)
Khi xóa trong heap cần bao nhiêu mảng?
Một mảng
Hai mảng
Ba mảng
Không cần mảng
Heap Sort dựa trên hàng đợi ưu tiên như thế nào?
Luôn lấy phần tử ưu tiên cao nhất
Lấy ngẫu nhiên
Lấy phần tử đầu
Lấy phần tử cuối
Heap Sort so với các thuật toán khác thế nào?
Không ổn định, O(nlogn)
Ổn định, O(n2)
Rất nhanh với mảng nhỏ
O(n)
Heap Sort có phải in-place không?
Có
Không
Luôn cần mảng phụ
Không xác định
Ưu điểm lớn của Selection Sort là gì?
Ít hoán đổi
Rất nhanh
Ổn định
O(nlogn)
Thuật toán sắp xếp C++ sử dụng là gì?
Introsort
Bubble Sort
Selection Sort
Heap Sort
In-place sorting là gì?
Không dùng bộ nhớ phụ đáng kể
Luôn dùng mảng phụ
Chỉ dùng đệ quy
Chỉ dùng heap
Khi nào nên dùng Selection Sort?
Dữ liệu nhỏ, cần ít hoán đổi
Dữ liệu lớn
Cần tốc độ cao
Mảng đã sắp xếp
Với arr={5,6,7,4,3}, thuật toán nào ít hoán đổi hơn?
Selection Sort
Bubble Sort
Merge Sort
Quick Sort
Với arr={2,3,4,5,6}, Bubble Sort tối ưu cần bao nhiêu vòng?
1
2
5
6
Số đảo ngược trung bình trong mảng N phần tử là gì?
N(N−1)/4
N2
N
log N
Số lần dịch chuyển trong Insertion Sort phụ thuộc vào gì?
Thứ tự ban đầu của mảng
Giá trị phần tử
Kiểu dữ liệu
Kích thước bộ nhớ
Sau lần chèn thứ hai, mảng thay đổi thế nào phụ thuộc vào đâu?
Hai phần tử đầu
Phần tử cuối
Heap
Pivot
Các bước Insertion Sort thực hiện là gì?
Lấy phần tử chèn vào đoạn đã sắp xếp
Chia mảng
Phân vùng
Trộn mảng
Số so sánh trung bình khi chèn phần tử thứ 7 là gì?
Khoảng n/2
n
log n
1
Với arr={3,4,6,5}, Bubble Sort cần bao nhiêu vòng?
2
1
3
4
Sau build heap, mảng có đặc điểm gì?
Thỏa mãn tính chất heap
Đã sắp xếp hoàn toàn
Đảo ngược
Không thay đổi
