(DataStructure & Algorithm) Algorithm

임경민·2023년 10월 3일
1
post-thumbnail

🔑Summarization


  • 알고리즘은 어떠한 문제를 해결하기 위한 일련의 절차나 방법을 의미한다.
  • 다양한 알고리즘을 이용해 원하는 데이터를 얻는다

📗Contents


  • 알고리즘
    어떠한 문제를 해결하기 위한 일련의 절차나 방법

  • 선형 검색

    • 선형으로 나열되어 있는 데이터를 순차적으로 스캔하면서 원하는 값을 찾음
      ※ 보초법 : 마지막 인덱스에 찾으려는 값을 추가해서 찾는 과정을 간략화
datas = [3, 2, 5, 7, 9, 1, 0, 8, 6, 4]

print(f'datas : {datas}')
print(f'datas length {len(datas)}')

searchData = int(input('찾으려는 숫자 입력 : '))
searchResultIdx = -1

n = 0
while True:

    if n == len(datas):
        searchResultIdx = -1
        break

    elif datas[n] == searchData:
        searchResultIdx = n
        break

    n += 1

print('{}의 위치 : {}' .format(searchData, searchResultIdx))
  • 이진 검색 : 가운데 데이터(중앙값) 이용. 검색 범위를 좁혀나가면서 원하는 값을 찾음
    ※ 정렬이 되어있는 상태라 가정함

    • 정렬되어 있는 자료구조에서 중앙값과의 크고 작음을 이용해서 데이터 검색
  • 순위

    • 순위 : 수의 크고 작음을 이용해서 수의 순서를 정하는 것
import random

nums = random.sample(range(50, 101), 20)
ranks = [0 for i in range(20)]

print(f'nums : {nums}')
print(f'ranks : {ranks}')

for idx, num1 in enumerate(nums):
    for num2 in nums:
        if num1 < num2:
            ranks[idx] += 1

print('-' * 30 + '정렬 후 순위' + '-' * 30 )
print(f'nums : {nums}')
print(f'ranks : {ranks}')

for idx, num in enumerate(nums):
    print(f'nums : {num} \t rank : {ranks[idx] + 1}')
  • 버블 정렬 : 처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝으로 옮기는 알고리즘
  • 삽입 정렬 : 정렬되어 있는 자료 배열과 비교해서, 정렬 위치를 찾는다.

  • 선택 정렬 : 자료를 정렬하는 알고리즘. 주어진 리스트 중에 최솟값을 찾아 그 값을 맨 앞에 위치한 값과 교체하는 방식

    • 가장 작은 데이터를 찾아 자리 바꾸기
  • 최댓값 : 자료구조에서 가장 큰 값을 찾는다

ord() : 문자를 ASCII Code 값으로 반환

class MaxAlgorithm:
    def __init__(self, ns):
        self.nums = ns
        self.maxNum = 0

    def getMaxNum(self):
        self.maxNum = self.nums[0]

        for n in self.nums:
            if self.maxNum < n:
                self.maxNum = n

        return self.maxNum

ma = MaxAlgorithm([-2, -4, 5, 7, 10, 0, 8, 20, -11])
maxNum = ma.getMaxNum()
print(f'MaxNum : {maxNum}')
  • 최솟값 : 자료구조에서 가장 작은 값을 찾는다.
class MinAlgorithm:
    def __init__(self, ns):
        self.nums = ns
        self.minNum = 0

    def getMinNum(self):
        self.minNum = self.nums[0]

        for n in self.nums:
            if self.minNum > n:
                self.minNum = n

        return self.minNum

ma = MinAlgorithm([-2, -4, 5, 7, 10, 0, 8, 20, -11])
minNum = ma.getMinNum()
print(f'MinNum : {minNum}')
  • 최빈값 : 데이터에서 빈도수가 가장 많은 데이터
class MaxAlgorithm:
    def __init__(self, ns):
        self.nums = ns
        self.maxNum = 0
        self.maxNumIdx = 0

    def setMaxIdxAndNum(self):
        self.maxNum = self.nums[0]
        self.maxNumIdx = 0

        for i, n in enumerate(self.nums):
            if self.maxNum < n:
                self.maxNum = n
                self.maxNumIdx = i

    def getMaxNum(self):
        return self.maxNum

    def getMaxNumIdx(self):
        return self.maxNumIdx
  • 근삿값 : 특정 값(참 값)에 가장 가까운 값
import random

nums = random.sample(range(0, 50), 20)
print(f'nums: {nums}')

inputNums = int(input('input Number: '))
print(f'inputNum : {inputNums}')

nearNum = 0 ; minNum = 50

for n in nums:
    absNum = abs(n - inputNums)
    # print(f'absNum : {absNum}')
    if absNum < minNum:
        minNum = absNum
        nearNum = n

print(f'nearNum : {nearNum}')
  • 평균 : 여러 수나 양의 중간값을 갖는 수
import random

nums = random.sample(range(0, 100), 10)
print(f'nums : {nums}')

total = 0
for n in nums:
    total += n

average = total / len(nums)
print(f'average : {average}')

0개의 댓글