Hướng dẫn upper bound binary search python - Python tìm kiếm nhị phân giới hạn trên

Đây là mã cho tìm kiếm nhị phân, tự hỏi nếu không có giá trị khớp, câu hỏi là giới hạn trên nên được định vị ở mức nhỏ hay nhỏ+1? Và giới hạn dưới nên được đặt ở nhỏ hay nhỏ-1, đúng không? Cảm ơn.

def binary_search(my_list, key):
    assert my_list == sorted(my_list)

    large = len(my_list) -1
    small = 0

    while (small <= large):
        mid = (small + large) // 2 )
        # print small, mid, large, " - ", my_list[mid], "~", key
        if my_list[mid] < key:
            small = mid + 1
        elif my_list[mid] > key:
            large = mid - 1
        else:
            return mid

    raise ValueError

Đã hỏi ngày 7 tháng 10 năm 2015 lúc 21:00Oct 7, 2015 at 21:00

Lin Malin MaLin Ma

9.25930 huy hiệu vàng99 Huy hiệu bạc171 Huy hiệu đồng30 gold badges99 silver badges171 bronze badges

2

@Paul là gần, nó sẽ trả về mid+1 cho giá trị trên. Thay vì tăng một ngoại lệ, đây là mã trong Python sẽ trả về các giá trị thấp hơn và trên:

value = my_list[mid]
lower = mid if value < key else mid-1
upper = mid if value > key else mid+1
return (lower, upper)

Đây là một câu trả lời thậm chí đơn giản hơn:

return (small-1, small)

Bởi vì small kết thúc trên chỉ số của ________ 9 khi bạn đang tìm kiếm nó, giới hạn dưới là ____10 và giới hạn trên là small.

Đã trả lời ngày 7 tháng 10 năm 2015 lúc 23:23Oct 7, 2015 at 23:23

Hướng dẫn upper bound binary search python - Python tìm kiếm nhị phân giới hạn trên

Brent Washburnbrent WashburneBrent Washburne

12.4K4 Huy hiệu vàng58 Huy hiệu bạc78 Huy hiệu đồng4 gold badges58 silver badges78 bronze badges

4

Điều đó không đơn giản. Bạn sẽ phải tính đến thực tế là thuật toán có thể gần đúng vị trí của mục được tìm kiếm từ bên trái (giá trị thấp hơn) hoặc bên phải (giá trị cao hơn), không thể xác định được sau khi thoát khỏi vòng lặp ____ 12. Do đó, bạn sẽ phải kiểm tra xem giá trị tại

value = my_list[mid]
lower = mid if value < key else mid-1
upper = mid if value > key else mid+1
return (lower, upper)
3 nhỏ hơn hay lớn hơn chìa khóa:that simple. You'll have to take account of the fact, that the algorithm might either approximate the position of the searched item from the left (lower values) or right (higher values), which can't be determined after exiting the
value = my_list[mid]
lower = mid if value < key else mid-1
upper = mid if value > key else mid+1
return (lower, upper)
2-loop. Thus you'll have to check whether the value at
value = my_list[mid]
lower = mid if value < key else mid-1
upper = mid if value > key else mid+1
return (lower, upper)
3 is smaller or greater than the key:

lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);

Đã trả lời ngày 7 tháng 10 năm 2015 lúc 22:00Oct 7, 2015 at 22:00

Hướng dẫn upper bound binary search python - Python tìm kiếm nhị phân giới hạn trên

PaulpaulPaul

13.4K3 Huy hiệu vàng19 Huy hiệu bạc35 Huy hiệu Đồng3 gold badges19 silver badges35 bronze badges

3

First occurrence of 4 is present at 2
5
return (small-1, small)
2
First occurrence of 4 is present at 2
7
First occurrence of 4 is present at 2
4
First occurrence of 4 is present at 2
9
Largest value smaller than  7  is at index  3
0
First occurrence of 4 is present at 2
9
Largest value smaller than  7  is at index  3
22.

return (small-1, small)
0mid+15
return (small-1, small)
23mid+17 small5

