공부/자료구조 15

[자료구조] 정렬들 다시 정리.

선택정렬은 n^2 삽입정렬은 올바른 자리를 찾아 삽입하는 정렬. 대부분의 레코드가 이미 정렬되있는 경우 매우 효율적일 수 있다. 버블정렬 작업이 비효율적이어서 단순함에도 불구하고 거의 쓰이지 않는다. 합병정렬 입력데이터가 무엇이든 간에 정렬되는 시간은 동일하다. 단점은 임시배열이 필요하다는 것과 레코드의 크기가 큰 경우 이동 횟수가 많으므로 매우 큰 시간낭비를 초래한다는 것이다. 그러나 레코드를 연결리스트로 구성해 합병 정렬을 할 경우 링크 인덱스만 변경되므로 데이터의 이동은 무시할 수 있을 정도로 작아진다. 따라서 크기가 큰 레코드를 정렬할 경우 연결리스트를 사용한다면 퀵정렬을 포함한 다른 어떤 정렬방법보다 효율적일 수 있다. 퀵정렬 빠르다. 추가 메모리 공간도 필요하지 않다. 이미 정렬된 리스트에 대..

공부/자료구조 2016.03.30

[스크랩] 퀵정렬이 힙정렬보다 성능이 좋은 이유

제가 알고 있기로 정렬 알고리즘의 복잡도는 nlogn 이하로 나올 수 없다고 알고 있습니다. 다름이 아니라 궁금한건 퀵정렬과 힙정렬의 복잡도는 각각 nlogn이고 최악의 경우 퀵정렬은 n^2, 힙정렬은 nlogn으로 알고 있습니다. 최악의 상황까지 고려했을 때는 힙정렬이 훨씬 좋아보이는데 실제 돌려보면 퀵정렬이 퍼포먼스가 더 좋게 나옵니다. 왜 퀵정렬이 더 빠른지 궁금하고 덧붙여서 퀵정렬과 힙정렬의 차이점에 대해 자세히 알고 싶습니다. ---------------------------------------------- 퀵정렬은 배열구조를 그대로 이용할 수 있는 특징이 있습니다. 알고리즘에 상관없이 계산에 필요한 데이터를 다루는 과정은 반드시 필요합니다. 퀵정렬이 배열구조를 그대로 쓸 수 있다는 것은 데이..

공부/자료구조 2016.03.29

[자료구조] 해싱

너무 어려워서 공부가 더 필요할 것 같다. 간단한 개념만 써봄.. 해싱이란? 정보를 가능한한 빠르게 저장하고 검색하는데 사용되는 기법 중 하나 최적의 검색이 필요한 분야에서 사용됨 키의 값과 키가 저장된 위치를 찾아주는 처리과정을 해싱이라고 함. 해싱을 왜 사용하는가? 일반적인 해싱의 연산시간은 O(1)로 매우 빠르다. 단 최악의 겅우 O(n)이 될 수도 있다. 해싱 구성요소 1) 해시테이블(Hash Table) : 데이터가 처리되는 장소 키와 값 쌍으로 저장할 때 사용하는 자료구조. 해시함수를 이용해 키와 관련된 값을 매핑한다 2) 해시함수 (Hash Functions) : 키 위치 변환 함수 주어진 키를 특정 인덱스로 변환하는데 사용된다. 특정 인덱스에 이미 다른 키가 있는 경우를 충돌이라 하며 다른..

공부/자료구조 2016.02.02

[자료구조] 검색알고리즘

검색알고리즘 검색은 컴퓨터의 핵심 알고리즘 중 하나이다. 컴퓨터엔 많은 정보가 저장되 있고, 이를 효괒거으로 탐색하기 위해서는 효율적인 검색 알고리즘이 필요하다. 검색의 종류 - 불규칙선형 검색 (Unordered Linear Search) 정렬되지 않은 배열로 모든 요소에 대해 검색해야 함 -정렬/규칙 선형 검색 (Sorted/Ordered Linear Search) 정렬된 배열을 검색하는 방법. 검색을 원하는 값보다 큰 값을 만나면 -1을 반환 - 이진 검색 (Binary Search) 정렬되어 있는 자료의 집합에서 특정 자료를 찾고자 할 때 많이 사용되며 매우 빠른 검색 알고리즘이다. 자료의 집합의 중간부분을 구한 뒤 찾고자 하는 데이터와 비교해 크면 뒷부분을 가지고 작으면 앞부분을 가지고 처음의 ..

공부/자료구조 2016.02.02

[자료구조] 자바로 구현한 힙정렬

Heap Sort - 힙이란 우선순위큐를 표현한 완전이진트리의 배열식 표현을 의미한다. * 기본적으로 힙의 i번 요소의 자식은 (2*i)번과 (2*i +1)번이다. - 최대 힙 트리나 최소 힙 트리를 구성해 정렬하는 방법 * 최대힙 : 부모노드가 항상 자식노드보다 크며 완전이진트리에 가까운 이진트리를 말함 * 최소힙 : 최대힙과 반대. 부모노드가 자식노드보다 항상 작은 경우 - 힙이 수행할 수 있는 조작 삽입 [insert : 트리의 끝부분에 값을 삽입하는 함수] [upHeap : 삽입된 값의 위치를 찾아주는 함수] 삭제 [deletMax : 트리의 뿌리 부분에 존재하는 최대값을 제거하는 함수] [downHeap : 대소관계에 의해 트리를 재구성하는 함수] - 내림차순 정렬을 위해선 최대힙을 오름차순 정..

공부/자료구조 2016.02.01

[자료구조] 자바로 구현한 퀵정렬

Quick Sort [출처 : 위키피디아] - 분할정복(divide and Conquer) 방법을 통해 리스트를 정렬한다. - 리스트 가운데서 하나의 원소를 고른다 이 원소를 pivot이라 한다. - 분할(divide) : 피벗 앞엔 피벗보다 작은 값이, 뒤엔 큰 값이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. - 분할된 두개의 작은 리스트에 대해 재귀적으로 이 과정을 반복한다. 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복한다. 복잡도 - 최악의 경우 : 최선의 경우 : 구현 - 결과 -

공부/자료구조 2016.02.01

[자료구조] 정렬 알고리즘

정렬 알고리즘 - 번호, 사전순서 같이 일정한 순서대로 열거하는 알고리즘 - 효율적인 정렬은 탐색이나 병합 알고리즘 처럼 다른 알고리즘을 최적화하는데 중요하다 종류 - 정렬 알고리즘은 특징에 따라 몇 가지로 분류 할 수 있다. - 비교정렬 : 원소들을 정렬할 때, 원소들의 순서에만 의존하는 알고리즘 - 제자리 정렬 : 원소들의 갯수에 비해서 충분히 무시할만한 공간만을 더 사용하는 알고리즘 안정성 - 같은 Key 값을 지닌 원소들의 상대적 위치가 변경되지 않음을 의미하는 말 - 안전정렬 : 거품정렬, 삽입정렬, 합병정렬, 기수정렬 - 불안전정렬 : 선택정렬, 셸정렬, 힙정렬, 퀵정렬 버블정렬 일반적으로 버블정렬보단 삽입의 복잡도가 더 좋음. 유일한 장점은 이미정렬이 되 있는지 확인 가능하다는 점. 선택정렬..

공부/자료구조 2016.02.01