ABOUT ME

전설입니다.

  • 자료구조 트리3
    자료구조와 알고리즘 2020. 10. 27. 14:27

    5.5.6. 파이썬 전체 코드 테스트

    • random 라이브러리 활용
      • random.randint(첫번째 숫자, 마지막 숫자): 첫번째 숫자부터 마지막 숫자 사이에 있는 숫자를 랜덤하게 선택해서 리턴
        • 예: random.randint(0, 99): 0에서 99까지 숫자중 특정 숫자를 랜덤하게 선택해서 리턴해줌
    # 0 ~ 999 숫자 중에서 임의로 100개를 추출해서, 이진 탐색 트리에 입력, 검색, 삭제
    import random
    
    # 0 ~ 999 중, 100 개의 숫자 랜덤 선택
    bst_nums = set() #집합 (중복을 피하기 위해)
    while len(bst_nums) != 100:
        bst_nums.add(random.randint(0, 999))
    # print (bst_nums)
    
    # 선택된 100개의 숫자를 이진 탐색 트리에 입력, 임의로 루트노드는 500을 넣기로 함
    head = Node(500)
    binary_tree = NodeMgmt(head)
    for num in bst_nums:
        binary_tree.insert(num)
        
    # 입력한 100개의 숫자 검색 (검색 기능 확인)
    for num in bst_nums:
        if binary_tree.search(num) == False:
            print ('search failed', num)
    
    # 입력한 100개의 숫자 중 10개의 숫자를 랜덤 선택
    delete_nums = set()
    bst_nums = list(bst_nums)
    while len(delete_nums) != 10:
        delete_nums.add(bst_nums[random.randint(0, 99)])
    
    # 선택한 10개의 숫자를 삭제 (삭제 기능 확인)
    for del_num in delete_nums:
        if binary_tree.delete(del_num) == False:
            print('delete failed', del_num)

    6. 이진 탐색 트리의 시간 복잡도와 단점

    6.1. 시간 복잡도 (탐색시)

    • depth (트리의 높이) 를 h라고 표기한다면, O(h)
    • n개의 노드를 가진다면, =𝑙𝑜𝑔2𝑛h=log2n 에 가까우므로, 시간 복잡도는 𝑂(𝑙𝑜𝑔𝑛)O(logn)
      • 참고: 빅오 표기법에서 𝑙𝑜𝑔𝑛logn 에서의 log의 밑은 10이 아니라, 2입니다.
        • 한번 실행시마다, 50%의 실행할 수도 있는 명령을 제거한다는 의미. 즉 50%의 실행시간을 단축시킬 수 있다는 것을 의미함

           

    Type Markdown and LaTeX: 𝛼2α2

    6.2. 이진 탐색 트리 단점

    • 평균 시간 복잡도는 𝑂(𝑙𝑜𝑔𝑛)O(logn) 이지만,
      • 이는 트리가 균형잡혀 있을 때의 평균 시간복잡도이며,
    • 다음 예와 같이 구성되어 있을 경우, 최악의 경우는 링크드 리스트등과 동일한 성능을 보여줌 ( 𝑂(𝑛)O(n) )

    '자료구조와 알고리즘' 카테고리의 다른 글

    자료구조 힙2  (0) 2020.10.28
    자료구조 힙  (0) 2020.10.27
    자료구조 트리2  (0) 2020.10.26
    자료구조 트리  (0) 2020.10.26
    자료구조 해쉬 테이블3  (0) 2020.10.25
전설의 개발자