본문 바로가기

코딩/알고리즘10

[정렬] 병합정렬, 퀵정렬 1. 병합정렬 자료구조를 분할하고 각각의 분할된 자료구조를 정렬한 후 다시 병합하여 정렬한다. 앞서 말한 버블 정렬, 삽입정렬, 선택정렬에 비해 속도가 빠르다는 장점이 있음. 분할 단계 1단계 : 8, 1, 4, 3, 2, 5, 10, 6 2단계 : 8, 1, 4, 3 2, 5, 10, 6 3단계 : 8, 1 4, 3 2, 5 10, 6 4단계 : 8 1 4 3 2 5 10 6 병합 단계 1단계 : 8 1 4 3 2 5 10 6 그냥 병합하는 것이 아닌 각 숫자의 크고 작음을 비교해서 병합한다. 2단계 : 1, 8 3, 4 2, 5 6, 10 3단계 : 1, 3, 4, 8 2, 5, 6, 10 4단계 : 1, 2, 3, 4, 5, 6, 8, 10 반복수행하는 부분이 있기 때문에 재귀함수를 쓴다. def .. 2023. 2. 9.
재귀 알고리즘, 하노이의 탑 1. 재귀 알고리즘 나 자신을 다시 호출하는 것을 재귀라고 한다. 반복문을 사용할 수 있지만 재귀함수를 사용하는 방법이 더 간결하다. *를 사용해 tree를 만드는 코드를 재귀 함수를 통해 만들면 아래와 같다. def recusion(num): if num>0: print('*'*num) return recusion(num-1) else: return 1 recusion(10) 2. 재귀 알고리즘을 이용한 최대 공약수 계산 유클리드 호제법을 사용해 계산할 수 있다. 더보기 유클리드 호제법 두 자연수 n1, n2에 대하여 (n1 > n2) n1를 n2로 나눈 나머지를 r이라고 할 때, n1과 n2의 최대공약수는 n2와 r의 최대공약수와 같다 42와 24의 최대공약수의 경우 n1=42를 n2=24로 나눈 나.. 2023. 2. 9.
[비교] 최빈값, 근삿값, 평균 알고리즘 1. 최빈값 데이터에서 빈도수가 가장 많은 데이터를 최빈값이라고 한다 nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17] 0부터 17까지 0으로 이루어진 indexes라는 리스트를 만들고 nums를 돌면서 해당 숫자의 index에 +1을 해준다 indexes: [0, 1, 0, 1, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1] indexes에서 최댓값 알고리즘을 통해 최댓값의 index를 뽑는다 해당 index가 nums 리스트의 최빈값이다 class MaxAlgorithm: def __init__(self, ns): self.nums = ns self.maxNum = 0 self.maxNumIdx = 0 #최빈값을 구해야하므로 가장 큰 숫자와 그의 I.. 2023. 2. 8.
[비교] 최댓값, 최솟값 알고리즘 1. 최댓값 자료구조에서 가장 큰 값을 찾는다. nums = [-2, -4, 5, 7, 10, 0, 8, 20, -11] 일 때, maxNum = nums[0] 으로 맨 첫번째에 있는 숫자를 넣어준다. 그 후, 그 다음 숫자들과 maxNum을 비교한다 maxNum < nums[1], nums[2], nums[3], ..., nums[n] class MaxAlgorithm: #class니까 init method가 있어야하고 자료구조 ns가 있어야함 def __init__(self, ns): self.nums = ns self.maxNum = 0 def getMaxNum(self): self.maxNum = self.nums[0] for n in self.nums: #만약 for문을 돌면서 이 maxNum보.. 2023. 2. 6.
728x90