蛮力法分析问题——基础篇

蛮力法分析问题——基础篇

概论:蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义。 常常直接基于问题的描述, 因此,也是最容易应用的方法。

缺点:用蛮力法设计的算法其时间性能往往也是最低的, 典型的指数时间算法一般都是通过蛮力搜索而得到的

根本原理:蛮力法所依赖的基本技术是扫描技术, 即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。依次处理所有元素是蛮力法的关键, 为了避免陷入重复试探, 应保证处理过的元素不再被处理。在基本的数据结构中,依次处理每个元素的方法是遍历。简单的说就是一一列举。

例如:集合的遍历,线性表的遍历、树的遍历、图的遍历。

虽然巧妙和高效的算法很少来自于蛮力法, 基于以下原因,蛮力法也是一种重要的算

法设计技术:

(1 ) 理论上, 蛮力法可以解决可计算领域的各种问题。

( 2) 蛮力法经常用来解决一些较小规模的问题。

 

(3 ) 对于一些重要的问题(例如, 排序、查找、字符串匹配) , 蛮力法可以产生一些合理

的算法, 它们具备一些实用价值,而且不受问题规模的限制。

(4 ) 蛮力法可以作为某类问题时间性能的底限,来衡量同样问题的更高效算法。

 

 

我们先从简单的案例对蛮力法进行简单的说明:

1、重复元素删除问题设计算法,在数组r[n]中删除重复的元素。

基本思路,对数组中的数进行遍历,当遇到与之前数相同的数把她归为#,当输出的时候输出非#号项。

//去除重复项 
 
#include

void f(int a[],int n)//5.1
{
    int i,j,x=0;
    for(i=0;i

2 、荷兰国旗问题

要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表蓝色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其次,B排在最后。

为荷兰国旗问题设计一个算法,其时间性能是O(n)。

 基本思路:对字符串中所有的元素进行遍历,要求顺序为R、W、B,遍历时如果是R在前对下一个进行比较,如果不是R,依次往下查看,把所有的R交换到开头,W、B同理。

代码如下:

//2 荷兰国旗问题
 #include
 #include
void swap(char &a,char &b)
{
    char temp;
    temp = a;
    a = b;
    b = temp;
}
void sort(char c[],int n)
{
    for(int i=0;i

编程小白,如有不对,可以更正。

你可能感兴趣的:(编程语言)