文章目录

  • 1 剪枝概述
  • 2 例题

1 剪枝概述

剪枝是搜索常用的优化手段,常常能把指数级的复杂度,优化到近似多项式的复杂度。
  剪枝是一个比喻:把不会产生答案的,或不必要的枝条“剪掉”。剪枝的关键在于剪枝的判断:什么枝该剪、在什么地方减。
  BFS的剪枝通常是判重,如果搜索到某一层时,出现重复的状态,就剪枝。例如经典的八数码问题,核心问题就是去重,把曾经搜过的八数码的组合剪去。
  DFS的剪枝技术较多,有可行性剪枝、最优性剪枝、搜索顺序剪枝、排除等效冗余、记忆化搜索等等。
  可行性剪枝:对当前状态进行检查,如果当前条件不合法就不再继续,直接返回。
  搜索顺序剪枝:搜索树有多个层次和分支,不同的搜索顺序会产生不同的搜索树形态,复杂度也相差很大。
  最优性剪枝:在最优化问题的搜索过程中,如果当前花费的代价已超过前面搜索到的最优解,那么本次搜索已经没有继续进行下去的意义,此时停止对当前分支的搜索进行回溯。
  排除等效冗余:搜索的不同分支,最后的结果是一样的,那么只搜一个分支就够了。
  记忆化搜索:在递归的过程中,有许多分支被反复计算,会大大降低算法的执行效率。用记忆化搜索,将已经计算出来的结果保存起来,以后需要用到的时候直接取出结果,避免重复运算,从而提高了算法的效率。记忆化搜索一般在DP中讲解,参考《算法竞赛入门到进阶》“7.

python【数据结构与算法】剪枝策略相关推荐

  1. Python 数据结构与算法——快排

    Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...

  2. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  3. [FreeCodeCamp笔记] Python 数据结构和算法1 二分搜索 Binary Search

    我以前学过数据结构和算法(data structure and algorithms. 现在普遍简称DSA),当时用的Robert Sedgewick的coursera课程.这位大神写的<算法( ...

  4. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  5. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  6. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  7. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  8. Python数据结构与算法(一)列表和元组

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  9. Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)

    假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...

  10. Python数据结构与算法(4.1)——递归

    Python数据结构与算法(4.1)--递归 0. 学习目标 1 递归 1.1 递归的基本概念 1.2 递归的重要性 1.3 递归三原则 1.4 递归的应用 2 递归示例 2.1 列表求和 2.2 汉 ...

最新文章

  1. vs单元测试之顺序测试
  2. 将集合中的内容按时间排序
  3. 关于Session_End()运行机制的一些细节!
  4. 基于Jquery+Ajax+Json+高效分页
  5. 【计算机网络】网络层 : IPv6 协议 ( IPv6 数据包格式 | IPv6 地址表示 | IPv6 地址类型 | IPv4 与 IPv6 协议对比 | IPv4 -> IPv6 过渡策略 )
  6. 会计记忆总结之四:会计凭证
  7. QT的QColor 类的使用
  8. 关于Unity中的本地存储
  9. [emuch.net]MatrixComputations(7-12)
  10. Ubuntu安装配置JDK、Tomcat、SVN服务器
  11. 拓端tecdat|基于matlab的Lorenz系统仿真可视化
  12. c语言单链表怎么循环链表,链表之循环单链表(用C语言描述)
  13. Tortoise SVN安装后右键没有菜单的解决方法
  14. php $smarty-display,display - [ smarty完全中文手册 ] - 在线原生手册 - php中文网
  15. 如何用java线程池做分批次查询处理 java线程池ThreadPoolExecutor的使用
  16. 2019最新《网易云课堂C++开发工程师案例-网吧收银系统(MFC+ADO)》
  17. 什么是模拟信号?什么是数字信号
  18. 使用赫夫曼编码进行解码
  19. ERROR 1044 (42000)Access denied for user @localhost to database
  20. 3个月周末,软考高级复习攻略,信息系统项目管理师考后总结

热门文章

  1. arcface mxnet转onnx
  2. python 图像计算方位角
  3. VS2010-2015对C++11/14/17特性的支持
  4. Cannot get Python include directory. Is distutils installed
  5. 逻辑回归原理(python代码实现)
  6. cuda安装和caffe
  7. Honor7x能用鸿蒙系统吗,家庭无缝覆盖:Honor 荣耀 发布 分布式路由 和 路由2
  8. linux strcpy 用法,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...
  9. linux看目录用的哪个磁盘,linux查看目录大小及硬盘大小
  10. 需要氪金吗_《天堂2:血盟》到底需不需要氪金?玩家:可以但是没有必要