Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Bisect - Thuật toán chia đôi mảng (Array bisection algorithm) trong Python


Việc thực hiện các phép toán sắp xếp sau mỗi lần chèn trên danh sách dài có thể tốn kém về mặt thời gian xử lý. Module bisect đảm bảo danh sách tự động giữ thứ tự sắp xếp sau khi chèn. cho mục đích này, nó dùng thuật toán chia đôi (bisection algorithm). Module có các hàm sau:

bisect_left()

Phương thức này xác định điểm chèn cho phần tử cho trước trong danh sách để duy trì thứ tự sắp xếp. Nếu phần tử đã có trong danh sách, điểm chèn sẽ ở trước (bên trái) bất kỳ mục hiện có nào. Giá trị trả về có thể dùng làm tham số đầu tiên cho list.insert().

bisect_right()

Phương thức này tương tự bisect_left(), nhưng trả về điểm chèn đến sau (bên phải) bất kỳ mục hiện có nào của x trong a.

bisect.insort_left()

Phương thức này chèn giá trị cho trước vào a theo thứ tự sắp xếp. Điều này tương đương với a.insert(bisect.bisect_left(a, x, lo, hi), x).

bisect.insort_right()

bisect.insort()

Cả hai phương thức tương tự insort_left(), nhưng chèn giá trị cho trước vào danh sách sau bất kỳ mục hiện có nào có cùng giá trị.

Ví dụ

>>> nums = [45, 21, 34, 87, 56, 12, 5, 98, 30, 63]
>>> nums.sort()
>>> nums
[5, 12, 21, 30, 34, 45, 56, 63, 87, 98]
>>> import bisect
>>> p = bisect.bisect_left(nums, 50)
>>> p
6
>>> nums.insert(p, 50)
>>> nums
[5, 12, 21, 30, 34, 45, 50, 56, 63, 87, 98]
>>> bisect.insort(nums, 29)
>>> nums
[5, 12, 21, 29, 30, 34, 45, 50, 56, 63, 87, 98]