- 浏览: 155146 次
- 性别:
- 来自: 武汉
-
最新评论
-
hardPass:
貌似二分法,没有一个合并的过程
简单_分治算法 -
zhufeng1981:
讲解的不错,支持一下。
简单_分治算法 -
a346063587:
嗯。。的确,基础很重要!
关于递归和尾递归的原理 -
zhufeng1981:
huoyj 写道基础很重要,这是永远不变的真理。 很赞同这句话 ...
关于递归和尾递归的原理 -
huoyj:
基础很重要,这是永远不变的真理。 很赞同这句话
关于递归和尾递归的原理
文章列表
java.util.logging包的学习
- 博客分类:
- java
package sunfa.lx;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.loggin ...
mybatis中的一个OOXX
- 博客分类:
- java
mybatis :
mybatis XML中执行多条语句:
<update id="dao-bs_cc_o_stk_sq_item.update.zlljg" parameterType="hashmap">
begin update bs_cc_store_info t set t.cc_jgzt=3 where t.kbh=#{kbh};
update bs_cc_store_info t set t.bs_lock_status=0,t.bs_kb_status=0,t.bs_lock_ldd=1 where t.kbh=#{kb ...
yeshaoting 写道
算法描述:
一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。
设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。
可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。
思路:
我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。
这里面不需要用到快排吧。。那样的话还能叫o(1)?
贴上我的code:用了个最大栈保存添加路径上的最大值,删除的时候如果相等撤销最大值栈中的顶部 ...
<转>李开复:算法的力量
- 博客分类:
- 数据结构与算法
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为 学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机 算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库 原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没 有功力,是不可能成 ...
分治算法,多么简单的思想!可是它无处不在。btree,b+树中都有它的身影!
1、分治算法:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。
2、二分法:利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是经常采用的一种有效的方法,例如二分法检索。
3、解题步骤:分治法解题的一般步骤:
(1)分解,将要解决的问题划分成若干规模较小的同类问题;
(2)求解,当子问题划分得足够小时,用较简单的方法解决;
(3)合并,按原问 ...
由HashMap的实现联想到的
- 博客分类:
- 数据结构与算法
首先温故一下java.util.HashMap的实现
int i = indexFor(hash, table.length);
static int indexFor(int h, int length) {
return h & (length-1);
}
原理:java中的HashMap是基于哈希表的 Map 接口的实现,内部是用数组+链表实现的,性能方面 哈希表>二叉树>线性表.为什么哈希表这么快呢?通过查看源码得知
通过把哈希值和数组长度进行与运算,为什么要进行与运算呢?因为与运算后得到的数字一定大于等于0并且小于等于数组长度。
(&am ...
我们可以看到,如果一个二叉排序树节点插入的顺序是随机的,这样我们得到的二叉排序树大多数情况下是平衡的,即使存在一些极端情况,但是这种情况发生的概率很小,所以我们可以这样建立一颗二叉排序树,而不必要像AVL那样旋转,可以证明随机顺序建立的二叉排序树在期望高度是,但是某些时候我们并不能得知所有的带插入节点,打乱以后再插入。所以我们需要一种规则来实现这种想法,并且不必要所有节点。也就是说节点是顺序输入的,我们实现这一点可以用Treap。
Treap=Tree+Heap
Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Treap纪录一个额外的数据, ...
基础很重要,这是永远不变的真理。
package sunfa;
public class DiGui {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>(5);
for (int i = 0; i < 5; i++) {
stack.push(i);
}
System.out.println("dg:");
dg(stack);
System.out.println(&qu ...
关于Swing打印二叉树
- 博客分类:
- 数据结构与算法
[img][/img]最近研究二叉树一类的树结构,总用调试的办法去搞好麻烦,想用界面显示树结构,想看是不是AVL啊,(红黑树那个还在弄,太麻烦),于是就想弄出界面来,考虑了下准备用flex做也网页图形的,毕竟研究过用flex绘图等简单的东西,又想想swing这东西还一直没弄过呢,学java的不会swing惭愧啊,就是今天给按钮加个点击事件都纠结了半天。。。。唉 性格所致 ,越是不会的东西越要去折腾。反正也是做的玩玩,于是就用swing去折腾,虽然我从没用过,但我想还不是一个绘图类画画直线啥的。
关于绘制树的思路:从最简单的二叉树搞起。每个节点增加坐标属性(x,y),然后 遍历树的话也就是那4种 ...
如果你注意观察你会发现,输入法就打某个字,如果你下次还打那个字,那么它的位置将在它上一次位置的前面,如果你一直打某个字,那么它每次都往前移动一格或多格。
所以不同的人使用搜狗输入法啊、紫光啊、QQ输入法啊都觉得好使,因为它会根据每个人的不同习惯把你经常打的字弄到靠近前面。
输入法也是要求查询效率的,所以输入法其实也是btree,但是为了更加的智能它使用了另一种树结构-----------伸展树。
伸展树不要求像AVL、红黑树那样追求完美的平衡(其实红黑树也没AVL树那样使劲的追求平衡),伸展树追求的是90%与10%原则,啥意思呢?这意思是说平时我们打字的时候90%的字我们都不经常去打,至少绝大多 ...
package sunfa.tree;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 参考:http://book.51cto.com/art/201106/269044.htm
* Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种
* 。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计
* 。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
*
* 网 ...
package sunfa.midNum;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
/**
*
* 参考:---------------------------------------------
* http://blog.csdn.net/chen09/article/details/6531678
*
* 快速选择算法 和 第三名:BFPRT 算法 类似,都是在一个无序的数组中寻找第K小的数,
*
* 百度百科上解释了中 ...
package sunfa.kmp;
/**
* 朴素字符串匹配算法
*/
public class SimpleKMP {
public static void main(String[] args) {
int index = simpleKmp("12444abababab", "444ababab");
System.out.println(index);
}
/**
* 朴素字符串匹配算法的一个特点 ...
package sunfa.sort;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
public class HeapSort {
public static void main(String[] args) {
int n = 20;
Random ran = new Random();
int[] arr = new int[n];
Heap<Integer> heap = new Heap<Integer> ...
package sunfa.sort;
import java.util.Arrays;
import java.util.Random;
public class InsertionSort {
public static void main(String[] args) {
Random ran = new Random();
int[] a = new int[10];
for (int i = 0; i < a.length; i++) {
a[i] = ran.nextInt(100);
}
System.out.pri ...