美文网首页
第3章 蛮力法

第3章 蛮力法

作者: 饥人谷1904_陈俊锋 | 来源:发表于2019-04-19 09:54 被阅读0次

第三章 蛮力法

蛮力算法是一种简单直接地解决问题的方法

  • 优点:
    1.应用范围广;
    2.不受实例规模的限制;
    3.当要解决的问题低频率出现,并且高效算法很难设计时可选蛮力法;
    4.对解决一些小规模问题实例仍然有效;
    5.可作为衡量其他算法的参照物。

  • 主要内容:
    1.选择排序和冒泡排序
    2.顺序查找和蛮力字符串匹配
    3.最近对和凸包问题的蛮力算法
    4.穷举查找

选择排序和冒泡排序

  • 选择排序原理:扫描整个列表,找出最小元素,然后将最小元素与第一个元素交换位置。从第二个元素开始扫描列表,找出n-1个元素中的最小元素,将最小元素与第二个元素交换位置,如此类推,做n-1遍后排序结束。

  • 冒泡排序原理:比较相邻的元素,将大的元素交换到右边的位置,重复多次后,最大元素就“沉淀”到列表的最后一个位置。第二遍将第二大元素沉下去,n-1遍后结束。

  • 时间效率函数均属于 Θ(n2) 。

顺序查找和蛮力字符串匹配

  • 顺序查找:已知有n个元素的数组A[0...n]. 给定元素K,要求找出一个下标i,使得A[i]=K.输出第一个值等于K的元素的位置,找不到返回-1.
    算法改进:在表尾n添加K元素查找键(就不用每次循环都检查是否到达或超过了表尾),如果查到的元素位置小于n就返回i,否则返回-1;而对于有序数组而言,只要遇到了一个大于或等于查找键的元素,查找就可以停止了。
    线性算法

  • 蛮力法字符串比较问题:从文本中寻找匹配模式的子串,即求出第一个匹配模式的子串在文本中的开始位置(子串最左元素的下标),将模式对准文本的前m个字符从左往右进行比对,如果其中有一个字符不匹配,模式往右移动一位继续下一个m个字符的比对。
    文本:给定的由n个字符组成的串
    模式:指定的由m个字符组成的串
    最坏情形:模式须移动n-m+1次,每次移动模式之前,做足m次比对才发现不匹配(即第i+m位不匹配),因此在最坏情况下算法属于Θ(nm),平均效率可达到 Θ(n+m) = Θ(n)

最近对和凸包问题的蛮力算法

  • 最近对问题:
    给定平面S上n个点,找其中的一对点,使得在n(n-1)/2个点对中,该点对的距离最小。
    对于给定的n个点,找出其中两个距离最小的点的问题直观的想法很简单,只要把所有的点两两组合,比较它们之间的距离即可以得到距离最小的一对。
    基本操作:平方运算
    执行次数:n(n-1)
    效率:Θ(n2)

  • 凸包问题:
    凸集:对于平面上的一个点集合(有限的或者无限的),如果以集合中任意两点p和q为端点的线段都属于该集合,则这个集合是凸的。
    凸包:一个点集合S的凸包是包含S的最小凸集。显然,如果S是凸的,则S的凸包就是S本身。
    定理:任意包含n>2个点的集合S的凸包,是以S中的某些点位顶点的凸多边形。特别,如果所有点共线,则多边形退化为一条直线,它的两个端点仍在S中。
    极点:凸集的极点是指不会出现在集合中任何线段的中间的点。凸多边形的顶点是极点。
    凸包问题的解法:设点集大小为n,首先将其中的点两两配对,得到直线段条;然后对每一条直线段检查其余的n-2个点的相对于该直线段的正负性,如果它们都有相同的正负性,那么这条直线段属于凸多边形的边,其顶点是极点。
    ax+by=c这样一根直线把平面分成两个半平面,一个半平面中的点都满足ax+by>c,另一个半平面中的点都满足ax+by<c,对于不同点的每一个n(n-1)/2来说,都需要其他n-2个点求出ax+by-c的符号。
    效率:O(n3)

穷举法

生成所有可能的可行解,再从中选择最优解。

  • 旅行商问题:
    TSP问题:给定n个城市相互之间的距离,求一条能走遍n个城市的最短路径,使我们能从任一城市开始,访问每个城市只一次后回到起点。
    等价于 “Hamilton回路问题” -- (无权图)。
  • 背包问题:
    给定n 个重量为w1、w2、…、wn,价值为v1、v2、…、vn的物品和一个承重为W的背包,要求将物品装入背包使背包的价值最大。
    因为n个元素集合的子集数量是2n,穷举法是Ω(2n)。

上面两个问题是NP困难问题(目前没有已知的效率可以用多项式来表示的算法)的著名例子。

  • 分配问题:
    有n个任务需要分配给n个人执行,一人一个任务。将第j个任务分配给第i个人的成本是C[i,j],求总成本最小的分配方案。
  • 深度优先查找 广度优先查找
    两种查找 对邻接矩阵表示的图,效率为:Θ(|V|2);对邻接链表表示的图,效率为:Θ(|V|+|E|)。
    DFS和BFS比较.PNG
    总结.PNG

相关文章

  • 算法01-蛮力法

    算法01-蛮力法 一、蛮力法介绍 蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直...

  • 第3章 蛮力法

    第三章 蛮力法 蛮力算法是一种简单直接地解决问题的方法 优点:1.应用范围广;2.不受实例规模的限制;3.当要解决...

  • 3 蛮力法

    1、选择排序与冒泡排序 选择排序:对于任何输入来说,选择排序都是一个θ(n2)的算法;然而键的交换次数仅为θ(n)...

  • 互联网大厂常考算法及套路深度解析

    常考算法 暴力法 回溯法 分支限界法 分治法 动态规划 贪心法 暴力法 也称枚举法、穷举法、蛮力法。 基本思想: ...

  • 回溯法——矩阵中的路径

    回溯法回溯法可以看成蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选择出一个可行的解决方案。回溯法非常适...

  • 软件调试

    软件排错的方法 蛮力法最为常见和最为低效的手法。主要思想就是在程序中打断点或者其他方法进行问题的定位。 回溯法就是...

  • 深度优先和广度优先查找以及拓扑排序

    深度和广度优先查找 归属:蛮力法 简称:DFS(深度优先查找)、BFS(广度优先查找) 思想:DFS: 深度优先查...

  • 冒泡排序

    冒泡排序俗称穷举法或者蛮力法排序,是一种效率比较低的排序方式,时间复杂度O(n^2) ,在数据量非常大的情况下,速...

  • 2. 尾部的零(lintcode)

    1、蛮力法: Ⅰ、算出n! Ⅱ、不断除10除到尾位不是0为止 该方法简单直接暴力,但阶乘数字很大,int类型最大能...

  • 字符串的相关操作

    1.字符串的旋转 将字符串‘abcdef’中头部的‘abc’移到字符串的尾部,变成‘defabc’ 用蛮力法将头部...

网友评论

      本文标题:第3章 蛮力法

      本文链接:https://www.haomeiwen.com/subject/lyrawqtx.html