アルゴリズム収集の分割統治アルゴリズムとその応用アルゴリズム

分割統治

自己理解:大きな問題を小さな問題に分割することです。考え方は再帰に非常に似ています。分割統治、つまり問題をいくつかの小さな問題に分割し、最後に解決策を要約すると、多くの問題が次のように解決されます。再帰、たとえば二分探索(二分探索

古典的な問題
(1)二分探索
(2)パリンドロームアルゴリズム
(2)大整数乗算
(3)シュトラッセン行列乗算
(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