Given a search() method in a binary search tree:

4 phương ánCó giải thích
Đề bài
Node search(int x)
   { Node p = root;
      while(p!=null && p.info != x)
        { if(x<p.info)  p = p.left;
           else   p=p.right;
         }
      return(p);
    }

The complexity of this algorithm is:

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "O(log n).". Thân vòng while chỉ làm một việc là so x với p.info rồi chuyển p sang p.left hoặc p.right, tức mỗi lượt đi xuống đúng một tầng và cắt bỏ trọn một cây con, nên số lượt lặp nhiều nhất bằng chiều cao cây. Với cây tìm kiếm nhị phân có chiều cao tối ưu trên n nút thì chiều cao xấp xỉ log2 của n, nên chi phí tìm là O(log n), và đó cũng chính là lý do người ta phải cân bằng cây. Vì vậy "O(n^2)" sai vì không có vòng lặp lồng nhau nào, thân vòng chỉ gồm một phép so sánh và một phép gán; "O(nlog n)" sai vì đó là cấp của các thuật toán sắp xếp dựa trên so sánh phải chạm mọi phần tử, còn ở đây ta chỉ đi một đường từ gốc xuống; riêng "O(n)." chỉ đúng khi cây suy biến thành dạng xương sống, mỗi nút một con và chiều cao bằng số nút, tức trường hợp xấu nhất mà câu hỏi không nêu, nên nó không phải cấp đặc trưng được gán cho phép tìm trên cây tìm kiếm.

Cùng phần 4

Xuất hiện trong 1 bộ đề