摘要: 分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点,继续搜索。 选择下一个E-结点的方式不同,则会有几种不同的分支搜索方式。 1)FI 阅读全文
posted @ 2012-04-02 19:14 Lab_HIT 阅读(112) 评论(0) 推荐(1) 编辑
摘要: 1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。2、基本思想在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发 阅读全文
posted @ 2012-04-02 19:12 Lab_HIT 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 贪心算法一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、贪心算法的基本思路: 1.建立数学模型来描述问题。 2.把求解的问题分成若干个子问题。 3.对每一子问题求解,得到子问题的局部最优解。 4.把子问题的解局部最优解合成原来解 阅读全文
posted @ 2012-04-02 19:10 Lab_HIT 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一 阅读全文
posted @ 2012-04-02 19:09 Lab_HIT 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题 阅读全文
posted @ 2012-04-02 19:08 Lab_HIT 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 个人总结Dijkstra算法的要点总结:1.该算法需要两个重要的数据结合结构,集合S、T,S集合中存放已经找到最短路径的节点,T集合中则为S集合的补集,为还未找到阻断路径的节点集合2.算法开始时将源点o放入S集合,并初始化各节点到源点的最短路径,如果之间不相通,距离为无穷大,否则,当前最短路径为到源点o的直接距离3.整个算法过程为不断从T集合寻找当前最短路径的节点,并将其从T集合转移到S集合,直到T集合为空,算法结束4.每次从T集合中提取当前最短路径的节点之后需要更新T集合中每个节点的当前最短路径,更新方法为:获取T中节点Ti,依次用S中的每个节点Si,将Si的最短路径长度加上Si到Ti的距离 阅读全文
posted @ 2012-04-02 19:07 Lab_HIT 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 信号量信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。本节将从以下几个方面进行介绍--一. 信号量的概念二. 实例一. 信号量的概念1. 信号量的类型定义每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述) semaphore = record value: integer; queue: ^PCB; end; 其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。s.value>=0时,s.queue为空; s.v... 阅读全文
posted @ 2012-04-02 19:04 Lab_HIT 阅读(320) 评论(0) 推荐(1) 编辑
摘要: 快速排序及其分析2011-07-27 14:35 by zabery, 679 visits,收藏,编辑前言快速排序的平均情况下是O(nlogn),但是一般都比其他运行时间为O(nlogn)的算法都要快,因为它隐藏的常数因子比较小,但是在最坏情况之下,快速排序的运行时间是O(n2)。快速排序过程快速排序采用的思想是分治思想,就像合并排序算法的思想一样,合并排序算法是从数组的中间开始分治,直到分为N个分组,最后分别合并N个分组的解。如下图,有原始数组A = {1, 3, 4, 5, 7, 2, 6, 8, 0}快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分 阅读全文
posted @ 2012-04-02 19:04 Lab_HIT 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 堆(heap)和栈(stack)有什么区别?? 简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区 阅读全文
posted @ 2012-04-02 19:03 Lab_HIT 阅读(219) 评论(0) 推荐(0) 编辑
摘要: Android用户事件输入路径1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题。按键,鼠标等用户消息消息的处理可分为不同的情况进行判定:(1)用户输入根据系统状况是否应该派送。如在ScreenOff的情况下,在按键属于特殊按键的情况下等(2)是否有拦截Listener(3)对按键事件来讲,是否存在输入法(4)是否是焦点终点(5)是否为焦点切换按相关键这些情况都是设计输入路径需要考虑的基本条件。1.1一般的输入路径设计该输入路径实际上是指的按键消息(MSG_KEYDOWN,MSG_KEYUP, MSG_L 阅读全文
posted @ 2012-04-02 19:01 Lab_HIT 阅读(274) 评论(0) 推荐(0) 编辑
摘要: /frameworks/base/services/java/InputMethodManagerService.java这是整个系统当中,一切与输入法有关的地方的总控制中心。它通过管理下面三个模块来实现系统的输入法框架。1、/frameworks/base/services/java/WindowManagerService负责显示输入法,接收用户事件。2、/frameworks/base/core/java/android.inputmethodservice/InputMethodService输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过commitText提交出来。要做一个像 阅读全文
posted @ 2012-04-02 19:00 Lab_HIT 阅读(740) 评论(0) 推荐(0) 编辑
摘要: 1.机制介绍 Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能成为java的反射机制。Java的反射机制使得java具有了动态语言的特性。2.Java反射机制可以提供的功能 1)做暗箱调试,可以在程序运行时动态获取已经存在对象的所有变量(包括私有变量),检查变量的值 2)在运行时动态创建一个类的对象 3)在运行时判断任意一个对象所属的类 4)在运行时调用任意一个对象的方法 5)在运行时操作任意一个对象的属性3.Java反射机制的优点 ... 阅读全文
posted @ 2012-04-02 18:59 Lab_HIT 阅读(272) 评论(0) 推荐(0) 编辑
摘要: Java虚拟机类加载顺序 Java虚拟机类加载顺序当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构:bootstrap classloader|extension classloader|system classloaderbootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。在Sun的JVM中,在执行java的命令中使用-Xbootclasspath选项或使用 - D选项指定sun.boot.class.path系统属性值可以指定附加的类。这个加载器的是非常特殊的,它实际上不是 java.lang.ClassLo 阅读全文
posted @ 2012-04-02 18:58 Lab_HIT 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。3. Java中的数据类型有两种。 一种是基本类型(primitive types), 共有8种,即int, short. 阅读全文
posted @ 2012-04-02 18:58 Lab_HIT 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 1.Java中的数据类型 Java中有3个数据类型:基本数据类型(在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型)、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。 下列语句声明了一些变量:int k ;A a; //a是A数据类型的对象变量名。B b1,b2,…,b10000;// 假定B是抽象类或接口。String s; 注意:从数据类型与变量的角度看,基本数据类型变量k、类类型变量a和s、抽象类或接口类型变量b(1万个),它们都是变量(标识符)。2.关于句柄(handle) 为了区别引用类 阅读全文
posted @ 2012-04-02 18:56 Lab_HIT 阅读(302) 评论(0) 推荐(0) 编辑