일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- autowired
- git #gitlab #github
- 1
- zepettoworld.com
- Component
- 오토와이어드
- 스프링 부트
- spring
- DispatcherServlet
- layout #thymeleaf #화면분할
- 스프링
- Bean
- Today
- Total
기록과 정리
해시(hash) & 힙(heap) 자료구조 개념 정리 본문
해시(hash)
해시? 해시는 key-value 의 형태로 이루어져 있는 자료구조를 말한다.
파이썬에서의 해시 구현
파이썬에서의 해시 구현은 딕셔너리를 이용한다. 배열은 [] , 튜플은 () , 딕셔너리는 {}의 형태를 가지고 있으며
다음과 같은 선언 방식을 가진다.
value = {
'color' : 'green',
'name' : 'smyoo'
}
color라는 키값의 green이라는 value, name이라는 키값에 smyoo라는 value값을 가진다.
이하 파이썬에서 자주 사용하는 해시 사용법
- value[color] = red -> color라는 키 값에 red 라는 value 할당
- value.keys() -> 키를 전부 리스트 형태로 호출
- value.values() -> 값을 전부 리스트 형태로 호출
- value.has_key('name') -> name에 대한 키를 가지고 있는가?
- value.items() -> 딕셔너리에 저장된 데이터를 리스트 형태로 변환
- value.update(temp) -> temp라는 딕셔너리를 value라는 딕셔너리에 반영
- value.pop() -> 딕셔너리에서 해당 key 정보를 추출
힙(head)
힙? 완전 이진 트리의 형태를 가지며, 우선 순위 큐를 구현하기 하며 '최대값 또는 최소값을 빠르게 찾기 위해' 고안된 자료구조
완전이진 트리란 자식노드가 '순서대로' 또는 '차례대로' 삽입되는 이진트리
힙을 이용한 우선순위 큐 구현이 시간 복잡도 측면에서 유리하다
파이썬에서는 힙은 최소힙을 따른다. 또한 heapq 내장 모듈을 사용하여 구현한다.
아래는 예제 코드
#노드 추가
import heapq
heap = []
heapq.heappush(heap, 1)
#노드 삭제
heapq.heappop(heap)
#리스트를 힙으로 바꾸기
heapq.heapify(list객체)
#최대힙 구하기
import heapq
nums = [4, 1, 7, 3, 8, 5]
heap = []
for num in nums:
heapq.heappush(heap, (-num, num)) # (우선 순위, 값)
while heap:
print(heapq.heappop(heap)[1]) # index 1
( 주어진 메소드를 잘이용해서 최대, 최소를 빠르게 구현해보자. )
'IT > Algorithm' 카테고리의 다른 글
계수정렬 - Counting Sort (0) | 2021.12.13 |
---|---|
정렬알고리즘 (0) | 2021.12.11 |
DFS와 BFS (0) | 2021.12.06 |
Greedy 알고리즘 (+백준 11047) (0) | 2021.11.26 |
알고리즘 스터디 1주차 ( 스택, 큐 개념 + 백준 문제 풀이) (0) | 2021.01.21 |