Leetcode_분할 정복

Google 빅 데이터 처리의 트로이카: GFS, Bigtable 및 MapReduce

MapReduce의 주요 아이디어:

원래 문제를 재귀적으로 여러 하위 문제로 나누고 하위 문제가 경계 조건을 충족할 때까지 재귀를 중지합니다. 하위 문제를 하나씩 분해하고, 해결된 하위 문제를 결합하고, 마지막으로 알고리즘은 원래 문제에 대한 답을 얻기 위해 계층별로 병합합니다.

분할 정복 알고리즘의 단계:

  • 나누기: 문제를 하위 문제로 재귀적으로 분해
  • 거버넌스: 이러한 작은 하위 문제를 하나씩 세분화
  • 결합: 해결된 하위 문제를 레이어별로 병합하고 최종적으로 원래 문제의 솔루션을 얻습니다.

분할 정복이 적용되는 상황

  • 원래 문제의 계산 복잡성은 문제의 크기에 따라 증가합니다.
  • 원래 문제는 더 작은 하위 문제로 나눌 수 있습니다.
  • 하위 문제의 구조와 성격은 원래 문제와 동일하며 서로 독립적입니다. 하위 문제는 공통 하위 문제를 포함하지 않습니다.
  • 원래 문제에서 분해된 하위 문제의 솔루션은 문제의 솔루션으로 결합될 수 있습니다.

연산

169. 대부분의 요소

파이썬 코드:

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return nums[0]
        left = self.majorityElement(nums[:len(nums)//2])
        right = self.majorityElement(nums[len(nums)//2:])

        if left == right:
            return right
        elif nums.count(right) > nums.count(left):
            return right
        else:
            return left

53. 최대 하위 시퀀스 합계

파이썬 코드

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return nums[0]
        left = self.maxSubArray(nums[:len(nums)//2])
        right = self.maxSubArray(nums[len(nums)//2:])
        
        max_l = nums[len(nums)//2]
        tmp = 0
        for i in range(len(nums)//2,len(nums)):
            tmp += nums[i]
            max_l = max(tmp,max_l)
        max_r = nums[len(nums)//2-1]
        tmp_1 = 0
        for i in range(len(nums)//2-1,-1,-1):
            tmp_1 += nums[i]
            max_r = max(tmp_1,max_r)
        return max(left,right,max_l+max_r)

50. 파우(엑스,엔)

파이썬 코드

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n < 0 :
            x = 1/x
            n = -n
        if n == 0:
            return 1
        if n%2 == 1:
            p = x*self.myPow(x, n-1)
            return p
        return self.myPow(x*x,n/2)

참조

일반적으로 사용되는 다섯 가지 알고리즘 중 하나: 분할 정복 알고리즘

당신이 모르는 파이썬 분할 정복 알고리즘

추천

출처blog.csdn.net/BigCabbageFy/article/details/108081214