zoukankan      html  css  js  c++  java
  • 基本算法概论

      基本算法主要分为以下四类:

    1、子结构类算法:分治法,动态规划,贪心法

      子结构问题主要是要知道怎么从子结构问题的解推出现在问题的解,最粗糙的是简单递归,在递归的基础上进行改进就形成了分治、动态规划和贪心

      分治法着重于从中间开始考虑

         动态规划着重从头尾考虑得到子结构,着重考虑从子结构推出现有结构,需要记录子结构值动态规划本质上只是减少了在递归过程中对子结构问题的重复求解,但是并没有缩小子结构问题的求解空间,所以有一些问题使用动态规划通常时间复杂度并没有减少到最小,这些问题通常需要更加巧妙的解法来实现最优的时间复杂度。

      贪心法着重于从整体开始考虑,找出最优值后得到子结构

    2、搜索类算法:回溯法,分支限界法, 深度优先搜索 ,广度优先搜索

      搜索类算法最粗糙的是暴力枚举。主要需要明确是否能有序穷举解空间。

      回溯法建立在深度优先搜索的基础上;

      分支限界法建立在广度优先的基础上(分支限界维护一个优先队列,按照广度优先扩展并计算优先值,然后放入优先队列中并选出最优点作为下一个扩展点)。 Dijkstra算法最好归结为分支限界,每次从队列中选择最短路径的最小值进行扩展。

    3、排序类算法:

    冒泡、插入、选择

    快排、归并、堆、希尔

    计数、基数、桶

    4、查找类算法:

    遍历查找、二分查找

    索引查找、哈希表

  • 相关阅读:
    剑指offer JZ-1
    侯捷《C++面向对象开发》--String类的实现
    侯捷《C++面向对象开发》--复数类的实现
    辛普森悖论
    马尔可夫链的平稳分布
    熵和基尼指数的一些性质
    UVA 11624 Fire!(广度优先搜索)
    HDU 4578 Transformation (线段树区间多种更新)
    HDU 1540 Tunnel Warfare(线段树+区间合并)
    多重背包
  • 原文地址:https://www.cnblogs.com/littlebugfish/p/4321695.html
Copyright © 2011-2022 走看看