๐Summarization
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์งํ
๐Contents
๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
- ์ ํ๊ฒ์ : ์ ํ์ผ๋ก ๋์ด๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ค์บํ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ์
- ๋ณด์ด๋ฒ : ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ฐพ์ผ๋ ค๋ ๊ฐ์ ์ถ๊ฐํด์ ์ฐพ๋ ๊ณผ์ ์ ๊ฐ๋ตํ
- ์ด์ง๊ฒ์
- ๊ฐ์ด๋ฐ ๋ฐ์ดํฐ(์ค์๊ฐ) ์ด์ฉ
โป ์ ๋ ฌ์ด ๋์ด์๋ ์ํ๋ผ ๊ฐ์ ํจ
- ์ ๋ ฌ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์์ ์ค์๊ฐ๊ณผ์ ํฌ๊ณ ์์์ ์ด์ฉํด์ ๋ฐ์ดํฐ ๊ฒ์
- ๊ฒ์ ๋ฒ์๋ฅผ ์ขํ๋๊ฐ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ์
์์ ์๊ณ ๋ฆฌ์ฆ
- ์์ : ์์ ํฌ๊ณ ์์์ ์ด์ฉํด์ ์์ ์์๋ฅผ ์ ํ๋ ๊ฒ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒ๋ธ์ ๋ ฌ : ์ฒ์๋ถํฐ ๋๊น์ง ์ธ์ ํ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋ฉด์ ํฐ ์ซ์๋ฅผ ๊ฐ์ฅ ๋์ผ๋ก ์ฎ๊ธฐ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ฝ์
์ ๋ ฌ : ์ ๋ ฌ๋์ด ์๋ ์๋ฃ ๋ฐฐ์ด๊ณผ ๋น๊ตํด์, ์ ๋ ฌ ์์น๋ฅผ ์ฐพ๋๋ค.
- ์ ํ์ ๋ ฌ : - ์ฃผ์ด์ง ๋ฆฌ์คํธ ์ค์ ์ต์๊ฐ์ ์ฐพ์ ๊ทธ ๊ฐ์ ๋งจ ์์ ์์นํ ๊ฐ๊ณผ ๊ต์ฒดํ๋ ๋ฐฉ์. ์๋ฃ๋ฅผ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
์ํ ์๊ณ ๋ฆฌ์ฆ
- ์ต๋๊ฐ(Max) : ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ๋๋ค
- ์ต์๊ฐ(Min) : ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๋๋ค
- ์ต๋น๊ฐ(Mid) : ๋ฐ์ดํฐ์์ ๋น๋์๊ฐ ๊ฐ์ฅ ๋ง์ ๋ฐ์ดํฐ
- ๊ทผ์ฟ๊ฐ(Approximation) : ํน์ ๊ฐ(์ฐธ ๊ฐ)์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ
- ํ๊ท (Mean) : ์ฌ๋ฌ ์๋ ์์ ์ค๊ฐ๊ฐ์ ๊ฐ๋ ์
- ์ฌ๊ท(Recursive) : ๋ ์์ ์ ๋ค์ ํธ์ถํ๋ ๊ฒ
์์ ๋ฌธ์ ํ์ด
- ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ์์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ซ์๋ฅผ ๊ฒ์ํ๋ ๋ชจ๋์ ๋ค์ ์๊ฑด์ ๋ฐ๋ผ ๋ง๋ค์ด ๋ณด์.
def searchNumberByLineAlgorithm(ns, sn):
searchResultIdx = -1
print(f'Numbers : {ns}')
print(f'Search Numbers : {sn}')
n = 0
while True:
if n == len(ns):
print('search FAIL')
break
if ns[n] == sn:
searchResultIdx = n
print('search SUCCESS')
print(f'search result INDEX : {searchResultIdx}')
n += 1
return searchResultIdx
- ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ์์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ซ์๋ฅผ ๊ฒ์ํ๋ ๋ชจ๋์ ๋ค์ ์๊ฑด์ ๋ฐ๋ผ ๋ง๋ค์ด๋ณด์.
def searchNumberByBinaryAlgorithm(ns, sn):
searchResultIdx = -1
startIdx = 0
endIdx = len(ns) - 1
midIdx = (startIdx + endIdx) // 2
midValue = ns[midIdx]
print('start Idx : {}, endIdx : {}' .format(startIdx, endIdx))
print('mid Idx : {}, midvalue : {}'.format(midIdx, midValue))
while sn >= ns[0] and sn <= ns[len(ns) - 1]:
if sn == ns[len(ns) - 1]:
searchResultIdx = len(ns) - 1
break
if startIdx + 1 == endIdx:
if ns[startIdx] != sn and ns[endIdx] != sn:
break
if sn > midValue:
startIdx = midIdx
midIdx = (startIdx + endIdx) // 2
midValue = ns[midIdx]
print('start Idx : {}, endIdx : {}'.format(startIdx, endIdx))
print('mid Idx : {}, midvalue : {}'.format(midIdx, midValue))
elif sn < midValue:
endIdx = midIdx
midIdx = (startIdx + endIdx) // 2
midValue = ns[midIdx]
print('start Idx : {}, endIdx : {}'.format(startIdx, endIdx))
print('mid Idx : {}, midvalue : {}'.format(midIdx, midValue))
elif sn == midValue:
searchResultIdx = midIdx
break
return searchResultIdx
- ์ต์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ์์ ์ต์๊ฐ๊ณผ ์ต์๊ฐ์ ๊ฐฏ์๋ฅผ ์ฐพ๋ ๋ชจ๋์ ๋ง๋ค์ด๋ณด์.
(๋ฆฌ์คํธ๋ 1๋ถํฐ 50๊น์ง์ ๋์ 30๊ฐ๋ฅผ ์ด์ฉํ๋, ์ค๋ณต์ด ํ์ฉ๋๋๋ก ํ๋ค
class MinAlgorithm:
def __init__(self, ns):
self.nums = ns
self.minNum = 0
self.minNumCnt = 0
def setMinNum(self):
self.minNum = 50
for n in self.nums:
if self.minNum > n:
self.minNum = n
def getMinNum(self):
self.setMinNum()
return self.minNum
def setMinNumCnt(self):
self.setMinNum()
for n in self.nums:
if self.minNum == n:
self.minNumCnt += 1
def getMinNumCnt(self):
self.setMinNumCnt()
return self.minNumCnt
- ์ฌ์ฉ์๊ฐ ์ ์ ๋๊ฐ๋ฅผ ์
๋ ฅํ๋ฉด ์์ ์ ์์ ํฐ ์ ์ ์ฌ์ด์ ๋ชจ๋ ์ ์์ ํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ๋ง๋ค์ด๋ณด์.
class NumsSum:
def __init__(self, n1, n2):
self.bigNum = 0
self.smallNum = 0
self.setN1N2(n1, n2)
def setN1N2(self, n1, n2):
self.bigNum = n1
self.smallNum = n2
if n1 < n2:
self.bigNum = n2
self.smallNum = n1
def addNum(self, n):
if n <= 1:
return n
return n + self.addNum(n - 1)
def sumBetweenNums(self):
return self.addNum(self.bigNum - 1) - self.addNum(self.smallNum)