-
자료구조 트리3자료구조와 알고리즘 2020. 10. 27. 14:27
5.5.6. 파이썬 전체 코드 테스트
- random 라이브러리 활용
- random.randint(첫번째 숫자, 마지막 숫자): 첫번째 숫자부터 마지막 숫자 사이에 있는 숫자를 랜덤하게 선택해서 리턴
- 예: random.randint(0, 99): 0에서 99까지 숫자중 특정 숫자를 랜덤하게 선택해서 리턴해줌
- random.randint(첫번째 숫자, 마지막 숫자): 첫번째 숫자부터 마지막 숫자 사이에 있는 숫자를 랜덤하게 선택해서 리턴
# 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%의 실행시간을 단축시킬 수 있다는 것을 의미함
- 한번 실행시마다, 50%의 실행할 수도 있는 명령을 제거한다는 의미. 즉 50%의 실행시간을 단축시킬 수 있다는 것을 의미함
- 참고: 빅오 표기법에서 𝑙𝑜𝑔𝑛logn 에서의 log의 밑은 10이 아니라, 2입니다.
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 - random 라이브러리 활용