Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Array Bisection Algorithm


อัลกอริทึมแบบแบ่งครึ่งใช้เพื่อค้นหาตำแหน่งในรายการ ซึ่งสามารถแทรกข้อมูลเพื่อจัดเรียงรายการได้ Python มีโมดูลที่เรียกว่า bisect . เมื่อใช้โมดูลนี้ เราสามารถใช้อัลกอริทึมแบบแบ่งครึ่งได้

ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −

import bisect

มีการดำเนินการที่เกี่ยวข้องกับการแบ่งเป็นสองส่วน เหล่านี้คือ −

วิธี bisect.bisect(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

วิธีนี้ใช้เพื่อค้นหาตำแหน่งในรายการที่เรียงลำดับ ซึ่งหมายเลขสามารถวางและรายการยังคงเรียงลำดับ หากมีองค์ประกอบอยู่แล้ว องค์ประกอบจะส่งคืนตำแหน่งที่ถูกต้องที่สุด ซึ่งสามารถแทรกตัวเลขได้

วิธีการ bisect.bisect_left(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

วิธีนี้เหมือนกับวิธี bisect() ข้อแตกต่างเพียงอย่างเดียวคือ หากมีรายการอยู่แล้ว วิธีนี้จะคืนค่าตำแหน่งด้านซ้ายสุดเพื่อแทรกข้อมูล

วิธีการ bisect.bisect_right(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

วิธีนี้เหมือนกับวิธี bisect() โดยสิ้นเชิง

วิธี bisect.insort(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

วิธีนี้ใช้เพื่อรับรายการที่จัดเรียงหลังจากแทรกองค์ประกอบในตำแหน่งที่ถูกต้อง หากมีองค์ประกอบอยู่แล้ว องค์ประกอบจะแทรกที่ตำแหน่งขวาสุดเพื่อจัดเรียงรายการ

วิธี bisect.insort_left(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

เมธอดนี้เหมือนกับวิธี insort() ข้อแตกต่างเพียงอย่างเดียวคือ หากมีองค์ประกอบอยู่แล้ว องค์ประกอบจะแทรกที่ตำแหน่งซ้ายสุดเพื่อจัดเรียงรายการ

วิธีการ bisect.insort_right(รายการ องค์ประกอบ เริ่มต้น สิ้นสุด)

เมธอดนี้เหมือนกับเมธอด insort()

โค้ดตัวอย่าง

import bisect
my_list = [11, 25, 36, 47, 56, 69, 69, 69, 78, 78, 91, 102, 120]
print('Correct Location to insert 53 is: ' + str(bisect.bisect(my_list, 53, 0, len(my_list))))
print('Correct right Location to insert 69 is: ' + str(bisect.bisect_right(my_list, 69, 0, len(my_list))))
print('Correct left Location to insert 69 is: ' + str(bisect.bisect_left(my_list, 69, 0, len(my_list))))
bisect.insort(my_list, 59, 0, len(my_list))
print(my_list)
bisect.insort_left(my_list, 78, 0, len(my_list))
print(my_list)

ผลลัพธ์

Correct Location to insert 53 is: 4
Correct right Location to insert 69 is: 8
Correct left Location to insert 69 is: 5
[11, 25, 36, 47, 56, 59, 69, 69, 69, 78, 78, 91, 102, 120]
[11, 25, 36, 47, 56, 59, 69, 69, 69, 78, 78, 78, 91, 102, 120]