Computer Science/Algorithms

๐Ÿ“กKadane's Algorithm

metamong 2024. 1. 3.

๐Ÿ”Š ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ '๋ถ€๋ถ„์—ฐ์†์ˆ˜์—ดํ•ฉ'์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. DP๋กœ๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , well-known Kadane's Algorithm์„ ํ™œ์šฉํ•ด์„œ๋„ ๋งค์šฐ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”Š ๊ฐ element traversingํ•  ๋•Œ๋งˆ๋‹ค max() ๋‘ ๋ฒˆ ์‚ฌ์šฉ. max_till_now๋กœ ์ตœ์ข… ์ตœ๋Œ“๊ฐ’ updateํ•˜๊ณ , cur_max๋Š” ํ˜„์žฌ์œ„์น˜์˜ ์›์†Œ only & ํ˜„์žฌ์œ„์น˜์˜ ์›์†Œ ํฌํ•จ ๊ทธ ์ „์˜ cur_max ํ•ฉ ๋‘ ๊ฐœ์ค‘ ์ตœ๋Œ“๊ฐ’ update. ์ฆ‰ cur_max๋กœ ๊ฐ ์›์†Œ๋ฅผ ํฌํ•จํ•œ ๋ถ€๋ถ„์—ฐ์†์ˆ˜์—ดํ•ฉ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์† ๊ตฌํ•ด๋‚˜๊ฐ€๋Š” dp ๋ฐฉ์‹์ด๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€. ๋‹ค๋งŒ, dp๋Š” ์ตœ์ข…์ ์œผ๋กœ max() ํ•œ ๋ฒˆ ์‚ฌ์šฉ์ด์ง€๋งŒ, Kadane's algorithm์—์„œ๋Š” max()๋ฅผ ๊ทธ ๋•Œ ๊ทธ ๋•Œ updateํ•˜๋Š” ๋ฐฉ์‹๋งŒ ์ฐจ์ด์ . ํ•ต์‹ฌ์€ 'ํ˜„์žฌ ์œ„์น˜์˜ ์›์†Œ๋Š” ๋ฌด์กฐ๊ฑด ๋ถ€๋ถ„ํ•ฉ์— ํฌํ•จ๋œ ์ƒํƒœ์—์„œ ๋‚˜ ์ž์‹ ๋งŒ ๊ณ ๋ คํ•˜๋Š”๊ฒŒ ๋” ํฐ ์ง€, ์•„๋‹ˆ๋ฉด ์•ž์„  ์ตœ๋Œ“๊ฐ’์— ๋‚˜ ์ž์‹ ์„ ๋”ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํฐ ์ง€'๋ฅผ ํ™•์ธ. ์ฒซ cur_max๋Š” 0์œผ๋กœ ์„ค์ •. max_till_now๋Š” ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋ฒ”์œ„์— ๋”ฐ๋ผ ์ „์ฒด array์˜ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ์„ค์ •

 

๐Ÿ”Š BOJ 1912 <์—ฐ์†ํ•ฉ> ์‹ค๋ฒ„2 & LeetCode 53 <Maximum Subarray> ๋ฌธ์ œ ์ฐธ๊ณ .

 

๐Ÿ”Š python

import math
#list nums
def maxSubArray(self, nums: List[int]) -> int:
    ans,curmax=-math.inf,0
    for i in range(len(nums)):
        curmax=max(curmax+nums[i],nums[i])
        ans=max(ans,curmax)
    return ans

 

'Computer Science > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿงฟ Dijkstra's (Shortest Path) Algorithm  (1) 2024.01.14
๐ŸLIS(Longest Increasing Subsequence) O(n^2)/O(nlogn)  (0) 2024.01.06
๐Ÿ”ฌ Parametric Search  (1) 2023.12.31
2๏ธโƒฃBipartite Graph  (1) 2023.12.21
Optimal Page Replacement Algorithm  (1) 2023.10.18

๋Œ“๊ธ€