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


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

Hàm lower_bound() trong C++ được sử dụng để trả về phần tử đầu tiên trong mảng mà có giá trị không bé hơn giá trị cần tìm. Có nghĩa là nó sẽ trả về con số nhỏ nhất mà vừa đủ lớn hơn hoặc bằng con số cần tìm. Nếu trong mảng có nhiều phần tử bằng giá trị cần tìm sẽ trả về phần tử đầu tiên của giá trị đó.

Ví dụ:

  • Mảng [10, 20, 30, 40, 50], Giá trị cần tìm 30. Thì hàm lower_bound sẽ trả về vị trí 2.
  • Mảng [10, 20, 30, 40, 50], Giá trị cần tìm 35. Thì hàm lower_bound sẽ trả về vị trí 3.
  • Mảng [10, 20, 30, 40, 50], Giá trị cần tìm 55. Thì hàm lower_bound sẽ trả về vị trí 5 (5 > vị trí cuối cùng), 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 = lower_bound(v.begin(), v.end(), 30);
    auto pos_35 = lower_bound(v.begin(), v.end(), 35);
    auto pos_55 = lower_bound(v.begin(), v.end(), 55);

    cout << "Phan tu 30 nam o vi tri: " << (pos_30 - v.begin()) << endl; // 2
    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.