随笔分类 -  Algorithm

摘要:来源http://blog.csdn.net/jiyanfeng1/article/details/8036007问题描述:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?这个笔试题,很YD,因为把某个递归关系隐藏得很深.问题分析:我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排.用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,就对应一种方案.比如000000111111就对应着第一排:0 1 2 3 4 5第二排:6 7 8 9 10 1101010101010 阅读全文
posted @ 2012-10-05 16:24 苦逼程序猴 阅读(556) 评论(0) 推荐(0) 编辑
摘要:1 package number; 2 3 import java.util.Arrays; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.Stack; 7 8 /** 9 * @author ycsun E-mail:stevesun521@gmail.com 10 * @version 创建时间:2012-10-3 下午4:35:22 类说明 11 */ 12 public class ArraysSeq { 13 private int[] arr; ... 阅读全文
posted @ 2012-10-04 14:18 苦逼程序猴 阅读(251) 评论(0) 推荐(0) 编辑
摘要:1 package number; 2 3 /** 4 * @author ycsun E-mail:stevesun521@gmail.com 5 * @version 创建时间:2012-10-3 下午2:59:49 类说明 6 */ 7 public class ArrayOperation { 8 private int[] arr; 9 private int[] aux;10 private int groupid = 0;11 12 public ArrayOperation(int[] arr) {13 this.arr... 阅读全文
posted @ 2012-10-03 16:27 苦逼程序猴 阅读(462) 评论(0) 推荐(0) 编辑
摘要:输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.0,1 背包问题package search;import java.util.Iterator;import java.util.Stack;public class Zte { private Stack<Integer> stack = new Stack<Integer>(); public void findNM(int sum, int n) { if (n < 0 || sum < 0) { return; ... 阅读全文
posted @ 2012-10-02 16:21 苦逼程序猴 阅读(182) 评论(0) 推荐(0) 编辑
摘要:题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序package search;import java.util.Stack;public class PushPopSeries { public static boolean isPopSeries(int[] push,int[] pop){ if(push.length!=pop.length){ return false; } int i1=0,i2=0,len=pop.length; Stack<In... 阅读全文
posted @ 2012-10-02 16:18 苦逼程序猴 阅读(231) 评论(0) 推荐(0) 编辑
摘要:package com.mianshi.ms;import java.util.Stack;/** * 类说明 输入N对括号,输出正确的配对组合 */public class NPair { public static Stack<String> doCompute(int N){ Stack<String > stack=new Stack<String>(); if(N==1){ stack.push("()"); return stack; } Stack<String> stac... 阅读全文
posted @ 2012-08-12 17:40 苦逼程序猴 阅读(271) 评论(0) 推荐(0) 编辑
摘要:package com.bupt.syc;import java.util.Iterator;import java.util.LinkedList;import org.junit.Test;public class Josephus { // 模拟解法 public static int JosephusWinner(int M, int N) throws Exception { if (N < M) { throw new Exception("M should smaller than N"); } int ... 阅读全文
posted @ 2012-08-12 17:15 苦逼程序猴 阅读(152) 评论(0) 推荐(0) 编辑
摘要:public class RemoveDuplicatedChar { public static void removeDuplicated(char[] str) { if (str == null) return; int len = str.length; if (len < 2) return; int tail = 1; for (int i = 1; i < len; i++) { int j; for (j ... 阅读全文
posted @ 2012-08-12 17:06 苦逼程序猴 阅读(193) 评论(0) 推荐(0) 编辑
摘要:1 package test; 2 import java.util.LinkedList; 3 4 public class TestCombination { 5 public static void combination(char[] arr) { 6 int len = arr.length; 7 int[] used = new int[len]; 8 LinkedList<Character> linkedlist = new LinkedList<Character>(); 9 combination(... 阅读全文
posted @ 2012-08-08 17:30 苦逼程序猴 阅读(185) 评论(0) 推荐(0) 编辑
摘要:1 package test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.LinkedList; 6 import java.util.List; 7 import java.util.Stack; 8 import java.util.Vector; 9 10 public class TreeOperator { 11 public static void preOrder(TreeNode node) { 12 if (no... 阅读全文
posted @ 2012-08-08 17:29 苦逼程序猴 阅读(124) 评论(0) 推荐(0) 编辑
摘要:1。自然数是0,1,2……2。素数是2,3,5……(不包括1的只能背1和它本身整除的自然数)public class Test{public int prime(int num){int n,m,i=0,s=0;label1:for(n=2;n<=num;n++){for(m=2;m<=n/2;m++){if(n%m==0)continue label1;}s++;i++;System.out.println("第"+i+"个素数是:"+n);}return s;}public static void main(String args[]){ 阅读全文
posted @ 2012-08-07 21:54 苦逼程序猴 阅读(416) 评论(0) 推荐(0) 编辑
摘要:1 概述链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然而Hash函数是Hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串Hash函数在执行效率、离散性、空间利用率等方面的性能问题。2 经典字符串Hash函数介绍作者阅读过大量经典软件原代码,下面分别介绍几个经典软件中出现的字符串Hash函数。2.1 PHP中出现的字符串Hash函数static unsigned lo 阅读全文
posted @ 2012-08-07 21:54 苦逼程序猴 阅读(352) 评论(0) 推荐(0) 编辑
摘要:要理解HashSet,可以按字面上把它分解为两部分,一方面它表示一个集合(Set),另一方面,它的实现使用了散列法(Hashing)。集合(Set)还记得吗?在中学里曾经学过,集合是某些指定对象的全体,集合的三个性质是确定性、互异性和无序性。本文提到的集合正是这个数学概念在计算机中的实现。说到集合,可能你会想到Collection这个词,以及.NET中的ICollection<T>接口,它们通常也被解释为“集合”,不过它们和Set有明显的不同。Collection可以看作是一组数据项的容器(Container),它与数学中的集合概念无关。同时,Set是一种特殊的容器。也就是说,Se 阅读全文
posted @ 2012-08-07 21:53 苦逼程序猴 阅读(312) 评论(0) 推荐(0) 编辑
摘要:在HashSet的实现(上)中,简要介绍了散列法(hashing)的内容,并以二次探测法实现了一个简单的HashSet。在本文中,将进一步讨论散列法,尤其是GetHashCode方法的实现,最后给出完整的HashSet实现。散列法再议通过散列法实现的容器,不管是HashSet、Hashtable还是Dictionary,需要支持的基本操作是insert、remove和find,特别是insert和find,三个操作的时间复杂度期望是O(1)。散列法的使用过程中,主要有两个问题:散列函数的实现;冲突的解决办法;下面将在上篇的基础上进一步讨论这两个问题的解决方案。散列函数的实现一般情况下,要存储的 阅读全文
posted @ 2012-08-07 21:52 苦逼程序猴 阅读(184) 评论(0) 推荐(0) 编辑
摘要:题目是从CU上看到的,我的算法是:int rand7(){int a;while( (a=rand5()*5+rand5()) > 26 );return (a-3)/3;}可惜没办法验证,不知道这个算法是否正确?(问题一)。(验证方法是通过双循环将两个rand5()分别换成1 2 3 4 5,但剔除掉(5,2)(5,3)(5,4)(5,5)这四个组合)算法思路是:1. 通过 rand5()*5+rand5() 产生 6 7 8 9 10 11 …… 26,27 28 29 30 这25个数,每个数的出现机率相等2. 只需要前面 3*7 个数,所以舍弃后面的4个数3. 将 6 7 8 转 阅读全文
posted @ 2012-08-07 21:51 苦逼程序猴 阅读(560) 评论(0) 推荐(0) 编辑
摘要:前段时间在BBS上看见一个问题:如何等概率的从N个元素中选取出K个元素?这个问题就是一个蓄水池抽样(Reservoir Sampling),算法可以如下描述 :Init: a reservoir with the size: kfori= k+1toNM=random(1, i);if( M < k)SWAPthe Mthvalueandithvalueend for网上有人给出了证明,先转过来:【转】证明:每次都是以 k/i 的概率来选择例: k=1000的话, 从1001开始作选择,1001被选中的概率是1000/1001,1002被选中的概率是1000/1002,与我们直觉是相符的 阅读全文
posted @ 2012-08-07 21:49 苦逼程序猴 阅读(152) 评论(0) 推荐(0) 编辑
摘要:转自http://blog.csdn.net/liuxizhiyi/article/details/3097398给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?intrandom(intm,intn){intk=rand();intmax=n-1;while(k<m){k=k*n+rand();max=max*n+n-1;}returnk/(max/n);}如何产生如下概率的随机数?0出1次,1出现2次,2出现3次,n-1出现n次?intrandom(intsize){while(true){intm=rand(size);intn= 阅读全文
posted @ 2012-08-07 21:48 苦逼程序猴 阅读(276) 评论(0) 推荐(0) 编辑
摘要:如何在O(n)时间内处理字符串以每个位置为中心的最长回文。这里转载一个Manacher算法的论文翻译。原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome-sub-string/其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧。首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长,这个算 阅读全文
posted @ 2012-08-07 21:48 苦逼程序猴 阅读(208) 评论(0) 推荐(0) 编辑
摘要:1 public class Main { 2 3 public int findMaxSumOneDimensions(int[] arr) { 4 int len = arr.length; 5 int max = arr[0], sum = max; 6 for (int i = 1; i < len; i++) { 7 sum += arr[i]; 8 if (sum < 0) 9 sum = arr[i];10 if (m... 阅读全文
posted @ 2012-08-07 21:47 苦逼程序猴 阅读(262) 评论(0) 推荐(0) 编辑
摘要:package poj;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Arrays;import java.util.Iterator;import java.util.Scanner;public class Main1088_1 { static class Node implements Comparable<Node> { int x;... 阅读全文
posted @ 2012-08-07 21:47 苦逼程序猴 阅读(194) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示