-
Notifications
You must be signed in to change notification settings - Fork 326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
p. 307: 31. 상위 K 빈도 요소
- 최적화 & 파이써닉한 코드 질문
#164
Comments
안녕하세요~ 책에서도 여러 차례 언급하고 있지만 log는 마법과 같은 함수라서 로그 뒤에 위치한 값이 무엇이느냐는 성능에 전혀 영향을 주지 않습니다. 왜냐면 아울러 리스트 컴프리헨션으로 표현하니 훨씬 더 가독성이 좋은거 같네요. 감사합니다! |
안녕하세요 @likejazz 님 답변 감사합니다! 이해가 잘 되었어요. 한 가지 더 질문이 있어요. 여기서 답을 찾기 위해 시도해본 것
O(n + (k log n)) is approximately O(n) " (제 해석: O(n + (k log n)) ≈ O(n) )
vs. 글 2 답변: "Which is "better" is therefore unclear, although my quick analysis tended to show that O(n + k log n) performs better under mild assumptions on k ." (제 해석: "결국 O(n + k log n) 과 O(n log n) 중 어떤 것이 더 나은 지는 불분명하다")
최대힙을 사용하는 책의 코드에서 로그 앞에 있는 계수를 최적화할 수 있는 방법( 책의 코드는 비어있는 리스트를 먼저 선언하고, 힙(리스트)에 요소를 하나씩 삽입하면서 힙을 쌓아가기 때문에 최종적으로 이 풀이의 시간 복잡도는, 힙에 요소를 하나씩 넣는 것 대신 코드책에 있는 원래 코드
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
freqs = collections.Counter(nums) # O(n) 시간 & O(n) 공간 (여기서 `n`은 len(nums))
freqs_heap = []
for f in freqs: # ⭐ 힙에 요소를 하나씩 삽입함으로써 최대힙을 쌓기 때문에 O(n log n) 시간
heapq.heappush(freqs_heap, (-freqs[f], f)) # `freq_heap`: O(n log n) 시간 & O(n) 공간
|
안녕하세요,
307쪽 31번 문제(상위 K 빈도 요소)에서 힙과
Counter()
객체를 활용한 풀이 2개에 대해 질문 몇 개를 여쭤보고자 합니다.질문 1 -
O(n log n)
시간 복잡도 풀이를O(n log k)
로 최적화하는 것이 의미가 있을까요?책에 수록된, 최대힙을 활용한 풀이
이 풀이에서
Counter()
객체의 값을 음수화하여 (-freqs[f]
) 힙에 삽입함으로써 최대힙을 구현하는데,n
이len(nums)
라면, 이 풀이의 경우 시간 복잡도가O(n log n)
, 공간 복잡도가O(n)
인 것을 볼 수 있습니다.사소한 최적화이지만 최소힙을 활용하면 시간 복잡도를
O(n log k)
로 줄일 수 있을 것 같은데, 이러한 최적화가 의미가 있을까요? "의미있음"은 주관적인 개념이긴 하지만, "면접 상황에서 이러한 최적화가 도움이 될까" 정도로 보시면 될 것 같습니다.질문 2 - 더 간결하고, 파이써닉한 풀이
책에 있는 파이썬다운 풀이
이거는 딱히 질문이라기보다는, 이 풀이가 CP스러운 것 같아서 언패킹을 활용하지 않고도 이렇게 더 간결하게 쓸 수 있을 것 같아요.
👇
읽어주셔서 감사합니다!
The text was updated successfully, but these errors were encountered: