蛮力算法
- 格式:ppt
- 大小:419.50 KB
- 文档页数:30
蛮力算法的特点范文蛮力算法(Brute-Force Algorithm)是一种简单直接、不依赖与特定问题领域知识的解决问题的方法。
它通过尝试所有可能的解,然后比较它们的结果来达到问题求解的目标。
蛮力算法的主要特点如下:1.直接暴力:蛮力算法不依赖于任何问题的特定知识,它直接从问题的定义出发,尝试所有可能的解,找到最优解。
这种直接暴力的方法保证了算法的通用性和适用性,适用于各种类型的问题。
2.简单易懂:蛮力算法的实现通常很简单直观,思路清晰。
它不需要过多的问题分析和优化技巧,避免了复杂的数学推导和算法设计。
相对于其他高级算法,蛮力算法容易理解和实现。
3.穷尽所有可能性:蛮力算法通过列举所有可能的解来寻找最优解。
它不会漏掉任何可能的解,同时也不会因为其中一种假设或剪枝操作而丢失最优解。
蛮力算法的穷举特性保证了结果的准确性。
4.时间复杂度高:蛮力算法的主要缺点是其时间复杂度通常较高。
由于蛮力算法需要遍历所有可能的解,所以算法的时间复杂度很容易达到指数级别。
这意味着对于大规模问题,蛮力算法的执行时间可能会非常长。
5.可以用于验证其他算法:蛮力算法具有确定性和可靠性的特点。
因此,它常常被用于验证其他算法的正确性。
通过比较其他算法的结果和蛮力算法的结果,可以判断其他算法的准确性和可行性。
6.常用于小规模问题:尽管蛮力算法的时间复杂度较高,但对于小规模问题,蛮力算法仍然是一个可行的求解方法。
在问题规模较小的情况下,蛮力算法通常能够在较短的时间内给出结果。
7.可用于优化问题:蛮力算法也可以用于优化问题。
通过遍历所有可能的解,可以找到问题的最优解或近似最优解。
虽然时间复杂度较高,但对于一些优化问题,蛮力算法依然是一种可行的求解方法。
8.需要合理的问题建模:蛮力算法的有效性和效率很大程度上依赖于问题的建模。
将问题正确地建模为待求解的空间,是保证蛮力算法正确性的前提。
合理的问题建模可以减少问题空间的范围,从而提高蛮力算法的效率。
蛮力算法的基本条件
我觉得这蛮力算法啊,它得有几个基本条件。
首先呢,得是直来直去的那种思维,就像我老家村里头的二柱子,那家伙,脑子一根筋。
看他那模样,脸黑黝黝的,眼睛瞪起来像铜铃,头发乱得跟鸡窝似的,每次决定做啥事儿,就直接冲着目标去,啥弯儿都不拐,这就有点蛮力算法那味儿。
这算法得有个明确的目标,就好比我去集上找老王头买他那只芦花鸡。
我心里就想着那只芦花鸡,其他鸡啊鸭啊的,我看都不看。
我到了集上,人挤人,那气味儿啊,混杂着鸡屎味、汗臭味,还有各种小吃的香味儿。
可我不管这些,我就一门心思找老王头和他的芦花鸡。
这目标明确了,才好施展这蛮力算法。
还有啊,这算法不能怕麻烦。
我记得有次我想找个旧书,那书可稀罕了,在一堆旧书堆里找。
那些书啊,堆得像小山似的,灰扑扑的,有的还破破烂烂。
我就一本一本地翻,旁边有人就笑我,说我傻,这么多书咋找得到。
我就跟他说,“你懂啥,我这就是要找,哪怕把这堆书全翻遍喽。
”这就像蛮力算法,不管多麻烦,就是一个劲儿地干。
再有呢,这蛮力算法在做的时候,还不能想太多旁的东西。
我有一回跟人打赌,看谁先把一块地的杂草拔完。
我就蹲下来,开始拔草。
旁边那人呢,一会儿看看天,一会儿看看地,还跟路过的人聊天。
我就不管,我就看着我眼前的草,一根一根地拔。
那草的叶子刺得我手痒痒的,我也不管,就这么干。
这就像蛮力算法,专注于自己要做的事儿,其他的都先放一边。
这蛮力算法啊,说起来简单,但真要做起来,也得有点像我这样的憨劲儿才行。
用蛮力学思想,用选择排序对一个数组进行排序实验总结一、什么是蛮力法蛮力法,又称枚举法,是基础的算法之一。
这是一种算法思想,顾名思义,就是将问题的可能结果全部都列举出来,再根据列举的结果根据问题的约束条件选择出问题的解。
所依赖的技术最主要的是遍历,重复步骤。
往往用这种算法去求解问题,时间复杂度会很大。
但是确是最简单,直白容易想到的解法。
思想还是得用实例来体现的,不然会感觉这个思想的东西只是思想,我们不会用的话,感觉这些思想没什么用,所以要用起来。
选择排序是蛮力法的一个例子,我们应该抓住的是如何将这种思想应用起来,这才是关键。
二、例子——选择排序1.问题选择排序方法对一个序列进行升序排y序2.基本思想听到选择排序,顾名思义,这是一种有选择的排序方法。
怎么选择,如何体现蛮力?选择,就是将序列分为有序跟无序,这两部分,刚开始,有序部分的元素肯定为空集。
接下来,就是所谓的蛮力的部分,开始不管三七二十一,就在无序的部分开始找啊,找到在无序中最小的数,将把最小的数与无序序列的第一个元素交换。
到这一步后,又开始划有序与无序部分,这个时候,要把刚才找的最小的数放到有序部分中。
这时,有序部分的元素就加1了,所谓排好一个了,还有剩下的元素在无序序列中。
再开始蛮力部分。
一直这样更新有序无序序列,蛮力;更新有序序列,蛮力。
直至无序序列中没有元素。
这样我们就实现了排序。
大概想法是这样的,现在开始扣细节。
因为这只是我们想法,计算机认识吗?当然不认识。
我们要把我们的思想改得细致点。
好了,我们知道蛮力法最重要的是遍历和重复步骤。
我们要对整个序列进行排序,根据刚才的思想,序列中的每一个元素都会被挑出来重新放到有序序列中,所以,在这里可以用一个遍历去实现。
然而,对于每一个的挑选的过程,是很蛮力的,就是一直在无序序列中找,比较。
直至到无序序列的结尾。
所以这也可以用遍历去实现。
所以整体框架就是重复(次数为原始序列个数,为更新有序与无序序列)开始找最小的值在无序序列中找到最小值交换值在无序序列中的位置3.代码实现void SelectSort(int array[],int n){int i,j,index,temp;for(i=0;i<n-1;i++) //最外层遍历{index=i;//无序区的第一位for(j=i+1;j<n;j++) //开始找无序区的最小元素if(array[j]<array[index] index=j; //记录最小值if(index!=i){temp=array[i];array[i]=array[index];array[index]=temp; //将最小值放到有序区中总结对于蛮力法的应用,首先要明白它的特征,就是遍历,重复步骤的过程。
关于算法--蛮⼒法--字符与字符串匹配⼀、顺序查找1、步骤:简单的将给定列表中的连续元素与给定的查找键作⽐较,直到遇到⼀个匹配的元素或遇到匹配元素前就遍历了整个列表2、JavaScript代码实现1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>SelectionFind</title>6 </head>7 <body>89 </body>10 <script type="text/javascript">11var search = function(arr, k) {12var n = arr.length;13 arr[n] = k;14var i = 0;15while(arr[i] != k){16 i ++;17 }18if( i < n){19return i;20 }else{21return -1;22 }2324 };25var num = search(['a','b','c','d','e','f','g'], 'b');26 console.log(num);27 </script>28 </html>3、算法分析:顺序查找算法具有蛮⼒法的优点(简单)和缺点(效率低),是⼀个线型算法⼀、蛮⼒字符串匹配1、步骤(需要从m个“⽂本”中取出n个“模式”字符串) a、将模式对准⽂本的前m个字符,从左向右匹配每⼀对响应的字符,直到m对字符全部匹配(此时算法停⽌)或者遇不到⼀对匹配的字符串 b、在后⼀种情况下,模式向右移⼀位,然后从模式的第⼀个字符开始,继续把模式和⽂本中的对应字符作⽐较2、JavaScript代码实现1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>蛮⼒法字符串匹配</title>6 </head>7 <body>89 </body>10 <script type="text/javascript">11var search = function(arrT, arrP) {12var m = arrT.length;13var n = arrP.length;14for(var i = 0; i < m - n ; i++){15var j = 0;16while(( j < m ) && (arrP[j] == arrT[j + i])){17 j++;18 }19if(j == n){20return i;21 }22 }23return -1;24 };25 console.log(search(['a','b','c','d','e','f','g'],['c','d','e']));26 </script>27 </html>3、算法分析移动“模式”之前,可能做⾜m次⽐较,⽽n-m+1次尝试都有可能出现,最坏的情况下,算法属于Θ(mn),平均效率下,算法属于Θ(m+n)=Θ(m)。