摘要:
Rank,Dense_rank,Row_number函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数。这3个函数的唯一区别在于当碰到相同数据时的排名策略。1.Row_Number:Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。2.Dense_Rank:Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。3.Rank:Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。1 SELECT
阅读全文
posted @ 2013-01-22 15:05
ysu_dx
阅读(265)
推荐(0)
编辑
摘要:
oracle 中没有auto_increment属性,所以我们必须换一种方法实现。一般常用的方法为创建sequence,然后为对应表的创建trigger。如下:--建表CREATE TABLE CHIP01.DX_TEST( ID NUMBER NOT NULL, STU_ID NUMBER NOT NULL, STU_NAME VARCHAR2(200 BYTE) NOT NULL, STU_ADD VARCH...
阅读全文
posted @ 2013-01-22 13:56
ysu_dx
阅读(260)
推荐(0)
编辑
摘要:
转自:http://blog.csdn.net/hackbuteer1/article/details/6568913一、快速排序的基本思想 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:①分解: 在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基...
阅读全文
posted @ 2012-11-14 17:16
ysu_dx
阅读(198)
推荐(0)
编辑
摘要:
一个有N个证书元素的以为数组,子数组之和的最大值是多少?分析:1子数组是连续的;2题目只需要求和,不需要返回子数组具体位置;3数组的元素是整数,所以数组可能包括正整数,零,负整数;最直接的最简单的方法记sum[i....j]为数组第i个元素导第j个元素的和,遍历所有可能得,代码如下://最直接的遍历 public static int GetMaxSum(int[] input,int num){ int maxsum=Integer.MIN_VALUE; int sum=0; for(int i=0;i<num;i++){ ...
阅读全文
posted @ 2012-11-13 22:07
ysu_dx
阅读(227)
推荐(0)
编辑
摘要:
1.求数组中和为特定值的二个数首先进行快速排序,然后遍历,令i=0;j=n-1;判断arr[i]+arr[j],进行相应的遍历。for(int i=0,j=n-1;i<j;){ if(arr[i]+arr[j]==sum){ return (i,j); } else if(arr[i]+arr[j]<sum){ i++; } else{ j--; } return(-1,-1);}求数组中和为特定值的三个数,双重循环,外层遍历i,内层遍历k,j;判断input[i]+input[j]+input[k]public static vo...
阅读全文
posted @ 2012-11-13 16:09
ysu_dx
阅读(423)
推荐(0)
编辑
摘要:
最简单的办法,就是先排序,然后把第K个值找出来,这样算法的复杂度为 O(nlgn).求数组最大,最小(同时)1.排序,取第一个最后一个。2 如下,input数量需大于2, public static void SearchMax_MinValue(int[] input){ int maxvalue=input[0]; int minvalue=input[1]; if(input[0]<input[1]){ maxvalue=input[1]; minvalue=input[0]; ...
阅读全文
posted @ 2012-11-13 14:51
ysu_dx
阅读(282)
推荐(0)
编辑
摘要:
首先是问题描述:给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,问如何选择装入背包中的物品总价值最大?可以这样理解:背包的背负有上限,因此在这个上限内尽可能多的装东西,并且价值越多越好。在这里我之想讨论动态规划解决这个问题的详细过程。动态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。因为背包的最终最大容量未知,所以,我们得从1到M一个一个的试,比如,刚开始任选N件物品中的一个,看对应的M的背包,能不能放进去,如果能放进去,并且还有多少空间,则,多出来的空间能放N-1物品中的最大价值,怎么能保证总选则是最大价值呢,看下表:
阅读全文
posted @ 2012-11-09 00:22
ysu_dx
阅读(268)
推荐(0)
编辑
摘要:
1. Bit-map思想给你一堆西安市的电话号码列表,数量大概在千万级,要求从中找出所有重复的电话号码,需要时间复杂度尽可能小。目前西安市的电话号码大概都以8开头,为8位,也就是类似于82678578这样子二重暴力搜索时间复杂度太高,这里我们不予考虑。容易想到的办法就是建立一个标志数组,int boolean都行,用相应的位置值来代替这个号码是否出现,根据数组的可直接存取特性,来提高效率。但是你是否想过或测试过int[] a = new int[100000000];boolean[] a = new boolean[100000000]; //需要大概100M*4的内存,如果这样类似的语句是
阅读全文
posted @ 2012-11-07 23:16
ysu_dx
阅读(585)
推荐(0)
编辑
摘要:
给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c,d,f之类开头的我显然不必考虑。而只要找以a开头的中是否存在a
阅读全文
posted @ 2012-11-07 00:56
ysu_dx
阅读(290)
推荐(0)
编辑
摘要:
bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码扩展:bloom filter可以看做是对bit-map的扩展问题实例:1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。2)2.5亿个整数中找出.
阅读全文
posted @ 2012-11-07 00:45
ysu_dx
阅读(4985)
推荐(0)
编辑