정렬(3)
-
[인덱스] 복합인덱스 활용, 인덱스 스캔방향에 대해
프로젝트 도중 인기여행지, 여행지 지역 카테고리에 따른 데이터 반환이 느려 이를 해결했다. 여행지 지역카테고리에 대해서는 (도,시)의 복합인덱스를 사용하였다.복합인덱스여러개의 컬럼을 함께 사용하여 만든 인덱스. 효과적인 이유?다음 예를 보자SELECT * FROM TABLEWHERE columnA = 1 AND columnB = 1 이때 복합인덱스가 아닌, A 혹은 B로 인덱스를 형성한다면 DB에서 카디널리티가 높은 컬럼에 대해 인덱스를 활용한다. 그 후, 나머지 조건에 대한 필터링은 서버 엔진으로 전달해서 실행하는데 이는 cpu, 메모리 리소스를 더 많이 사용한다.A의 인덱스를 활용했고 A = 1에 관한 데이터가 1000개 라면, 1000개의 데이터를 얻고 서버엔진에서 B = 1에 대해 필터링을 한다..
2024.11.30 -
기본 정렬 알고리즘(선택,삽입)-알고리즘07
Selection Sort(선택정렬) Inplace 정렬 알고리즘 중 하나(추가 메모리 필요X) n번째 index에 n번째로 작은 원소를 삽입한다. 알고리즘: 각 루프 마다: 최대 원소를 찾는다. 최대 원소를 가장 오른쪽의 원소와 교환한다. 1~2 를 반복하는데 1 에서 찾고 옮긴 원소를 제외하고 반복한다. 시간복잡도 및 의사코드: //n은 배열 A의 크기 cost times for j=1 ~ j=n-1 n smallest=j n-1 for i=j+1 ~ i=n Σ(n-j+1) if A[i] tj는 j=2,3,⋯,n=2,3,⋯,인 경우에 대해 while루프의 검사가 실행되는 횟수 따라서, BestCase: 이미 정렬 된 경우 while문의 실행되지 않으므로 위의 식에서 n에 대해 1차식으로 남는다. 따라..
2023.08.15 -
QuickSort(1)-알고리즘03
퀵정렬 많은 정렬 알고리즘 중에 퀵정렬을 다뤄본다. 퀵정렬을 공부하다보면 얻게 되는 것이 많다. Divide and Conquer(분할정복) , Pivot , Partition 에 대한 개념을 같이 공부하게 된다. 퀵 정렬은 다음과 같은 과정으로 정렬을 한다. (Input=array:ARR[0]) 1. 배열의 원소중 하나를 골르는데 이를 pivot이라고 한다. 2. pivot보다 큰 값의 원소들은 pivot의 오른쪽으로, pivot보다 작은 원소들은 pivot의 왼쪽으로 자리를 옮긴다 (partition) 3. pivot을 기준으로 왼쪽 배열과 오른쪽 배열을 분할을 해서 각각의 배열에 대해 1,2의 과정을 반복한다. (Divide and Conquer) pivot을 정하는 방법과 partition의 방법..
2023.06.18