검색 본문
comdon-ai.tistory.com 컴돈AI [자료구조] 힙(Heap) 힙(Heap) 우선순위 큐(Priority Queue) 힙을 보기전에 먼저 우선순위 큐를 살펴보도록 하겠습니다. 우선순위 큐는 각각의 원소가 우선순위를 가지고 있으며, 우선순위가 높은 순서대로 원소를 제거할 수 있는 추상 데이터 타입( Abstract Data Type, ADT )입니다. 추상 데이터 타입(Abstract Data Type, ADT)은 데이터와 그 데이터에 대한 연산들을 추상적으로 정의한 것입니다 ADT는 데이터의 타입과 그 타입에 대해 수행할 수 있는 연산들의 집합으로 구성되지만, 이러한 연산들의 구현 방법은 정의하지 않는 힙 적용 Heap Sort(힙정렬) Heap Sort(힙정렬) 힙 정렬이란 정렬을 진행하는데 Heap을 이용하여 정렬을 하는 방식입니다. 힙 정렬의 경우, 먼저 배열에 대해서 heap배열로 만든 뒤 (O(N)) 해당 배열에 대해서 최댓값이나 최솟값을 계속해서 뽑아내면(O(NlogN) 됩니다. 즉, 전체 시간 복잡도는 O(NlogN)입니다. The Top K Problem (또는 The K-th Element) The Top K Problem (또는 The K-th Element) Top K 문제란, 주어진 데이터 집합에서 가장 큰 K 출처 https://leetcode.com/explore/learn/card/heap/643/heap 16 Heap Sort(힙정렬) Heap Sort(힙정렬) 힙 정렬이란 정렬을 진행하는데 Heap을 이용하여 정렬을 하는 방식입니다. 힙 정렬의 경우, 먼저 배열에 대해서 heap배열로 만든 뒤 (O(N)) 해당 배열에 대해서 최댓값이나 최솟값을 계속해서 뽑아내면(O(NlogN) 됩니다. 즉, 전체 시간 복잡도는 O(NlogN)입니다. The Top K Problem (또는 The K-th Element) The Top K Problem (또는 The K-th Element) Top K 문제란, 주어진 데이터 집합에서 가장 큰 K 2024.04.20 블로그 검색 더보기 [자료구조] 힙 정렬(Heap Sort) sanseo.tistory.com 기억에 남는 블로그 이름 [자료구조/Python] 힙(Heap) 삽입 완전 이진 트리에 삽입하는 것이므로 마지막 레벨의 가장 왼쪽에 삽입이 진행된다. 그리고 부모 노드와 값을 비교하여 삽입된 값이 더 크다면 자리를 바꾼다. 부모 노드의 값이 크거나 같을 때까지 해당 작업을 반복한다. 위의 이진 트리에 9라는 새로운 노드를 삽입한다고 해보자. 완전 이진 트리에 삽입하는 것이므로 마지막 레벨, 가장 왼쪽에 삽입한다. 힙에 9 삽입 삽입된 노드(9)와 부모 노드(8)과 비교하면, 삽입된 노드가 더 크기 때문에 부모 노드와 자리를 바꾼다. 다음으로 부모 노드(15)와 비교하면, 부모 노드의 값이 더... 삭제 최댓값을 가지는 루트 노드를 삭제하고, 마지막 노드를 루트 노드로 옮긴다. 이후 자식 노드와 값을 비교하여 더 큰 값과 자리를 바꾼다. 만약 자신이 가장 클 경우 삭제 연산은 끝나게 된다. 위의 이진 트리에서 삭제 연산을 진행한다고 해보자. 먼저 최댓값을 지닌 루트 노드의 값을 삭제한다. 최댓값(15) 삭제 이후 마지막 노드를 루트 노드에 복사하고, 자식 노드(10, 8)와 값을 비교하여 더 큰 값을 지닌 자식 노드인 10과 자리를 바꾼다. 최댓값(15) 삭제 자식 노드(3)와 비교했을 때, 자신이 더 크므로 삭제 연산은 끝나게 된 최소 힙 구성 heapify(list) 또는 heappush(heap, item)를 사용해서 리스트를 힙으로 변환할 수 있다. 시간 복잡도는 각각 O(n), O(n log n)이며, 똑같이 리스트의 형태를 한 상태에서 순서가 바뀐 모습을 확인할 수 있다. l = [16, 2, 5, 10, 30, 20] heapq.heapify(l) l # result : [2, 10, 5, 16, 30, 20] l = [16, 2, 5, 10, 30, 20] heap = [] for v in l: heapq.heappush(heap, v) l # r 최대 힙 구성 최대 힙을 구성하기 위해서는 추가적인 작업이 필요하다. 리스트의 부호를 음수로 하여 push 하고, 다시 부호를 바꿔주면 최대 힙으로 구성할 수 있다. 그러나 heappop은 최소 힙을 기준으로 진행되기에 최대 힙 상태에서 heappop을 진행할 경우 올바르게 동작하지 않는다. l = [16, 2, 5, 10, 30, 20] heap = [] for v in l: heapq.heappush(heap, -v) for i in range(len(heap)): heap[i] *= -1 heap # result : [30 최소 힙 정렬 최소 힙으로 구성된 리스트에 heappop()을 길이만큼 수행하면, 오름차순으로 정렬된 출력 결과를 얻을 수 있다. 이를 다른 리스트에 저장하여 재정렬하면 내림차순의 결과도 얻을 수 있을 것이다. l = [16, 2, 5, 10, 30, 20] heapq.heapify(l) for i in range(len(l)): print(heapq.heappop(l), end = " ") # result : 2 5 10 16 20 30 최대 힙 정렬 음수를 취하여 최대 힙의 형태로 변환해 준 뒤 다시 음수를 취하여 출력하면 내림차순으로 정렬된 결과를 얻을 수 있다. l = [16, 2, 5, 10, 30, 20] heap = [] for v in l: heapq.heappush(heap, -v) for i in range(len(heap)): print(heapq.heappop(heap) * -1, end=" ") # result : 30 20 16 10 5 2 참고링크 Python 공식 문서 : heapq https://docs.python.org/ko/3/ 8 heapify(list) 또는 heappush(heap, item)를 사용해서 리스트를 힙으로 변환할 수 있다. 시간 복잡도는 각각 O(n), O(n log n)이며, 똑같이 리스트의 형태를 한 상태에서 순서가 바뀐 모습을 확인할 수 있다. l = [16, 2, 5, 10, 30, 20] heapq.heapify(l) l # result : [2, 10, 5, 16, 30, 20] l = [16, 2, 5, 10, 30, 20] heap = [] for v in l: heapq.heappush(heap, v) l # r python 파이썬 Heap 힙 자료구조 내장함수 힙정렬 최대힙 최소힙 heapq 2024.04.02 hwann2.tistory.com DeepStory [자료구조] Heap에 대하여 6 1. 힙(Heap)이란? 힙은 완전 이진 트리 기반의 자료구조로, 우선순위 큐를 구현하는데 주로 사용된다. 각 노드는 자식 노드보다 큰(최대 힙) 또는 작은(최소 힙) 값을 가지며, 이러한 특성을 힙 속성(heap property)이라 한다. 힙은 두 가지 주요 유형으로 분류된다. 최소 힙(Min-Heap): 각 부모 노드의 값이 자식 노드... 2024.04.04 backend-dev.tistory.com 백엔드 개발자 블로그 heap dump 분석하기 (feat. OOM) heap dump 파일이란? 개념 : 운영중인 애플리케이션의 힙 메모리 영역을 스냅샷으로 기록한 내역을 저장한 파일을 일컫는다 사용처 : 힙 메모리 영역 OOM(OutOfMemory)으로 JVM 에러가 발생하는 것인지 확인하는 데 사용된다. 그럼 heap dump 파일은 언제 생성하지? 효율적으로 런타임시 OOM(Out Of Memory)이 발생하는 경우에 스냅샷을 생성하고 파일 내용을 분석하면 된다. OOM은 어떤 경우에 발생하는가? Java Heap space 원인 : 힙 영역에 공간이 부족할 경우에 발생한다. 가장 많이 확인되는 케이스이다. 해결안 : GC 설정을 해주거나, 객체 생성을 최소화하거나, 메모리 사이즈를 늘려줍시다. public class JavaHeapSpace { public static void main(String[] args) throws Exception { String[] heap dump 파일 생성 방법 OOM이 발생하는 시점에 자동으로 생성되도록 설정한다. 실시간으로 스냅샷을 생성할 수도 있다. OOM 발생할 경우에 힙덤프 파일 자동 생성 애플리케이션 내부적으로 OOM이 발생하였을 경우 힙덤프 파일을 생성하도록 옵션을 추가한다 > java -jar -XX:+HeapDumpOnOutOfMemoryError \\ -XX:HeapDumpPath=/home/centos/application/dumps/ \\ -XX:OnOutOfMemoryError="kill -9 %p" \\ application-0.0.1-SNAPSHO 실습 (OOM 발생 시 힙 덤프 파일 자동 생성) 1. 우선 OOM이 발생할 수 있는 케이스를 구현하기 public void test() throws InterruptedException { ArrayList list = new ArrayList(); try { for(int i=0; i < 250000; i++) { list.add(new int[10000000]); // 리스트에 배열을 추가한다 System.out.println(i); Thread.sleep(1); } } catch (Exception e) { e heap dump 파일 분석 방법 이클립스 MAT 생성된 파일을 MAT에서 OPEN한다 Leak Suspect 리포트를 확인해본다 메모리 영역에 76% 차지하는 int[]가 생성되었다고 한다 Domiator Tree를 확인해보면 ArrayList에 int[100000000] 엘리멘트가 생성되었다는 것을 확인할 수 있다 메모리를 차지하는 객체는 확인되었고 stacktrace를 통해서 에러가 발생하는 시작점을 확인할수 있다 VisualVM VisualVM에는 로컬에서 실행되고 있는 애플리케이션을 모니터링 할 수 있고 이미 생성된 힙덤프 파일을 확인할 수 있다 요약탭에서 예방법 원인 : 대부분 OOM은 무분별하게 객체를 생성하거나 rechable 상태를 유지할 경우에 발생한다 예방법 : 코드레벨에서 주의를 기울여 작성하는게 OOM을 예방하기 위한 가장 최선의 방법이다 1. 코드 레벨 개선 사항 불변객체로 생성하라 불변 객체는 내부 상태가 변하지 않기 때문에 GC에서 reachable 상태인지 수시로 확인할 필요가 없으므로 gc의 부담을 줄일 수 있다 그리고 불변 객체는 thread safe하기 때문에 동시성 관련 문제를 피할 수 있다 fileInputStream을 사용해라 FileInputStream을 사 결론 힙덤프를 분석하여 트러블슈팅 하는 경험은 많지는 않을 것이다. 하지만, JVM 기반 애플리케이션을 운영한다면 반드시 겪어야 할 시련이 될것이라고 생각하여 대비해봤다. 아래는 꼭 알아야 할 내용이다. 힙덤프 파일이란 개념 힙 덤프 파일 생성 방법 힙 덤프 파일 분석 방법 OOM 원인과 예방법 참고 https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/memleaks002.html https://sematext.com/blog/java-lang-outofmemoryerror/ http://honeymon.io/tech/2019/05/30/java-memory-leak-analysis.html https://blog.voidmainvoid.net/210 https://seunghyunson.tistory.com/23 13 효율적으로 런타임시 OOM(Out Of Memory)이 발생하는 경우에 스냅샷을 생성하고 파일 내용을 분석하면 된다. OOM은 어떤 경우에 발생하는가? Java Heap space 원인 : 힙 영역에 공간이 부족할 경우에 발생한다. 가장 많이 확인되는 케이스이다. 해결안 : GC 설정을 해주거나, 객체 생성을 최소화하거나, 메모리 사이즈를 늘려줍시다. public class JavaHeapSpace { public static void main(String[] args) throws Exception { String[] heap Memory OOM Out of Memory 힙덤프 Heap Dump 2024.04.29 sense-of-accomplishment.tistory.com 개발 노트 11. 힙 정렬(Heap Sort) 7 추가적인 배열이 필요하지 않다는 점에서 메모리 측면에서 몹시 효율적이고 항상 O(N * log N)을 보장할 수 있다. #include <stdio.h> int number = 9; int heap[9] = {7, 6, 5, 8, 3, 5, 9, 1, 6}; int main(void) { // 힙을 구성 for(int i = 1; i < number; i++) { int c = i; do { int root = (c - 1) / 2; //root... 2024.04.18 통합웹 더보기
서비스 안내 스토리의 글을 대상으로 검색결과를 제공합니다. 자세히보기 라트 에세이 분야 크리에이터 힙(heap) vs 순차(sequential) 어느 블럭에 저장되어야 하는지 관리할 필요가 있다. 이를 파일 구조(file erganization)라고 하며, 파일 구조화 방법에는 다음 세 가지 유형이 있다. 1. 힙(heap) 파일 구조: 모든 레코드는 파일 내 임의 블럭에 저장될 수 있는 방식으로, 각 레코드들의 저장 순서를 고려하지 않는다. 2. 순차(sequential) 파일 구조... 브런치북 주간 라트 데이터베이스 정리 순서 2024.04.27 브런치스토리 검색 더보기 guhonga.tistory.com 학교공부일기장 Heap sort 소개 8 자료구조 시간에 Heap에 대해 이미 들어봤다. 마지막 level의 노드를 제외한 모든 노드가 채워진 완전 이진 트리이고, 모든 노드는 왼쪽부터 순서대로 채워진다. 또한 Max heap의 경우 부모 노드는 자식보다 크거나 같고, Min heap의 부모 노드는 자식 노드보다 작거나 같다. 이런 특징을 갖는 힙은 배열로 구현 가능... 2024.04.08 티스토리 검색 더보기 story.kakao.com Youth for God Youth for God - 카카오스토리 되고 성전의 산은 수풀의 높은 곳과 같게 되리라 12. Therefore because of you, Zion will be plowed like a field, Jerusalem will become a heap of rubble, the temple hill a mound overgrown with thickets... 5시간전 카카오스토리 검색 더보기 에세이 크리에이터 보기
서비스 안내 Kakao가 운영하는 책 서비스 입니다. 다른 사이트 더보기 Septimus Heap Books (Study Guide): Flyte, Syren, Magyk, Physik, Queste... 저자 Books LLC 출간 2010.9.1. The Heap 저자 션 애덤스 출간 2020.1.7. Heap House 저자 Carey Edward 출간 2014.10.15. 도서 18,120원 Syren (Septimus Heap) 저자 앤지 세이지 출간 2010.4.5. Septimus Heap, Book Seven 저자 Katherine T... 출간 2013.4.16. 도서 17,640원 Septimus HEAP BK 7 저자 앤지 세이지, Zug... 출간 2013.5.23. 도서 9,520원 Septimus Heap 5 Syren 저자 앤지 세이지 출간 2021.1.1. 도서 9,520원 Fyre: Septimus Heap 저자 앤지 세이지 출간 2013.10.10. 도서 26,570원 Septimus Heap, Book One 저자 Katherine T... 출간 2013.6.25. 도서 5,830원 Septimus Heap #1 : Magyk 저자 Sage Angie/... 출간 2005.3.1. 도서 20,020원 더보기 (주)카카오는 상품판매의 당사자가 아닙니다.법적고지 안내 (주)카카오는 통신판매중개자로서 통신판매의 당사자가 아니며 상품의 주문 배송 및 환불 등과 관련한 의무와 책임은 각 판매자에게 있습니다.
히프제이 heapj.com 신청자 작성 20대 여성 쇼핑몰, 히프제이, 데일리룩 more heap, more beauty. 인천광역시 남동구 남동대로 691. 여성의류 쇼핑몰. 유니크, 란제리, 원피스, 가방, 구두, 액세서리 판매. 채널 이모젼 힙 인스타그램 www.instagram.com/imogenheap/ 가수 Imogen Heap 인스타그램. 글, 사진, 동영상 제공. 이모젼 힙 트위터 twitter.com/imogenheap 가수 Imogen Heap 트위터. 글, 사진, 동영상 제공. 사이트 더보기