Chapter_one_关于搜索_一,什么是暴力枚举?

·1.1.1_总是可行的枚举。 

假设有一组数:{1,8,9,7,5,6,1,10,6},需要得到其中最大的数的值,对于人来说,显然,最大的数的值为10。但对于计算机来说,它并不能“一眼看”出这组数的最大值。

有一个比较好的且易于理解的方法便是先记录前m个数的最大值max_number,然后再插入第m+1个数,对比max_number与第m+1个数的值之间的大小,如果max_number是较小数,则将第m+1个数的值赋于max_number,max_number遍成为前m+1个数的最大值。

  这个方法是可行且容易证明其可行性的。(下面的证明过程可以不看。)


证明,设 N[i]为一组数中的第i个数。

因对于一个数N[1]来说,最大值与最小值就是这个数本身,则max_number的值等于N。

此时,前1个数的最大值max_number与N[2]对比,无论对比的结果如何,max_number都为前2个数的最大值。

由此类推,当 i 等于 N 时,max_number则为前N个数的最大值。由此,此算法成立并且由于进行了N-1次判断,时间复杂度为O(N-1)


而上述方法,便是称为枚举法。其基本思想为,一个不漏地查看所有可能的情况。

  是不是和一种修辞手法举例子很像呢?枚举法可以看成 举出所有例子的一种手法嘛。


·1.1.2_枚举的局限性。

   枚举在大多数情况下都可行,但毕竟没有万能的方法,更何况是一个如此直观又易于理解的方法呢。此节的名称是暴力的枚举,有一句话云,暴力出奇迹,这句话显示了暴力是一个可以创造奇迹的方法,但是暴力在大多数情况下都是不可取的阿!

   枚举的局限性:枚举是一种很笨的方法,他仅适用于一些规模很小的问题。


·1.1.3_枚举的优点。

    在实际做题中,特别是比赛当中,我们没有更多事件去思考是不是有更优的解决方法,所以,我们很多时候是会选择一个看似可行的方法。这时候,作为最容易让人想起的方法——枚举法,便大有可为了。

   看到这里,如果读者您或者想到,枚举法的优点就只有简单吗?那您真的是too young too simple了。(此处拒绝续命。

其实枚举法还是一个可控性比较强的方法。对于可控性,我是这样想的,这个方法是实际应用中相对难以出错的算法,无论是逻辑上的错误还是个人低级错误(例如写错变量之类的)。他只需要相对短小精悍的代码来实现,而且优化起来灵活。

·1.1.4_更好地枚举。

上一点提到了枚举的优化起来比较灵活,此处简单介绍几种枚举的常见优化方法和应用例子。

      ①减少不可能情况。有一些情况是显而易见不可能的,所以可以除去。

      ②选择更好的数据结构进行储存。用适当的数据结构解决适当的问题便是数据结构的意义所在。

      ③适当地用空间换取时间。在算法比赛中(OJ刷题中),给出的空间往往是很充裕的,某些情况下,用空间换取时间是很好的选择。

      ④N元方程的优化。在某些N元方程中,我们往往只需要计算N-1元。


一个例子。给定长度为n的数组S,判断数组中的元素知否存在a,b,c,使得a+b+c=0。找出所有满足条件的元素并输出。

题目链接,如果你想看完整题目并去AC的话

对于此问题,我们枚举所有所有可能方案,由所有可能方案则为S中任意三个元素的组合,则为 n*(n-1)*(n-2)/(2*3) 个可能方案。但这是可以优化的,用方法④。

  假设,A[x]为a取S中第x个数,B[y]为b取S中第y个数,C[z]为c取S中第z个数。(x != y != z)

我们就可以得到,此问题转化为求 A[x]+B[y]+C[z] = 0时,x,y,z的值。

   再转化一下,则变为 A[x] + B[y] = -C[z],则我们只需要枚举 A[x] + B[y]的值是否有存在一个其的相反数c在数组S中且不为第x或第y个数即可。

等等,假如你是机智可爱的小读者,你就会聪明的发现,这有优化么,喵喵喵喵喵喵喵?还需要判断一次c是否存在哇!这复杂度没变过阿。

(=u=),机智可爱的读者们说得没错,但毕竟,我们还有其他方法不是么。

由于现在我们需要解决的问题是判断数组S中剩余的数是否存在第c,所以,这就可以用方法②和方法③来解决了!这里我选择开一个散列表来解决。只要我们往散列表中,将S的所有数作为key来put进HashMap中,那么我们就可以仅付出O(1)的代价来查询 数c是否存在于数组S中了不是么?

所以,时间复杂度便从 O(n*(n-1)*(n-2)/6) 优化成了 O(n*(n-1)/2),这可是 O(n的3次方) 级别到 O(n的2次方) 级别的飞跃阿!


此栗子举例了方法②③④在枚举中的应用,关于①方法,读者可以自己去尝试一下,亦可在后续文章中听本蒻进行讲解。

这里是叶攻攻。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 一、实验目的 学习使用 weka 中的常用分类器,完成数据分类任务。 二、实验内容 了解 weka 中 explo...
    yigoh阅读 8,526评论 5 4
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,743评论 0 33
  • 汪曾祺老师的散文《端午与鸭蛋》,给我的感觉是:1.题目新奇。端午与鸭蛋,在我的意识里本不相及,可作者怎会把两不相干...
    启明星子阅读 1,149评论 0 0
  • 在别人的情绪里,看到了自己影子。你讨厌她人的样子,其实你身上也包含其中,透过对她人的情绪反思自己,感受不舒服,这样...
    狩望轮回阅读 227评论 0 0
  • 简陋的出租房内,只有一张大床。却有时候三个人同住。阿飞偶尔过来,与熊银燕悄悄地亲热。我信任地侧躺在床的最外...
    夏虫的晚风疏阅读 584评论 7 6