当前位置:   article > 正文

整型二分,浮点二分法 C++

整型二分,浮点二分法 C++

整型二分是一种利用二分查找的算法,用于在一个已经有序的整型数组中查找某个给定的整数。首先,将数组的首尾两个位置记为left和right,分别表示当前要查询的区间的左右边界。然后,计算中间位置mid,将数组中间位置的值与目标整数比较。

- 如果中间位置的值等于目标整数,那么找到了目标整数,返回位置mid。
- 如果中间位置的值大于目标整数,那么说明目标整数可能在左半部分,将right更新为mid-1,缩小查询区间。
- 如果中间位置的值小于目标整数,那么说明目标整数可能在右半部分,将left更新为mid+1,缩小查询区间。

然后,再次计算中间位置mid,并重复上述步骤,直到找到目标整数,或者区间缩小到无法再分割为止。

一定要注意l,r的范围!!!

  1. int findit(int q)
  2. {
  3. int l = 0, r = n + 1; // 开区间;
  4. while (l + 1 < r) // j+1==r时结束;
  5. {
  6. int mid = l + r >> 1;
  7. if (a[mid] <= q)
  8. {
  9. l = mid;
  10. }
  11. else
  12. {
  13. r = mid;
  14. }
  15. }
  16. return l;
  17. }

浮点二分法(Floating Point Binary Search)是一种用于在浮点数上进行二分查找的方法。相比于整数的二分法,浮点二分法需要处理浮点数的精度和舍入误差。

浮点二分法的基本思想是通过将区间不断地二分,来逐步缩小查找范围,直到找到目标值或确定目标值不存在。

具体的步骤如下:

1. 初始化左边界L和右边界R,使得目标值在[L, R]之间。
2. 进行二分,计算中间值M = (L + R) / 2。
3. 比较M与目标值的大小关系:
   - 如果M等于目标值,那么找到了目标值,返回M。
   - 如果M小于目标值,那么将L设为M,继续二分。
   - 如果M大于目标值,那么将R设为M,继续二分。
4. 重复步骤2和3,直到找到目标值或区间缩小到无法再继续二分为止。

需要注意的是,由于浮点数的精度问题,如果要查找的目标值非常接近区间的边界,可能无法准确地找到目标值,而是得到一个非常接近但不完全相等的浮点数。因此,浮点二分法的结果通常需要进行额外的验证。

另外,在实际应用中,可能还需要设置一个终止条件来避免无限循环,例如在已知的精度范围内无法再继续缩小区间。

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define endl "\n"
  4. #define KUI ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
  5. using namespace std;
  6. const int con = 2e5 + 4;
  7. const int mod = 998244353;
  8. int n, m, k;
  9. void take()
  10. {
  11. double x;
  12. cin >> x;
  13. double l = 0, r = x, mid = 0;
  14. while (r - l > 1e-4)
  15. {
  16. mid = (l + r) / 2.0;
  17. if (mid * mid >= x)
  18. {
  19. r = mid;
  20. }
  21. else
  22. {
  23. l = mid;
  24. }
  25. }
  26. cout << l << endl;
  27. }
  28. int main()
  29. {
  30. KUI;
  31. int t1 = 1;
  32. while (t1--)
  33. {
  34. take();
  35. }
  36. return 0;
  37. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/1010583
推荐阅读
相关标签
  

闽ICP备14008679号