`
128kj
  • 浏览: 600428 次
  • 来自: ...
社区版块
存档分类
最新评论
文章列表
1、最优二叉搜索树的动态规则算法 二叉搜索树是一颗满足如下条件的树: 1.每个节点包含一个键值 2.每个节点有最多两个孩子 3.对于任意两个节点x和y,它们满足下述搜索性质: a)如果y在x 的左子树里,则key[y] <=key[x] b)如果y在x的右子树里,则key[y]>=key[x]   基于统计知识,我们可统计出一个数表(集合)中各元素的查找概率,理解为集合各元素的出现频率。比如中文输入法字库中各词条(单字、词组等)的先验概率,针对用户习惯可以自动调整词频——所谓动态调频、高频先现原则,以减少用户翻查次数。这就是最优二叉查找树问题:查找过程中键值比较次数最少,或者说希 ...
  Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理带权有向图或负权的最短路径问题     解决此问题有两种方法:其一是分别以图中每个顶点为源点共调用n次Dijkstrahttp://128kj.iteye.com/blog/1678532算法;其二是采用Floyd算法。两种算法的时间复杂度均为O(n3),但后者形式上比较简单。     Floyd算法的基本思想:     (1)利用二维数组dist[i][j]记录当前vi到vj的最短路径长度,数组dist的初值等于图的带权邻接矩阵;     (2)集合S记 ...
好文章,来自:http://blog.csdn.net/shuqin1984/archive/2010/09/02/5859223.aspx   0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进对动态规划法机制的理解和掌握。    值得提及的一个问题是,在用 JAVA 实现时, 是按算法模型建模,还是用对象模型建模呢? 如果用算法模型,那么背包的值、重量就直接存入二个数组里;如果用对象模型,则要对背包以及背包问题进行对象建模。思来想去,还是采用了对象模型,尽管心里感觉算法模型似乎更好一些。有时确实 ...
例一:   给出N台电脑和K辆卡车,要求每辆卡车至少放一台电脑。问共有多少种放法运走这些电脑? 数据范围N (1<=N<=200) and K(1<=K<=N)。 [输入输出]:    输入的每一行是空格隔开的电脑数n和卡车数k ,输出对应的运法总数 ...
例一:计算二项式系数:    在排列组合里面,我们有下面的式子(很容易用组合的定义来证明):    这个式子将C(n , k)的计算问题表述为了(问题描述)C(n-1 , k -1)和C(n -1, k)两个较小的重叠子问题。 /* * 用动态规划算法 ...
    动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。      动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决。 1)动态规划是运筹学中用于求解决策过程中的最优化数学方法。 当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。它是应用数学中用于解决某类最优化问题的重要工具。 2)如果问 ...
贪心法求解着色问题。   给图的所有结点着色,限制是一条边的两个端点不能用同样的颜色,要求所使用的不同颜色的数目最少。 “贪心”算法的思想是首先  用第一种颜色对图中尽可能多的顶点着色(“尽可能多”表现出“贪心”);然后用第二种颜色对余下的顶点中尽可能多的顶点着色;如此等等,直到把所有的顶点都着完色。当用一种新颜色对余下的顶点着色时,我们采取下列步骤: (1)选取某个未着色的顶点,并且用新颜色对它着色。 (2)扫描所有未着色的顶点集,对其中的每个顶点,确定它是否与已着新颜色的任何顶点相邻。若不相邻,则用新颜色对它着色。 while  有结点未着色;    {  选择一种新颜色;    ...
题目翻译:    当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。如果相邻的中继器使用不 ...
    贪心算法是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解。    例如平时购物找钱时,为使找回的零钱的硬币数最少,不考虑找零钱的所有各种方案, 而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使用贪婪法。这种方法在这里总是最优,是因为银行对其发行的硬币种类和硬币面值的巧妙安排。    如只有面值分别为1、5和11单位的硬币,而希望找回总额为15单位的硬币。按贪婪算法,应找1个11单位面值的硬币和4 ...
   穷举法,或称为暴力破解法(名字来源于对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止)是程序设计中使用得最为普遍(并不是在被逼无奈时最后的狂吼)之一,它利用计算机运算速度快、精确度高的特点, ...
   哈希表中的每个位置称为桶(bucket),当发生哈希冲突时就以链表形式存放多个元素。 链地址法处理Hash冲突,看看下面代码,模拟了JDK中的HashSet: class Node{//节点数据结构 private Object value;//节点的值 private Node next;//链 ...
今天就聊聊这个”五大经典查找“中的最后一个”二叉排序树“,又叫二叉查找树。 1. 概念 如图就是一棵二叉排序树: 2.实际操作:     我们都知道,对一个东西进行操作,无非就是增删查改,接下来我们就聊聊其中的基 ...
大家可否知道,其实查找中有一种O(1)的查找,即所谓的秒杀。 第三:哈希查找:      对的,他就是哈希查找,说到哈希,大家肯定要提到哈希函数,呵呵,这东西已经在我们脑子里面形成固有思维了。大家一定要知道“哈希“中的对应关系。      比如说: ”5“是一个要保存的数,然后我丢给哈希函数,哈希函数给我返回一个”2",那么此时的”5“和“2”就建立一种对应关系,这种关系就是所谓的“哈希关系”,在实际应用中也就形成了”2“是key,”5“是value。     那么有的朋友就会问如何做哈希,首先做哈希必须要遵守两点原则:           ①:  key尽可能的分散,也就是我 ...
网上看到《五大经典查找》,学习了。原文代码用C#,这里用java,顺便对照一下两种语言的语法。   在我们的生活中,无处不存在着查找,比如找一下班里哪个mm最pl,猜一猜mm的芳龄....... 对的这些都是查找。 在我们的算法中,有一种叫做线性查找。 分为:顺序查找。       折半查找。 查找有两种形态: 分为:(1)破坏性查找    比如有一群mm,我猜她们的年龄,第一位猜到了是23+,此时这位mm已经从我脑海里面的mmlist中remove掉了。哥不找23+的,所以此种查找破坏了原来的结构。       (2)非破坏性查找, 这种就反之了,不破坏结构。 一、顺序 ...
堆排序的应用:从1亿条数据中从大到小取前10000条 import java.util.Arrays; import java.util.Date; import java.util.Random; public class Top10000{ public static void main(String[] args) { find(); } public static void find( ) {// int number = 1000000000;// 一亿条数据 ...
Global site tag (gtag.js) - Google Analytics