알고리즘 수집 알고리즘 및 응용 알고리즘 분할 및 정복

나누고 정복하세요

자기 이해 : 큰 문제를 작은 문제로 나누는 것입니다. 사고는 재귀와 매우 비슷합니다. 문제를 여러 개의 작은 문제로 나누고 정복하고 마지막으로 해결책을 요약하면 많은 문제가 다음과 같이 해결됩니다. 재귀, 예 : 이진 검색 (이진 검색 )

고전적인 문제들 :
(1) 이진 검색
(2) 회문 알고리즘
(2) 큰 정수 곱셈
(3) Strassen 행렬 곱셈
(4) 바둑판 표지
(5) 병합 정렬
(6) 빠른 정렬
(7) 선형 시간 선택
(8) 문제에 가장 가까운 지점
(9) 라운드 로빈 일정
(10) 하노이 타워

(1) 바이너리 검색

재귀의 끝점에주의를 기울여야하며 조건은 낮음 <= 높음입니다. = 기호가 없으면 값이 누락됩니다!
시간 복잡도 : O (로그온)

#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<Windows.h>
#include<math.h>
using namespace std;
int* n;   //时间复杂度:O(logn)

int bisearch(int m,int low,int high)
{
    
    
	if (low <= high)
	{
    
    
		int mid = (low + high) / 2;
		if (n[mid] == m)
			return 1;
		else if (n[mid] > m)
		{
    
    
			return bisearch(m, low, mid - 1);
		}
		else if (n[mid] < m)
		{
    
    
			return bisearch(m, mid + 1, high);
		}
	}
	else
	{
    
    
		return 0;
	}
}

회문

int  palindrome(string str, int m, int n)
{
    
    
	if (m > n)
	{
    
    
		return 1;
	}
	else
	{
    
    
		return (str[m] == str[n]) && palindrome(str, m + 1, n - 1);
	}
}

추천

출처blog.csdn.net/qq_43978754/article/details/115051304