《算法设计与分析(第二版)》课后答案

  • 更新时间:
  • 8700人关注
  • 点击下载

给大家带来的是关于算法相关的课后习题答案下载,介绍了关于算法设计、算法分析方面的内容,由关妙珍 网友提供,本资源目前已被123人关注,高等院校算法类教材综合评分为:8.3分

《算法设计与分析(第2版)》共分四部分:部分是基础知识,包括算法设计基础和算法分析基础;第二部分是基本的算法设计技术,包括蛮力法、分治法、减治法、动态规划法和贪心法;第三部分是基于搜索的算法设计技术,包括回溯法和分支限界法;第四部分是计算的限制,介绍了问题的复杂性、近似算法和概率算法。所有问题都用伪代码给出了算法描述,大多数问题都给出了C++语言的算法实现,并且所有程序均在VC++6.0环境下调试通过。每章均附有一篇阅读材料,以通俗易懂的方式介绍了算法领域的一些新研究成果。

《算法设计与分析(第2版)》内容丰富,深入浅出,结合应用,图例丰富,可作为高等院校计算机专业本科和研究生学习算法设计与分析的教材,也可供工程技术人员和自学者学习参考。

目录

  • 基础知识
  • 第1章 算法设计基础
  • 1.1 算法的基本概念
  • 1.1.1 算法及其重要特性
  • 1.1.2 算法的描述方法
  • 1.1.3 算法设计的一般过程
  • 1.2 为什么要学习和研究算法
  • 1.2.1 算法在问题求解中的地位
  • 1.2.2 算法训练能够提高计算思维能力
  • 1.2.3 算法研究是推动计算机技术发展的关键
  • 1.3 重要的问题类型
  • 1.3.1 查找问题
  • 1.3.2 排序问题
  • 1.3.3 图问题
  • 1.3.4 组合问题
  • 1.3.5 几何问题
  • 阅读材料——算法研究与图灵奖
  • 习题
  • 第2章 算法分析基础
  • 2.1 算法的时间复杂性分析
  • 2.1.1 输入规模与基本语句
  • 2.1.2 算法的渐进分析
  • 2.1.3 最好、最坏和平均情况
  • 2.1.4 非递归算法的时间复杂性分析
  • 2.1.5 递归算法的时间复杂性分析222.2 算法的空间复杂性分析
  • 2.3 算法
  • 2.3.1 问题的计算复杂性下界
  • 2.3.2 平凡下界
  • 2.3.3 判定树模型
  • 阅读材料——算法的实验分析
  • 习题
  • 第二部分 基本的算法设计技术
  • 第3章 蛮力法
  • 3.1 概述
  • 3.1.1 蛮力法的设计思想
  • 3.1.2 一个简单的例子——百元买百鸡问题
  • 3.2 查找问题中的蛮力法
  • 3.2.1 顺序查找
  • 3.2.2 串匹配问题
  • 3.3 排序问题中的蛮力法
  • 3.3.1 选择排序
  • 3.3.2 起泡排序
  • 3.4 组合问题中的蛮力法
  • 3.4.1 0/1背包问题
  • 3.4.2 任务分配问题
  • 3.5 图问题中的蛮力法
  • 3.5.1 哈密顿回路问题
  • 3.5.2 TSP问题
  • 3.6 几何问题中的蛮力法
  • 3.6.1 最近对问题
  • 3.6.2 凸包问题
  • 阅读材料——KMP算法中next值的计算
  • 习题
  • 第4章 分治法
  • 4.1 概述
  • 4.1.1 分治法的设计思想
  • 4.1.2 一个简单的例子——数字旋转方阵
  • 4.2 排序问题中的分治法
  • 4.2.1 归并排序
  • 4.2.2 快速排序
  • 4.3 组合问题中的分治法
  • 4.3.1 子段和问题
  • 4.3.2 棋盘覆盖问题
  • 4.4 几何问题中的分治法
  • 4.4.1 最近对问题
  • 4.4.2 凸包问题
  • 阅读材料——递归函数的执行过程
  • 习题
  • 第5章 减治法
  • 5.1 概述
  • 5.1.1 减治法的设计思想
  • 5.1.2 一个简单的例子——两个序列的中位数
  • 5.2 查找问题中的减治法
  • 5.2.1 折半查找
  • 5.2.2 二叉查找树
  • 5.2.3 选择问题
  • 5.3 排序问题中的减治法
  • 5.3.1 插入排序
  • 5.3.2 堆排序
  • 5.4 组合问题中的减治法
  • 5.4.1 淘汰赛冠军问题
  • 5.4.2 问题
  • 阅读材料——问题的复杂版本
  • 习题
  • 第6章 动态规划法
  • 6.1 概述
  • 6.1.1 多阶段决策过程
  • 6.1.2 动态规划法的设计思想
  • 6.1.3 一个简单的例子——数塔问题
  • 6.2 图问题中的动态规划法
  • 6.2.1 多段图的路径问题
  • 6.2.2 多源点路径问题
  • 6.2.3 TSP问题
  • 6.3 组合问题中的动态规划法
  • 6.3.1 递增子序列问题
  • 6.3.2 公共子序列问题
  • 6.3.3 0/1背包问题
  • 6.4 查找问题中的动态规划法
  • 6.4.1 二叉查找树
  • 6.4.2 近似串匹配问题
  • 阅读材料——人工神经网络
  • 习题
  • 第7章 贪心法
  • 7.1 概述
  • 7.1.1 贪心法的设计思想
  • 7.1.2 一个简单的例子——埃及分数
  • 7.2 图问题中的贪心法
  • 7.2.1 TSP问题
  • 7.2.2 图着色问题
  • 7.2.3 最小生成树问题
  • 7.3 组合问题中的贪心法
  • 7.3.1 背包问题
  • 7.3.2 活动安排问题
  • 7.3.3 多机调度问题
  • 阅读材料——贪心法的正确性证明
  • 习题
  • 第三部分 基于搜索的算法设计技术
  • 第8章 回溯法
  • 8.1 概述
  • 8.1.1 问题的解空间树
  • 8.1.2 回溯法的设计思想
  • 8.1.3 回溯法的时间性能
  • 8.1.4 一个简单的例子——素数环问题
  • 8.2 图问题中的回溯法
  • 8.2.1 图着色问题
  • 8.2.2 哈密顿回路问题
  • 8.3 组合问题中的回溯法
  • 8.3.1 八皇后问题
  • 8.3.2 批处理作业调度问题
  • 阅读材料——遗传算法
  • 习题
  • 第9章 分支限界法
  • 9.1 概述
  • 9.1.1 分支限界法的设计思想
  • 9.1.2 分支限界法的时间性能
  • 9.1.3 一个简单的例子——圆排列问题
  • 9.2 图问题中的分支限界法
  • 9.2.1 TSP问题
  • 9.2.2 多段图的路径问题
  • 9.3 组合问题中的分支限界法
  • 9.3.1 0/1背包问题
  • 9.3.2 任务分配问题
  • 9.3.3 批处理作业调度问题
  • 阅读材料——蚁群算法
  • 习题
  • 第四部分 计算的限制
  • 第10章 问题的复杂性
  • 10.1 问题的复杂性分类
  • 10.1.1 什么是计算
  • 10.1.2 可计算问题与不可计算问题
  • 10.1.3 易解问题与难解问题
  • 10.2 P类问题和NP类问题
  • 10.2.1 判定问题
  • 10.2.2 确定性算法与P类问题
  • 10.2.3 非确定性算法与NP类问题
  • 10.3 NP完全问题
  • 10.3.1 问题变换
  • 10.3.2 NP完全问题的定义
  • 10.3.3 基本的NP完全问题
  • 10.3.4 NP完全问题的计算机处理
  • 阅读材料——Cook定理
  • 习题
  • 第11章 近似算法
  • 11.1 概述
  • 11.1.1 近似算法的设计思想
  • 11.1.2 一个简单的例子——求π的近似值
  • 11.2 图问题中的近似算法
  • 11.2.1 顶点覆盖问题
  • 11.2.2 TSP问题
  • 11.3 组合问题中的近似算法
  • 11.3.1 装箱问题
  • 11.3.2 子集和问题
  • 阅读材料——粒子群算法
  • 习题
  • 第12章 概率算法
  • 12.1 概述
  • 12.1.1 概率算法的设计思想
  • 12.1.2 随机数发生器
  • 12.2 舍伍德型概率算法
  • 12.2.1 舍伍德型概率算法的设计思想
  • 12.2.2 快速排序
  • 12.2.3 二叉查找树
  • 12.3 拉斯维加斯型概率算法
  • 12.3.1 拉斯维加斯型概率算法的设计思想
  • 12.3.2 八皇后问题
  • 12.3.2 整数因子划分问题
  • 12.4 蒙特卡罗型概率算法
  • 12.4.1 蒙特卡罗型概率算法的设计思想
  • 12.4.2 主元素问题
  • 12.4.3 素数测试问题
  • 阅读材料——模拟淬火算法
  • 习题
  • 附录A 名词索引237参考文献作者介绍文摘序言部分 基础知识
  • 第1章 算法设计基础
  • 1.1 算法的基本概念
  • 1.1.1 算法及其重要特性
  • 1.1.2 算法的描述方法
  • 1.1.3 算法设计的一般过程
  • 1.2 为什么要学习和研究算法
  • 1.2.1 算法在问题求解中的地位
  • 1.2.2 算法训练能够提高计算思维能力
  • 1.2.3 算法研究是推动计算机技术发展的关键
  • 1.3 重要的问题类型
  • 1.3.1 查找问题
  • 1.3.2 排序问题
  • 1.3.3 图问题
  • 1.3.4 组合问题
  • 1.3.5 几何问题
  • 阅读材料——算法研究与图灵奖
  • 习题
  • 第2章 算法分析基础
  • 2.1 算法的时间复杂性分析
  • 2.1.1 输入规模与基本语句
  • 2.1.2 算法的渐进分析
  • 2.1.3 最好、最坏和平均情况
  • 2.1.4 非递归算法的时间复杂性分析
  • 2.1.5 递归算法的时间复杂性分析222.2 算法的空间复杂性分析
  • 2.3 算法
  • 2.3.1 问题的计算复杂性下界
  • 2.3.2 平凡下界
  • 2.3.3 判定树模型
  • 阅读材料——算法的实验分析
  • 习题
  • 第二部分 基本的算法设计技术
  • 第3章 蛮力法
  • 3.1 概述
  • 3.1.1 蛮力法的设计思想
  • 3.1.2 一个简单的例子——百元买百鸡问题
  • 3.2 查找问题中的蛮力法
  • 3.2.1 顺序查找
  • 3.2.2 串匹配问题
  • 3.3 排序问题中的蛮力法
  • 3.3.1 选择排序
  • 3.3.2 起泡排序
  • 3.4 组合问题中的蛮力法
  • 3.4.1 0/1背包问题
  • 3.4.2 任务分配问题
  • 3.5 图问题中的蛮力法
  • 3.5.1 哈密顿回路问题
  • 3.5.2 TSP问题
  • 3.6 几何问题中的蛮力法
  • 3.6.1 最近对问题
  • 3.6.2 凸包问题
  • 阅读材料——KMP算法中next值的计算
  • 习题
  • 第4章 分治法
  • 4.1 概述
  • 4.1.1 分治法的设计思想
  • 4.1.2 一个简单的例子——数字旋转方阵
  • 4.2 排序问题中的分治法
  • 4.2.1 归并排序
  • 4.2.2 快速排序
  • 4.3 组合问题中的分治法
  • 4.3.1 子段和问题
  • 4.3.2 棋盘覆盖问题
  • 4.4 几何问题中的分治法
  • 4.4.1 最近对问题
  • 4.4.2 凸包问题
  • 阅读材料——递归函数的执行过程
  • 习题
  • 第5章 减治法
  • 5.1 概述
  • 5.1.1 减治法的设计思想
  • 5.1.2 一个简单的例子——两个序列的中位数
  • 5.2 查找问题中的减治法
  • 5.2.1 折半查找
  • 5.2.2 二叉查找树
  • 5.2.3 选择问题
  • 5.3 排序问题中的减治法
  • 5.3.1 插入排序
  • 5.3.2 堆排序
  • 5.4 组合问题中的减治法
  • 5.4.1 淘汰赛冠军问题
  • 5.4.2 问题
  • 阅读材料——问题的复杂版本
  • 习题
  • 第6章 动态规划法
  • 6.1 概述
  • 6.1.1 多阶段决策过程
  • 6.1.2 动态规划法的设计思想
  • 6.1.3 一个简单的例子——数塔问题
  • 6.2 图问题中的动态规划法
  • 6.2.1 多段图的路径问题
  • 6.2.2 多源点路径问题
  • 6.2.3 TSP问题
  • 6.3 组合问题中的动态规划法
  • 6.3.1 递增子序列问题
  • 6.3.2 公共子序列问题
  • 6.3.3 0/1背包问题
  • 6.4 查找问题中的动态规划法
  • 6.4.1 二叉查找树
  • 6.4.2 近似串匹配问题
  • 阅读材料——人工神经网络
  • 习题
  • 第7章 贪心法
  • 7.1 概述
  • 7.1.1 贪心法的设计思想
  • 7.1.2 一个简单的例子——埃及分数
  • 7.2 图问题中的贪心法
  • 7.2.1 TSP问题
  • 7.2.2 图着色问题
  • 7.2.3 最小生成树问题
  • 7.3 组合问题中的贪心法
  • 7.3.1 背包问题
  • 7.3.2 活动安排问题
  • 7.3.3 多机调度问题
  • 阅读材料——贪心法的正确性证明
  • 习题
  • 第三部分 基于搜索的算法设计技术
  • 第8章 回溯法
  • 8.1 概述
  • 8.1.1 问题的解空间树
  • 8.1.2 回溯法的设计思想
  • 8.1.3 回溯法的时间性能
  • 8.1.4 一个简单的例子——素数环问题
  • 8.2 图问题中的回溯法
  • 8.2.1 图着色问题
  • 8.2.2 哈密顿回路问题
  • 8.3 组合问题中的回溯法
  • 8.3.1 八皇后问题
  • 8.3.2 批处理作业调度问题
  • 阅读材料——遗传算法
  • 习题
  • 第9章 分支限界法
  • 9.1 概述
  • 9.1.1 分支限界法的设计思想
  • 9.1.2 分支限界法的时间性能
  • 9.1.3 一个简单的例子——圆排列问题
  • 9.2 图问题中的分支限界法
  • 9.2.1 TSP问题
  • 9.2.2 多段图的路径问题
  • 9.3 组合问题中的分支限界法
  • 9.3.1 0/1背包问题
  • 9.3.2 任务分配问题
  • 9.3.3 批处理作业调度问题
  • 阅读材料——蚁群算法
  • 习题
  • 第四部分 计算的限制
  • 第10章 问题的复杂性
  • 10.1 问题的复杂性分类
  • 10.1.1 什么是计算
  • 10.1.2 可计算问题与不可计算问题
  • 10.1.3 易解问题与难解问题
  • 10.2 P类问题和NP类问题
  • 10.2.1 判定问题
  • 10.2.2 确定性算法与P类问题
  • 10.2.3 非确定性算法与NP类问题
  • 10.3 NP完全问题
  • 10.3.1 问题变换
  • 10.3.2 NP完全问题的定义
  • 10.3.3 基本的NP完全问题
  • 10.3.4 NP完全问题的计算机处理
  • 阅读材料——Cook定理
  • 习题
  • 第11章 近似算法
  • 11.1 概述
  • 11.1.1 近似算法的设计思想
  • 11.1.2 一个简单的例子——求π的近似值
  • 11.2 图问题中的近似算法
  • 11.2.1 顶点覆盖问题
  • 11.2.2 TSP问题
  • 11.3 组合问题中的近似算法
  • 11.3.1 装箱问题
  • 11.3.2 子集和问题
  • 阅读材料——粒子群算法
  • 习题
  • 第12章 概率算法
  • 12.1 概述
  • 12.1.1 概率算法的设计思想
  • 12.1.2 随机数发生器
  • 12.2 舍伍德型概率算法
  • 12.2.1 舍伍德型概率算法的设计思想
  • 12.2.2 快速排序
  • 12.2.3 二叉查找树
  • 12.3 拉斯维加斯型概率算法
  • 12.3.1 拉斯维加斯型概率算法的设计思想
  • 12.3.2 八皇后问题
  • 12.3.2 整数因子划分问题
  • 12.4 蒙特卡罗型概率算法
  • 12.4.1 蒙特卡罗型概率算法的设计思想
  • 12.4.2 主元素问题
  • 12.4.3 素数测试问题
  • 阅读材料——模拟淬火算法
  • 习题
  • 附录A 名词索引237参考文献
