데이터 취업 스쿨 교육 9회차 내용 정리

Reallee·2023년 10월 1일
0

데이터 취업 스쿨

목록 보기
10/19
post-thumbnail

알고리즘

1. 선형검색

  • 선형으로 나열되어 있는 데이터를 순차적으로 스캔하면서 원하는 값을 찾는다.

  • 보초법
    - 마지막 인덱스에 찾으려는 값을 추가해서 찾는 과정을 간략화 한다.

2. 선형검색 실습

  • 리스트에서 가장 앞에 있는 숫자 '7'을 검색하고 위치(인덱스)를 출력

  • 리스트에서 숫자 '7'을 모두 검색하고 각각의 위치(인덱스)와 검색 개수를 출력

3. 이진 검색

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

4. 이진 검색 실습

5. 순위

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

6. 순위 실습

  • 학급 학생(20명)의 중간고사, 기말고사의 성적을 이용해 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램 구축(성적은 난수)

-클래스

class RankDeviation:

def __init__(self, mss, ess):
    self.midStuScos = mss
    self.endStuScos = ess
    self. midRanks = [0 for i in range(len(mss))]
    self. endRanks = [0 for i in range(len(mss))]
    self. rankDeviation = [0 for i in range(len(mss))]


def setRank(self, ss, rs):
    for idx, sco1 in enumerate(ss):
        for sco2 in ss:
            if sco1 < sco2:
                rs[idx] += 1

def setMidRank(self):
    self. setRank(self.midStuScos, self.midRanks)

def getMidRank(self):
    return self.midRanks

def setEndRank(self):
    self. setRank(self.endStuScos, self.endRanks)

def getEndRank(self):
    return self.endRanks

def printRankDeviation(self):

    for idx, mRank in enumerate(self.midRanks):
        deviation = mRank - self.endRanks[idx]

        if deviation > 0:
            deviation = '↑' + str(abs(deviation))

        elif deviation < 0:
            deviation = '↓' + str(abs(deviation))
        else:
            deviation = '=' + str(abs(deviation))

        print(f'mid_rank : {mRank} \t end_rank : {self.endRanks[idx]} \t deviation : {deviation}')
        
  • 실행

7. 버블 정렬

  • 처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝자리로 옮기는 알고리즘

8. 버블 정렬 실습

  • 20개의 랜덤한 숫자를 뽑아 오름차순으로 정렬

  • 모듈

  • 실행

9. 삽입 정렬

  • 정렬되어 있는 자료 배열과 비교해서, 정렬 위치를 찾는다.

10. 삽입 정렬 실습

  • 1부터 1000까지의 난수 100개를 생성하고, 아래의 요구사항을 만족하는 모듈 제작
    - 생성된 난수들을 오름차순 and 내림차순으로 정렬하는 알고리즘 구현
    • 생성된 난수 중 최소값과 최대값을 반홚나느 함수 구현
  • 클래스

class SortNumbers:

def __init__(self, ns, asc=True):
    self.nums = ns
    self.isAsc = asc

def isAscending(self, flag):
    self.isAsc = flag

def setSort(self):

    for i1 in range(1, len(self.nums)):
        i2 = i1 - 1
        cNum = self.nums[i1]

        if self.isAsc:
            while self.nums[i2] > cNum and i2 >= 0:
                self.nums[i2 + 1] = self.nums[i2]
                i2 -= 1

        else:
            while self.nums[i2] < cNum and i2 >= 0:
                self.nums[i2 + 1] = self.nums[i2]
                i2 -= 1

        self.nums[i2 + 1] = cNum

def getSortedNumbers(self):
    return self.nums

def getMinNumber(self):
    if self.isAsc:
        return self.nums[0]
    else:
        return self.nums[len(self.nums) - 1]

def getMaxNumber(self):
    if self.isAsc:
        return self.nums[len(self.nums) - 1]
    else:
        return self.nums[0]
        
  • 실행

11. 선택 정렬

  • 주어진 리스트 중 최소값을 찾아, 그 값을 맨 앞에 위치한 값과 교체하는 방식의 자료 정렬 알고리즘

12. 선택 정렬 실습

  • 선택정렬 알고리즘으로 학생 20명의 시험점수를 오름차순과 내림차순으로 정렬
    - 시험 점수는 50부터 100까지로 한다.
  • 모듈

  • 실행

13. 최대값

  • 자료구조에서 가장 큰 값을 찾는 것

14. 최대값 실습

15. 최소값

  • 자료구조에서 가장 작은 값을 찾는 것

16. 최소값 실습

17. 최빈값

  • 자료구조에서 빈도 수가 가장 많은 데이터

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

nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]

maxAlo = MaxAlgorithm(nums)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
print(f'maxNum : {maxNum}')

indexes = [0 for i in range(maxNum + 1)]
print(f'indexes : {indexes}')
print(f'indexes : {len(indexes)}')

for n in nums:
indexes[n] = indexes[n] + 1
print(f'indexes : {indexes}')

maxAlo = MaxAlgorithm(indexes)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxNumIdx()

print(f'maxNum : {maxNum}')
print(f'maxNumIdx : {maxNumIdx}')

print(f'즉, {maxNumIdx}의 빈도수가 {maxNum}로 가장 높다.')

18. 최빈값 실습

  • 클래스

  • 실행

최대값 및 인덱스 리스트 생성

while문을 이용한 값 출력

19. 근사값

  • 특정 값에 가장 가까운 값을 근사값이라고 한다.

20. 근사값 실습

  • 모듈

  • 실행

21. 평균

  • 여러 수나 쟝의 중간값을 갖는 수를 평균이라고 한다.

22. 평균 실습

  • 모듈

  • 실행

23. 재귀 알고리즘

  • 나 자신을 다시 호출하는 것을 재귀라고 한다.

24. 재귀 알고리즘 실습

  • for 문

  • 재귀 함수

profile
초심자 입니다!

0개의 댓글