Diviser et conquérir
Compréhension de soi: il s'agit de diviser un gros problème en petits problèmes. La pensée est très similaire à la récursivité. Diviser et vaincre, c'est-à-dire diviser un problème en plusieurs petits problèmes, et enfin résumer les solutions, et de nombreux problèmes sont résolus par récursivité, par exemple recherche binaire (recherche binaire )
Problèmes classiques :
(1) Recherche binaire
(2) Algorithme Palindrome
(2) Multiplication de grands entiers
(3) Multiplication de matrice de Strassen
(4) Couverture en damier
(5) Tri par fusion
(6) Tri rapide
(7) Sélection temporelle linéaire
(8) Le point le plus proche du problème
(9) Horaire du tournoi à la ronde
(10) Tour de Hanoi
(1) Recherche binaire
N'oubliez pas de faire attention au point final de la récursivité et que la condition est faible <= élevée, s'il n'y a pas de signe =, une valeur sera manquée!
Complexité temporelle: O (logn)
#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;
}
}
Palindrome
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);
}
}