展开阅读
精选笔记1:java查找无向连通图中两点间所有路径的算法

5小时17分钟前回答

之前就这个问题发帖求教过,过了几天没看到回复就没再关心。后来自己设计了一个算法,在公司的项目中实践了一下,效果还可以,贴出来供大家参考。

算法要求:

1. 在一个无向连通图中求出两个给定点之间的所有路径;
2. 在所得路径上不能含有环路或重复的点;

算法思想描述:

1. 整理节点间的关系,为每个节点建立一个集合,该集合中保存所有与该节点直接相连的节点(不包括该节点自身);

2. 定义两点一个为起始节点,另一个为终点,求解两者之间的所有路径的问题可以被分解为如下所述的子问题:对每一个与起始节点直接相连的节点,求解它到终点的所有路径(路径上不包括起始节点)得到一个路径集合,将这些路径集合相加就可以得到起始节点到终点的所有路径;依次类推就可以应用递归的思想,层层递归直到终点,若发现希望得到的一条路径,则转储并打印输出;若发现环路,或发现死路,则停止寻路并返回;

3. 用栈保存当前已经寻到的路径(不是完整路径)上的节点,在每一次寻到完整路径时弹出栈顶节点;而在遇到从栈顶节点无法继续向下寻路时也弹出该栈顶节点,从而实现回溯。

