Diviser et conquérir l'algorithme de la collection d'algorithmes et son algorithme d'application

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);
	}
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_43978754/article/details/115051304
conseillé
Classement