Vui lòng tham khảo tìm kiếm nhị phân để viết mã tìm kiếm nhị phân của riêng bạn .reference: & nbsp; https: //docs.python.org/3/l Library/bisect.html 

  • Có giới hạn trên có sử dụng tìm kiếm nhị phân không?
  • Các hoạt động chung được thực hiện bằng tìm kiếm nhị phân: Lower_bound. giới hạn trên.
  • First occurrence of 4 is present at 2
    5
    return (small-1, small)
    
    2
    First occurrence of 4 is present at 2
    7
    First occurrence of 4 is present at 2
    4
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    0
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    22.

    return (small-1, small)
    
    0mid+15
    return (small-1, small)
    
    23mid+17 small5

    Vui lòng tham khảo tìm kiếm nhị phân để viết mã tìm kiếm nhị phân của riêng bạn .reference: & nbsp; https: //docs.python.org/3/l Library/bisect.html 

    Có giới hạn trên có sử dụng tìm kiếm nhị phân không?
    Finding first occurrence of an element. 
     

    bisect.bisect_left (a, x, lo = 0, hi = len (a)): trả về điểm chèn ngoài cùng trái của x trong một danh sách được sắp xếp. Hai tham số cuối cùng là tùy chọn, chúng được sử dụng để tìm kiếm trong trình phụ.

    Python3

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    4
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    5
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    6
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    7

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    8
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    9

    return (small-1, small)
    
    0
    return (small-1, small)
    
    1
    return (small-1, small)
    
    2
    return (small-1, small)
    
    3

    return (small-1, small)
    
    0
    return (small-1, small)
    
    5
    return (small-1, small)
    
    6
    return (small-1, small)
    
    2
    return (small-1, small)
    
    8
    return (small-1, small)
    
    9
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    0

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    7

    return (small-1, small)
    
    0
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    First occurrence of 4 is present at 2
    3
    First occurrence of 4 is present at 2
    4

    First occurrence of 4 is present at 2
    5
    return (small-1, small)
    
    2
    First occurrence of 4 is present at 2
    7
    First occurrence of 4 is present at 2
    4
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    0
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    2
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    222

    Largest value smaller than  7  is at index  3
    8
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    0
    Last occurrence of 4 is present at 3
    1
    Largest value smaller than  7  is at index  3
    2
    Last occurrence of 4 is present at 3
    3

    Last occurrence of 4 is present at 3
    4
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    6

    Is

    return (small-1, small)
    
    0mid+15mid+16mid+17

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    return (small-1, small)
    
    0mid+15small3mid+17

    Output:

    First occurrence of 4 is present at 2

    Tìm giá trị lớn nhất nhỏ hơn x. & Nbsp; & nbsp; 
     

    Python3

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    4
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    5
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    6
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    7

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    8
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    9

    return (small-1, small)
    
    0
    return (small-1, small)
    
    1
    return (small-1, small)
    
    2
    return (small-1, small)
    
    3

    return (small-1, small)
    
    0
    return (small-1, small)
    
    5 key8

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    01
    First occurrence of 4 is present at 2
    3
    First occurrence of 4 is present at 2
    4443

    return (small-1, small)
    
    0
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    First occurrence of 4 is present at 2
    3
    First occurrence of 4 is present at 2
    4

    First occurrence of 4 is present at 2
    5
    return (small-1, small)
    
    2
    First occurrence of 4 is present at 2
    7
    First occurrence of 4 is present at 2
    4
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    0
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    2
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    222

    Largest value smaller than  7  is at index  3
    8
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    0
    Last occurrence of 4 is present at 3
    1
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    29
    Last occurrence of 4 is present at 3
    3

    Last occurrence of 4 is present at 3
    4
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    6

    Is

    return (small-1, small)
    
    0mid+15
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    43

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    return (small-1, small)
    
    0mid+15
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    48mid+17
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    50

    Output:

    Largest value smaller than  7  is at index  3

    Tìm kiếm sự xuất hiện ngoài cùng bên phải & nbsp;
     

    bisect.bisect_right (a, x, lo = 0, hi = len (a)) trả về điểm chèn ngoài cùng bên phải của x trong danh sách được sắp xếp a. Hai tham số cuối cùng là tùy chọn, chúng được sử dụng để tìm kiếm trong trình phụ.

    Python3

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    4
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    5
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    6
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    54

    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    8
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    9

    return (small-1, small)
    
    0
    return (small-1, small)
    
    1
    return (small-1, small)
    
    2
    return (small-1, small)
    
    3

    return (small-1, small)
    
    0
    return (small-1, small)
    
    5 key8

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    01
    First occurrence of 4 is present at 2
    3
    First occurrence of 4 is present at 2
    4443

    return (small-1, small)
    
    0
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    5
    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    6
    First occurrence of 4 is present at 2
    3
    First occurrence of 4 is present at 2
    4

    First occurrence of 4 is present at 2
    5
    return (small-1, small)
    
    2
    First occurrence of 4 is present at 2
    7
    First occurrence of 4 is present at 2
    4
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    0
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    2
    First occurrence of 4 is present at 2
    9
    Largest value smaller than  7  is at index  3
    222

    Largest value smaller than  7  is at index  3
    8
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    0
    Last occurrence of 4 is present at 3
    1
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    29
    Last occurrence of 4 is present at 3
    3

    Last occurrence of 4 is present at 3
    4
    return (small-1, small)
    
    2
    Last occurrence of 4 is present at 3
    6

    Is

    return (small-1, small)
    
    0mid+15mid+16mid+17

    lower = (my_list[mid] < key ? my_list[mid] : my_list[mid - 1]);
    upper = (my_list[mid] > key ? my_list[mid] : my_list[mid + 1]);
    
    9
    First occurrence of 4 is present at 2
    0

    return (small-1, small)
    
    0mid+15
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    48mid+17
    value = my_list[mid]
    lower = mid if value < key else mid-1
    upper = mid if value > key else mid+1
    return (lower, upper)
    
    50

    Output:

    Last occurrence of 4 is present at 3

    Tìm kiếm sự xuất hiện ngoài cùng bên phải & nbsp;
    Reference : 
    https://docs.python.org/3/library/bisect.html
     


    Có giới hạn trên có sử dụng tìm kiếm nhị phân không?

    Các hoạt động chung được thực hiện bằng tìm kiếm nhị phân: Lower_bound.giới hạn trên.: lower_bound. upper_bound.

    Giới hạn trên trong Python là gì?

    Giới hạn dưới ban đầu là chỉ số 0 và giới hạn trên ban đầu là chỉ số cuối cùng của chuỗi.the last index of the sequence.

    Có được xây dựng trong tìm kiếm nhị phân trong Python không?

    Khoa học dữ liệu thực tế sử dụng Python Bisect được sử dụng để tìm kiếm nhị phân.Kỹ thuật tìm kiếm nhị phân được sử dụng để tìm các yếu tố trong danh sách được sắp xếp.Bisect là một hàm thư viện.The bisect is used for binary search. The binary search technique is used to find elements in sorted list. The bisect is one library function.

    Làm thế nào để bạn tìm thấy giới hạn trên của một tập hợp dữ liệu?

    Tính giới hạn dưới - (Q1−1,5 × IQR).
    Tính toán giới hạn trên - (Q3+1,5 × IQR).
    Các điểm dữ liệu bên dưới giới hạn dưới hoặc phía trên giới hạn trên được coi là ngoại lệ ..