算法伪码(java描述):

public Stack stack = new Stack();/*临时保存路径节点的栈*/
public ArrayList sers = new ArrayList();/*存储路径的集合*/

public class Node/*表示一个节点以及和这个节点相连的所有节点*/
  {
    public String name = null; 
    public ArrayList relationNodes = new ArrayList();
   
    public String getName()
    {
      return name;
    }
    
    public void setName(String name)
    {
      this.name = name;
    }
    
    public ArrayList getRelationNodes()
    {
      return relationNodes;
    }
    
    public void setRelationNodes(ArrayList relationNodes)
    {
      this.relationNodes = relationNodes;
    }
  }

public boolean isNodeInStack(Node node)/*判断节点是否在栈中*/
  {
    Iterator it = stack.iterator();
    while(it.hasNext())
    {
      Node node1 = (Node)it.next();
      if(node == node1)
        return true;
    }
    return false;
  }

public void showAndSavePath ()/*此时栈中的节点组成一条所求路径,转储并打印输出*/
  {
    Object[] o = stack.toArray();
    for(int i = 0;i<o.length;i++)
    {
      System.out.print(o[i]);
    }
    sers.add(o); /*转储*/
    System.out.println("\n");
  }

/*寻找路径的方法*/
public boolean getPaths(Node cNode, Node pNode, Node sNode, Node eNode)
/*cNode表示当前的起始节点currentNode,pNode表示当前起始节点的上一节点previousNode,sNode表示最初的起始节点startNode,eNode表示终点endNode*/
  {
    Node nNode = null;
    if(cNode != null && pNode != null && cNode == pNode)
      return false;/*如果符合条件判断说明出现环路,不能再顺着该路径继续寻路,返回false*/
    if(cNode != null)
    {
      int i = 0;
      stack.push(cNode);/*起始节点入栈*/
      if(cNode == eNode)/*如果该起始节点就是终点,说明找到一条路径*/
      {
        showAndSavePath();/*转储并打印输出该路径,返回true*/
        return true;
      }
      Else/*如果不是,继续寻路*/
      {
        nNode = cNode.getRelationNodes().get(i);/*从与当前起始节点cNode有连接关系的节点集中按顺序遍历得到一个节点作为下一次递归寻路时的起始节点*/
        while(nNode != null)
        {
          if(pNode != null && (nNode == sNode 
              || nNode == pNode 
              || isNodeInStack(nNode)))/*如果nNode是最初的起始节点或者nNode就是cNode的上一节点或者nNode已经在栈中,说明产生环路,应重新在与当前起始节点有连接关系的节点集中寻找nNode*/
          {
            i++;
            if(i>=cNode.getRelationNodes().size())
              nNode = null;
            else
              nNode = cNode.getRelationNodes().get(i);
            continue;
          }
/*以nNode为新的起始节点,当前起始节点cNode为上一节点,递归调用寻路方法*/
          if(getPaths(nNode, cNode, sNode, eNode))/*递归调用*/
          {
            stack.pop();/*如果找到一条路径,则弹出栈顶节点*/
          }
          i++;/*继续在与cNode有连接关系的节点集中测试nNode*/
          if(i>=cNode.getRelationNodes().size())
            nNode = null;
          else
            nNode = cNode.getRelationNodes().get(i);
        }
        stack.pop();/*当遍历完所有与cNode有连接关系的节点后,说明在以cNode为起始节点到终点的路径已经全部找到*/
        return false;
      }
    }
    else
      return false;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

展开阅读
精选笔记2:php结合md5的加密解密算法实例

4小时44分钟前回答

本文实例讲述了php结合md5的加密解密算法。分享给大家供大家参考,具体如下:

<?php
/*
* Created on 2016-9-30
*
*/
function encrypt($data, $key)
{
 $key = md5($key);
  $x = 0;
  $len = strlen($data);
  $l = strlen($key);
  for ($i = 0; $i < $len; $i++)
  {
    if ($x == $l)
    {
     $x = 0;
    }
    $char .= $key{$x};
    $x++;
  }
  for ($i = 0; $i < $len; $i++)
  {
    $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
  }
  return base64_encode($str);
}
function decrypt($data, $key)
{
 $key = md5($key);
  $x = 0;
  $data = base64_decode($data);
  $len = strlen($data);
  $l = strlen($key);
  for ($i = 0; $i < $len; $i++)
  {
    if ($x == $l)
    {
     $x = 0;
    }
    $char .= substr($key, $x, 1);
    $x++;
  }
  for ($i = 0; $i < $len; $i++)
  {
    if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
    {
      $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
    }
    else
    {
      $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
    }
  }
  return $str;
}
$data = '码农之家www.jb51.net'; // 被加密信息
$data=iconv("gbk","utf-8",$data);
$key = 'www.jb51.net';   // 密钥
$encrypt = encrypt($data, $key);
$decrypt = decrypt($encrypt, $key);
echo $encrypt, "<br/>", $decrypt;
?>

运行结果如下:

TrXMTM8SFB3DGhTr2qeuYqOXZmpmn8mo
码农之家www.jb51.net

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe

高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《php面向对象程序设计入门教程》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

展开阅读

算法相关资源

  • 并行计算:结构·算法·编程(修订版)

    并行计算:结构·算法·编程(修订版)

    并行计算-结构·算法·编程(修订版) 作者:陈国良 出版日期:2003-8-10 本书是教育部“高等教育面向21世纪教学内容和课程体系改革计划”的研究成果,是面向21世纪课程教材和教育部理科计算机应用“九五”规划教材。 本书以并行计算为主题,主要讨论并行计算的硬件基础——当代并行计算机系统及其结构模型,并行计算的核心内容——并行算法设计与并行数值算法以及并行计算的软件支持——并行程序的设计原理与方法。本书强调融并行机结构、并行

    大小:10MB算法

    立即下载
  • 轻松学算法:互联网算法面试宝典

    轻松学算法:互联网算法面试宝典

    《轻松学算法互联网算法面试宝典》 共分为12 个章节,首先介绍了一些基础的数据结构,以及常用的排序算法和查找算法;其次介绍了两个稍微复杂一些的数据结构树和图,还介绍了每种数据

    大小:50.3 MB算法

    立即下载
  • 算法设计

    算法设计

    这是一本关于算法设计和分析的经典教材。本书围绕算法设计进行组织,对每种算法技术选择了多个典型范例进行分析,把算法的理论跟实际存在的问题结合起来,具有很大的启发性。本书侧重算法设计思路,每章都从实际问题出发,经过深入具体的分析引出相应算法的设计思想,并对算法的正确性和复杂性进行合理的分析和论证。本书覆盖面广,且含有200多道精彩的习题,最后还扩展了PSPACE问题、参数复杂性等内容。 本书适合作为计算机及相近专业本

    大小:97 MB算法

    立即下载
  • 计算机算法基础(第3版)

    计算机算法基础(第3版)

    《计算机算法基础第三版》是2003年2月华中科技大学出版社出版的图书,由余祥宣编写。本书主要介绍了数学预备知识、导引与基本数据结构、递归算法等计算机算法知识。 目录 第一章数学预备知识 第二章导引与基本数据结构 第三章递归算法 第四章分治法 第五章贪心方法 第六章动态规划 第七章基本检索与周游方法 第八章回溯法 第九章分枝-限界法 第十章NP-难度和NP-完全的问题 第十一章并行算法 参考文献

    大小:38.2 KB计算机算法

    立即下载
  • Python数据结构与算法分析

    Python数据结构与算法分析

    若把撰写代码比成急行军打战,那麼要想独霸战场,不可以光靠手上的尖刀,还需深得古语。Python是一把尖刀,数据结构与优化算法则是古语。只能通读古语,才可以使尖刀无坚不摧。《 Pyt

    大小:10.4 MBPython

    立即下载

学习笔记

16小时9分钟前回答

java使用栈的迷宫算法的实例代码

本文为大家分享了使用栈的迷宫算法java版,主要考察栈的使用,供大家参考,具体内容如下 主要思路如下: do { if(当前位置可通过) { 标记此位置已走过; 保存当前位置并入栈; if(当前位置为终点) { 程序结束; } 获取下一个位置; } else { if(栈非空) { 出栈; while(当前位置方向为4且栈非空) { 标记当前位置不可走; 出栈; } if(当前位置的方向小于4) { 方向+1; 重新入栈; 获取下一个位置; } } }}while (栈非空); java代码如下: import java.util.Stack;public class Maze { // 栈 private StackMazeNode stack = new StackMaze.MazeNode(); // 迷宫 private int[][] maze = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1}, {1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1}, {1,0……

17小时4分钟前回答

java数据结构和算法中哈希表知识点详解

树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希表; 1.哈希表简介 哈希表(hash table)是一种数据结构,提供很快速的插入和查找操作(有的时候甚至删除操作也是),时间复杂度为O(1),对比时间复杂度就可以知道哈希表比树的效率快得多,并且哈希表的实现也相对容易,然而没有任何一种数据结构是完美的,哈希表也是;哈希表最大的缺陷就是基于数组,因为数组初始化的时候大小是确定的,数组创建后扩展起来比较困难; 当哈希表装满了之后……