Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 네이버웍스#카카오워크#플로우#잔디#콜라비#협업툴#재택근무#디지털전환
- 한기용
- 데브코스
- 데이터엔지니어링
- 프로그래머스 데이터엔지니어링
- GPT
- 프로그래머스 #해시 #python #완주하지못한선수
- 프로그래머스 데이터 엔지니어링
- 스택
- 프로그래머스
- 데이터 엔지니어링
- 연결리스트
- 코딩테스트
- 파이썬
- 프로그래머스 데브코스
- 이시윤
- 자료구조
- 거대언어모델
- 알고리즘
- Transformer
- LLM
- #python #init#패키지
- ChatGPT
Archives
- Today
- Total
내 인생을 코딩
데이터 엔지니어링 데브코스 2주차 - 목요일 본문
학습주제
[수업] 알고리즘/ 자료구조 : Hash, Sort
주요내용
수업을 통해 Hash와 Sort를 통해 쉽게 해결할 수 있는 알고리즘 문제들을 풀어봤다. 기존에도 파이썬의 딕셔너리와 파이썬을 잘 활용하고 있었지만, 추가적으로 궁금증이 생겨서 각 자료형의 성질과 시간 복잡도 등 특징을 간략히 정리해본다.
1. 해시(Hash)
- 키(key)에 데이터(value)를 저장하는 자료구조이다.
- 데이터를 저장하는 공간을 해시테이블이라고 한다.
- 키와 해시테이블 사이에는 해시함수가 동작한다. 해시함수는 키에 대한 산술연산을 이용해 나온 해쉬 값 혹은 주소를 바탕으로 해시테이블에서 데이터의 위치를 단번에 확인할 수 있도록 하는 함수이다.
- 해쉬주소를 통해 해시테이블에 접근하므로 일반적으로 O(1) 시간복잡도를 가진다.
- 주로 검색이 많이 필요하거나, 데이터 저장, 삭제 등이 빈번한 경우 사용한다.
- 장점 : 데이터 저장/읽기 속도가 빠르고, 키에 대한 데이터가 있는지(중복 확인) 확인이 쉽다.
- 단점 : 저장 공간이 많이 필요하고, 여러 키에 해당하는 주소가 동일할 경우 해쉬 충돌이 발생할 수 있다.
2. 정렬(Sort)
- 파이썬에는 크게 리스트 객체 메소드인 .sort()와 자체 함수인 sorted() 정렬 방식이 있다.
- 파이썬 정렬 라이브러리는 병합정렬 기반으로 작성되었으며, 시간복잡도는 O(NlogN)이다.
- 파이썬 내장함수 sorted()는 이터러블(iterable) 객체를 받아 정렬된 리스트를 생성한다.
- sort()는 파이썬 리스트 객체의 내장함수로 별도의 반환 값 없이 내부원소를 바로 정렬한다.
- 정렬의 기본 값은 오름차순이며, reverse 매개변수를 통해 반대되는 내림차순으로 정렬할 수 있다.
- key 매개변수와 lambda 식을 이용해 특정한 데이터를 기준으로 정렬 순서를 설정할 수 있다.
a = sorted([2, 1, 4, 6, 5])
print(a)
>>> [1, 2, 4, 5, 6]
b = sorted({'a': 1, 'c': 2, 'b': 0}) # 딕셔너리도 이터너블한 객체이기 때문에 sorted 사용가능
print(b)
>>> ['a', 'b', 'c'] # 반면 리턴 결과는 항상 리스트 객체로 반환
c = [2, 5, 1, 10, 8]
c.sort() # 기본 정렬 순서는 오름차순
print(c)
>>> [1, 2, 5, 8, 10]
c.sort(reverse=True) # 내림차순으로 정렬을 원할 때는 reverser 매개변수를 True로 설정
print(c)
>>> [10, 8, 5, 2, 1]
d = [('강은미', '정의당'), ('노웅래', '더불어민주당'), ('박수영', '국민의힘')]
e = sorted(d, key=lambda x: x[0]) # 첫번째 이름을 기준으로 오름차순 정렬
print(e)
>>> [('강은미', '정의당'), ('노웅래', '더불어민주당'), ('박수영', '국민의힘')]
f = sorted(d, key=lambda x: x[1]) # 두번째 정당명을 기준으로 오름차순 정렬
print(f)
>>> [('박수영', '국민의힘'), ('노웅래', '더불어민주당'), ('강은미', '정의당')]
'데이터 엔지니어링 > TIL' 카테고리의 다른 글
데이터 엔지니어링 데브코스 2주차 - 금요일 (0) | 2023.04.17 |
---|---|
데이터 엔지니어링 데브코스 2주차 - 수요일 (0) | 2023.04.13 |
데이터 엔지니어링 데브코스 2주차 - 화요일 (0) | 2023.04.11 |
데이터 엔지니어링 데브코스 2주차 - 월요일 (0) | 2023.04.10 |