蛮力法学习报告

蛮力法学习报告

1,什么是蛮力法?

蛮力法,又称枚举法,是基础的算法之一。这是一种算法思想,顾名思义,就是将问题的可能结果全部都列举出来,再根据列举的结果根据问题的约束条件选择出问题的解。
所依赖的技术最主要的是遍历,重复步骤。往往用这种算法去求解问题,时间复杂度会很大。但是确是最简单,直白容易想到的解法。
思想还是得用实例来体现的,不然会感觉这个思想的东西只是思想,我们不会用的话,感觉这些思想没什么用,所以要用起来。选择排序是蛮力法的一个例子,我们应该抓住的是如何将这种思想应用起来,这才是关键。

2,蛮力法的优点和缺点

优点:容易实现,简单直观
缺点:时间复杂度高,不算最优

3,算法举例——荷兰国旗问题

问题描述

要求重新排列一个由字符R、W和B(R红、W白、B蓝)构成的数组,使得所有的R都排在最前面,W排在其次,B排在最后。

代码实现

#include <iostream>
using namespace std;
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<n;i++)
    {
        if(c[i]=='R') continue;   //第i个前面已经完成排序
        else if(c[i]=='B')        //如果c[i]=B,就和后面最近的W换,保证B一定在W之后
        {
            int j=i+1;
            while(j<n)
            {
                if(c[j]=='W') {swap(c[i],c[j]);break;}
                j++;
            }           
        }       
        if(c[i]=='W')             //如果c[i]=W,就和后面最近的R换,后面无R则无操作
        {
            int j=i+1;
            while(j<n)
            {
                if(c[j]=='R') {swap(c[i],c[j]);break;}
                j++;
            }
        }

    } 
}
int main()
{
    char c[]={"RWWBWBRBRRWBRBW"};
    sort(c,sizeof(c));
    cout<<c;
}

运行结果

RRRRRWWWWWBBBBB

4,总结

当遇到计算量较小且较简单的问题的时候,蛮力法可以是最优选择,因为它足够简单,但是计算量较大时,蛮力法不太实用。当我们决定是否用蛮力法时,要根据题目的难易程度以及算法复杂度适当的变通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值