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