Chọn một trong hai ngôn ngữ Python hoặc C++ để tìm hiểu một hàm cho dưới đây:
Hàm viết bằng ngôn ngữ Python:
def find(x, a, n):
found = False
i = 0
while (i<n) and not found:
if a[i] == x:
found = True
i = i + 1
return foundHàm viết bằng ngôn ngữ C++:
bool find(int x, int a[], int n) {
bool found = false;
int i = 0;
while (i<n && !found) {
if (a[i] == x)
found = true;
i = i + 1; }
return found; }Một số bạn học sinh nhận xét về hàm trên như sau:
- a)Sai
Hàm thể hiện một thuật toán đệ quy.
- b)Đúng
Các thao tác với mảng
atrong hàm không phải là thao tác trên kiểu dữ liệu ngăn xếp. - c)Sai
Thuật toán của hàm có độ phức tạp thời gian là hằng số, kí hiệu là O(1).
- d)Đúng
Nếu mảng
a = {2, 6, 3, 8}vàx = 9thì hàm trả về giá trị logic sai.
Lời giải
a) Sai: hàm không tự gọi lại chính nó; đây là thuật toán tìm kiếm tuần tự dùng vòng lặp while.
b) Đúng: hàm truy cập phần tử bất kì a[i] theo chỉ số, đó là thao tác trên mảng; ngăn xếp chỉ cho thêm và lấy phần tử ở đỉnh.
c) Sai: trong trường hợp xấu nhất (không tìm thấy x), vòng lặp chạy lần nên độ phức tạp thời gian là , không phải .
d) Đúng: 9 không có trong mảng {2, 6, 3, 8}, vòng lặp duyệt hết 4 phần tử mà found vẫn là sai, hàm trả về False (false trong C++).