고전 정렬 알고리즘python 회고의 네 갈래 찾기 트리 정렬

두 갈래 찾기 트리 정렬


소개


두 갈래 찾기 트리는 질서정연한 두 갈래 나무라고도 하는데, 두 갈래 나무를 정렬하는 것은 빈 나무 또는 아래의 성질을 가진 두 갈래 나무를 가리킨다.
  • 임의의 노드의 왼쪽 트리가 비어 있지 않으면 왼쪽 트리의 모든 결점의 값은 뿌리 결점의 값보다 작다
  • 임의의 노드의 오른쪽 트리가 비어 있지 않으면 오른쪽 트리의 모든 결점의 값이 뿌리 결점의 값보다 크다
  • 임의의 노드의 왼쪽, 오른쪽 나무도 각각 두 갈래로 나무를 찾는다..
  • 키 값이 같은 노드가 없습니다

  • 두 갈래 검색 트리 정렬은 삽입 정렬 클래스에 속합니다. 우리는 검색 트리의 구축, 삽입 (즉 정렬 과정) 과 관련됩니다.
    한 조의 수치에 대해 두 갈래 찾기 트리를 구성하는 동시에 이 조의 수치를 정렬시켰다.최악의 시간 복잡도는 O(n^2)이다.예를 들어 이 그룹의 수치가 이미 작게부터 큰 순서까지 정해져 있다면, 구조된 두 갈래 찾기 트리의 모든 노드에 왼쪽 트리가 없습니다.균형 두 갈래 찾기 트리는 상술한 단점을 극복할 수 있으며 시간 복잡도는 O(nlogn)이다.그러나 트리 정렬의 문제는 CPU Cache의 성능이 좋지 않다는 것이다. 특히 노드가 동적 메모리 분배일 때.정렬된 CPU Cache는 성능이 좋습니다.다른 한편, 트리 정렬은 가장 좋은 증량 정렬 (incrementalsorting) 알고리즘으로 하나의 수치 정렬의 질서성을 유지한다.
    각 결점의 Ci는 해당 결점의 레이어 수입니다.최악의 경우 선후로 삽입된 키워드가 질서정연할 때 구성된 두 갈래 찾기 트리는 단일 트리로 탈바꿈하고 나무의 깊이는 n이며 평균 찾기 길이는 (n+1)/2(순서 찾기와 동일), 가장 좋은 상황은 두 갈래 찾기 트리의 형태와 반절절 찾기 판정 트리가 같고 평균 찾기 길이는 log2(n)와 정비례 O(log2(n)가 된다.

    python 코드

    class empty_node:
        def __init__(self):
            self.flag = 1
    
    
    class binary_tree:
        def __init__(self, value):
            self.data = value
            self.flag = 0
            self.left = empty_node()
            self.right = empty_node()
    
        def insert_node(self, value):
            if value < self.data:
                if self.left.flag:
                    self.left = binary_tree(value)
                else:
                    self.left.insert_node(value) 
            elif value > self.data:
                if self.right.flag:
                    self.right = binary_tree(value)
                else:
                    self.right.insert_node(value)
            
    
    def LDR(bt):
        out_list = [] 
        if bt.left.flag:
            out_list.append(bt.data)
            if not bt.right.flag:
                output(bt.right)
        elif not bt.left.flag:
            output(bt.left)
            out_list.append(bt.data)
            if not bt.right.flag:
                output(bt.right)
        return out_list   
                    
    
    def BTS(list):
        bt = binary_tree(list[0])
        for i in list[1:]:
            bt.insert_node(i)
        return LDR(bt)
    

    좋은 웹페이지 즐겨찾기