Thuật toán tìm kiếm nhị phân (upper_bound trong C++)


đã đăng vào 12 tháng 6 năm 2023, 7:53 p.m.

Hàm upper_bound() trong C++ được sử dụng để trả về phần tử kế tiếp mà lớn hơn giá trị cần tìm. Nếu không tìm thấy sẽ trả về vị trí cuối cùng+1 của mảng. Độ phức tạp hàm upper_bound()O(logn), n là số lượng phần tử trong mảng.

Ví dụ:

  • Mảng [10, 20, 30, 30, 30, 40, 50], Giá trị cần tìm 30. Thì hàm upper_bound sẽ trả về vị trí 5.
  • Mảng [10, 20, 30, 30, 30, 40, 50], Giá trị cần tìm 35. Thì hàm upper_bound sẽ trả về vị trí 5.
  • Mảng [10, 20, 30, 30, 30, 40, 50], Giá trị cần tìm 55. Thì hàm upper_bound sẽ trả về vị trí 7 (7 = vị trí cuối cùng + 1), có nghĩa là phần tử 55 không tồn tại trong mảng.
#include <bits/stdc++.h>
using namespace std;
int main()
{
    // Input vector
    vector<int> v{ 10, 20, 30, 30, 30, 40, 50 };

    auto pos_30 = upper_bound(v.begin(), v.end(), 30);
    auto pos_35 = upper_bound(v.begin(), v.end(), 35);
    auto pos_55 = upper_bound(v.begin(), v.end(), 55);

    cout << "Phan tu 30 nam o vi tri: " << (pos_30 - v.begin()) << endl; // 5
    cout << "Phan tu 35 nam o vi tri: " << (pos_35 - v.begin()) << endl; // 5
    cout << "Phan tu 55 nam o vi tri: " << (pos_55 - v.begin());         // 7

    return 0;
}

Nhận xét

Không có ý kiến tại thời điểm này.