算法与数据结构
zhuhai__yizhi
这个作者很懒,什么都没留下…
展开
-
动态规划0—1背包问题
动态规划0-1背包问题Ø 问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?Ø 对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态可以取0和1.我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-11背包问题。转载 2015-04-19 12:28:41 · 649 阅读 · 0 评论 -
折半查找
public class Test { public static void main(String[] args) { int[] intArr = { 1, 1, 1, 7, 7, 10, 11, 12, 13, 14, 54, 54, 66, 90, 267, 345, 456, 789, 45654 }; System.out.println(binarySearch(i原创 2015-04-15 15:14:44 · 400 阅读 · 0 评论 -
数据结构关于AOV与AOE网的区别
AOV网,顶点表示活动,弧表示活动间的优先关系的有向图。 即如果a->b,那么a是b的先决条件。AOE网,边表示活动,是一个带权的有向无环图, 其中顶点表示事件,弧表示活动,权表示活动持续时间。按我理解,你要求拓扑序列就是AOV,求关键路径就是AOEAOV-网 :用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表 示活动的网(Ac转载 2015-04-16 10:14:16 · 20424 阅读 · 1 评论 -
归并排序
1、归并排序是将一个数组分为两半,对这两半分别排序,再将它们合并为一个有序的数组。2、归并排序的算法通常是以递归的形式表达的。3、分治法,如果将一个问题分解成两个或多个规模更小却截然不同的问题,分别解决每个问题,再将它们的解法组合起来解决问题。4、分治法不一定要表达成递归的形式。5、目前递归都没有用上分治法。转载 2015-04-15 10:46:31 · 405 阅读 · 0 评论 -
归并算法的实现
public class Test { public static void main(String[] args) { int[] intArr = { 267, 66, 12, 7, 90, 7, 789, 54, 54, 456, 45654, 0, 345 }; int count = intArr.length; for (int i = 0; i < intArr.len原创 2015-04-15 14:11:41 · 438 阅读 · 0 评论 -
堆排序
堆是一个完全二叉树,树中每个结点对应于原始数据的一个记录,并且每个结点应满足一下条件:非叶结点的数据大于或者等于其左、右孩子结点的数据(若是按从大到小的顺序排序,则要求非叶结点的数据小于或者等于其左,右孩子结点的数据)。由堆的定义可看出,其根结点为最大值,堆排序就是利用这一特点进行的。堆排序过程包括两个阶段:(1)将无序的数据构成堆(即用无序数据生成满足堆定义的完全二叉树)。转载 2015-04-15 15:55:29 · 386 阅读 · 0 评论 -
最短路径
典型用途:交通问题。如:城市A到城市B有多条线路,但每条线路的交通费(或所需时间)不同,那么,如何选择一条线路,使总费用(或总时间)最少?问题抽象:在带权有向图中A点(源点)到达B点(终点)的多条路径中,寻找一条各边权值(可以代表时间或费用等)之和最小的路径,即最短路径。两种常见的最短路径问题一、单源最短路径---用Dijkstra(迪杰斯特拉)算法。二、所有顶转载 2015-04-16 16:27:37 · 626 阅读 · 0 评论 -
利用栈将中缀表达式转换成后缀表达式
目的:将中缀表达式(即标准形式的表达式)转换为后缀式。例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+ 转换原则:1.当读到一个操作数时,立即将它放到输出中。操作符则不立即输出,放入栈中。遇到左圆括号也推入栈中。2.如果遇到一个右括号,那么就将栈元素弹出,将符号写出直到遇到一个对应的左括号。但是这个左括号只被弹出,并不输出。3.在转载 2015-04-17 14:35:37 · 798 阅读 · 0 评论 -
【Java数据结构的实现】之系列三栈的实现(使用栈计算后缀表达式)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://enetq.blog.51cto.com/479739/713534【Java数据结构的实现】之系列三栈的实现(使用栈计算后缀表达式)上讲介绍了栈的介绍,最后并给出了栈的抽象数据类型1.1本章学习目标中、后缀表达式简介后缀表达式的实现转载 2015-04-17 15:04:03 · 854 阅读 · 0 评论 -
回溯法解决问题的3个步骤
(1)针对所给问题,定义问题的解空间;(2)确定易于搜索的解空间结构;(3)以深度优先的方式搜索解空间;(4)回溯法搜遍整个解空间,最后得到最优解。N皇后问题也是回溯方法的典型应用。转载 2015-04-14 10:47:25 · 8267 阅读 · 0 评论 -
基数排序
1基数排序不是可比较的排序。它没有比较对象。但是必须对所要排序的数据做一些限定。2它将数组元素作为长度相等的字符串对待的。3它不适合作为通用的排序算法。4比如将所有的数字加0,使其长度相等。5比如数字23变成字符串023,然后先根据末尾3,把数字放到新数与中。末尾数字相同,则放在同一个位置的后面。依次再按照2,再按0进行排序。 public class Test {原创 2015-04-14 20:46:18 · 453 阅读 · 0 评论 -
动态规划之01背包问题(最易理解的讲解)
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。Pi转载 2015-04-19 12:30:59 · 782 阅读 · 0 评论 -
通过金矿模型介绍动态规划
http://www.cnblogs.com/sdjl/articles/1274312.html 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有转载 2015-04-19 12:27:29 · 482 阅读 · 0 评论 -
贪心算法
贪心法是一种不追求最优解,只希望得到较为满意的解的方法。贪心法一般可以快速得到满意的解。因为它省去了为找最优解要穷尽所有可能解而必须耗费的大量时间。贪心法常以当前情况为基础作最有选择,而不考虑各种可能的整体情况,所以贪心法不要回溯。例子:平时购物找钱时,为使找回的零钱硬币最少,不考虑找零钱所有的各种方案,而是从最大面值的币种开始,按递减的顺序考虑各种币种,先尽量转载 2015-04-14 13:49:05 · 581 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序的原理及比较
public class Test { public static void main(String[] args) { int arr[] = {23,34,34,53,67,77,77, 45, 46, 457,657 ,676,8, 876, 3}; bubbleSort(arr); //selectSort(arr); //insertSort(arr); for (原创 2015-04-14 23:12:21 · 750 阅读 · 0 评论 -
树的深度优先与广度优先遍历
原题出自百度的笔试:简述树的深度优先及广度优先遍历算法,并说明非递归实现。 当时我看到这个题目的时候,已经完全记不得非递归算法该怎么实现了,后来查阅了一下,要用到两个辅助的数据结构:深度优先遍历--->栈;广度优先遍历--->队列;这里以二叉树为例来实现。Java代码 import java.util.ArrayDe转载 2015-04-14 14:06:07 · 678 阅读 · 0 评论 -
关于二叉树的几种遍历方法
转载请注明出处http://blog.csdn.net/pony_maggie/article/details/38390513作者:小马一 二叉树的一些概念二叉树就是每个结点最多有两个子树的树形存储结构。先上图,方便后面分析。 1 满二叉树和完全二叉树 上图就是典型的二叉树,其中左边的图还叫做转载 2015-04-14 14:04:03 · 502 阅读 · 0 评论 -
二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。如右图所示的转载 2015-04-14 14:06:01 · 465 阅读 · 0 评论 -
树的遍历与二叉树的遍历区别
先序,后序,中序针对二叉树。深度、广度针对普通树。(1)深度遍历:从树根开始扫描,顶层扫描完了,从一层最左(也可以右)面的结点往下层扫描,直到下层已无结点,这时所有靠最左(右)的结点全部扫描完毕,从树梢往上退一层,看这层旁有无兄弟结点,有的话还是一样从最左(右)边开始扫描,这是个递归概念,利用这一方法来遍历整棵树。(2)广度遍历:从树根开始扫描,顶层扫描完了,扫描一层的转载 2015-04-14 14:08:28 · 1998 阅读 · 0 评论 -
中缀表达式转化为后缀表达式
package com.readcity.proxy;import java.util.Stack;class MiddleEvaluator { private static final char ADD = '+'; private static final char SUB = '-'; private static final char MUL = '*原创 2015-04-17 17:05:00 · 462 阅读 · 0 评论