总结算法设计与分析课程期末必记知识点。
蛮力法基本思路是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试为止。
优点
缺点
一类是采用基本穷举思路,另一类是在穷举中应用递归。
int BF(string s, string t) //字符串匹配
{
int i = 0, j = 0;
while (i < s.length() && j < t.length())
{
if (s[i] == t[j]) //比较的两个字符相同时
{
i++;
j++;
}
else //比较的两个字符不相同时
{
i = i - j + 1; //i回退到原来i的下一个位置
j = 0; //j从0开始
}
}
if (j == t.length()) //t的字符比较完毕
return i - j; //t是s的子串,返回位置
else
return -1; //返回-1
}#include<stdio.h>
int maxSubSum3(int a[], int n) //求a的最大连续子序列和
{
int i, maxSum = 0, thisSum = 0;
for (i = 0; i < n; i++)
{
thisSum += a[i];
if (thisSum < 0) //若当前子序列和为负数,则重新开始下一个子序列
thisSum = 0;
if (maxSum < thisSum) //比较求最大连续子序列和
maxSum = thisSum;
}
return maxSum;
}用蛮力法求解幂集问题的时间复杂度为

用蛮力法求解全排列的时间复杂度为

幂集和全排列问题时候可以使用
第四章蛮力法结束,下一章——第五章回溯法