2017-10-16 5 views
0

목록의 정렬 된 목록에서 이진 검색을하는 방법은 Python 3에 있습니까?
의 나는리스트의 목록을 가정 해 봅시다 : 나는 함께 내부 목록에 3D 요소하여 분류 한Python - 목록의 정렬 된 목록에서 이진 검색

list = [['A', 'B', 3], ['C', 'D', 1], ['E', 'F', 2]] 

:

list = sorted(list , key=itemgetter(2)) 

지금 목록

[['C', 'D', 1], ['E', 'F', 2], ['A', 'B', 3]] 

된다 이제 정렬 목록에서 이진 검색 (O (log (n)) 시간 복잡도)을 사용하여 검색 할 수 있습니다. 내부 목록의 요소를 사용하여 정렬을 완료 했습니까? Like

findBy(list, index_of_inner_list, value_of_inner_list_to_find) 

외부 목록이 큽니다. 내부 목록에는 len50이 있습니다. 내부 목록과 관련된 조건에 따라 외부 목록에서 일부 요소를 추출하기 위해 많은 쿼리를 작성해야합니다. 나는 bisect에 대해 생각하고 있었지만 내부 배열은 문제가 될 것이라고 생각합니다.

+1

읽어 보셨습니까? https://stackoverflow.com/questions/42146482/using-bisect-on-list-of-tuples-but-compare-using-first-value-only 여기에는 몇 가지 제안 사항이 있습니다. 임의의 키 기능을 사용하는 bisect 구현의 경우. – schwobaseggl

+0

[bisect] (https://docs.python.org/3.6/library/bisect.html#other-examples) 문서 페이지의 마지막 예를 살펴보십시오. 그게 당신이 뭘하려는 것처럼 보이나요? – glibdud

+0

@glibdud이 예제는 OP가 명시 적으로 요구하는 bisect의 'O (log_N)'성능을 파괴하는 키로 새로운 목록을 구성합니다. – schwobaseggl

답변

0

저는 이분법 알고리즘이 간단하다고 생각합니다.

파이썬 문서는

https://docs.python.org/3/library/bisect.html

이 모듈은 각 삽입 후 목록을 정렬 할 필요없이 정렬 된 순서 의 목록을 유지하기위한 지원을 제공한다라고 우리에게 이야기했다. 값 비싼 비교 연산을 사용하는 항목이 긴 목록 인 경우이 방법이 일반적인 방법보다 개 개선 될 수 있습니다. 이 모듈은 bisect 이라고 부릅니다. 기본 bisection 알고리즘을 사용하기 때문입니다. 소스 코드는 알고리즘의 작동 예제로 가장 유용 할 수 있습니다 ( 경계 조건이 이미 맞습니다!).

+0

이것이 어떻게 질문과 관련되는지 보여줄 수 있습니까? 특히 기본 정렬 방법이 아닌 다른 방법으로 요소를 정렬합니까? – glibdud

관련 문제