摘要: 功能说明:将文本文件内容加以排序。语 法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]补充说明:sort可针对文本文件的内容,以行为单位来排序。参 数:-b忽略每行前面开始出的空格字符。-c检查文件是否已经按照顺序排序。-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。-f排序时,将小写字母视为大写字母。-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符。-m将几个排序好的文件进行合并。-M将前面3个字母依照月份 阅读全文
posted @ 2012-08-07 22:03 苦逼程序猴 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题]返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入参数加上const修饰,最好加上assert对输入输出指针进行非NULL判断void* memcpy( void *dest, const void *src, size_t count ){char* pdest = static_cast<char*>( dest );const char* psrc = static_cast<const char*>( src );// 依次从前拷贝,目的地址覆盖了源地址的数,此 阅读全文
posted @ 2012-08-07 21:55 苦逼程序猴 阅读(481) 评论(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 苦逼程序猴 阅读(409) 评论(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 苦逼程序猴 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 要理解HashSet,可以按字面上把它分解为两部分,一方面它表示一个集合(Set),另一方面,它的实现使用了散列法(Hashing)。集合(Set)还记得吗?在中学里曾经学过,集合是某些指定对象的全体,集合的三个性质是确定性、互异性和无序性。本文提到的集合正是这个数学概念在计算机中的实现。说到集合,可能你会想到Collection这个词,以及.NET中的ICollection<T>接口,它们通常也被解释为“集合”,不过它们和Set有明显的不同。Collection可以看作是一组数据项的容器(Container),它与数学中的集合概念无关。同时,Set是一种特殊的容器。也就是说,Se 阅读全文
posted @ 2012-08-07 21:53 苦逼程序猴 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 在HashSet的实现(上)中,简要介绍了散列法(hashing)的内容,并以二次探测法实现了一个简单的HashSet。在本文中,将进一步讨论散列法,尤其是GetHashCode方法的实现,最后给出完整的HashSet实现。散列法再议通过散列法实现的容器,不管是HashSet、Hashtable还是Dictionary,需要支持的基本操作是insert、remove和find,特别是insert和find,三个操作的时间复杂度期望是O(1)。散列法的使用过程中,主要有两个问题:散列函数的实现;冲突的解决办法;下面将在上篇的基础上进一步讨论这两个问题的解决方案。散列函数的实现一般情况下,要存储的 阅读全文
posted @ 2012-08-07 21:52 苦逼程序猴 阅读(180) 评论(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 苦逼程序猴 阅读(557) 评论(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 苦逼程序猴 阅读(148) 评论(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 苦逼程序猴 阅读(204) 评论(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 苦逼程序猴 阅读(275) 评论(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 苦逼程序猴 阅读(191) 评论(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 苦逼程序猴 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 转自:http://hi.baidu.com/csdnail/blog/item/045fbed4a68dfbd850da4bcf.html问题:rand7是一个能生成1-7的整数随机数。要求利用rand7生成1-10的整数随机数。可以参看原帖。在lz提示下又找到了更简洁的方法,同余循环法,只需要一行代码!我很浅的探讨几种方法,还需要更深入的学习。感慨一下知识的浩瀚和自己的渺小。1.组合数学方法我在帖子里给出了这样的方法,这个很简单的算法,却似乎不那么容易被理解。第1次 1 2 3 4 5 6 7 之中用rand7取一个数第2次从 2 3 4 5 6 7 8 之中取一个数第3次从 3 4 5 阅读全文
posted @ 2012-08-07 21:45 苦逼程序猴 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 原文地址:背包问题九讲(转)作者:heitiantan背包问题九讲第一讲 01背包问题第二讲完全背包问题第三讲多重背包问题第四讲混合三种背包问题第五讲二维费用的背包问题第六讲分组的背包问题第七讲有依赖的背包问题第八讲泛化物品第九讲背包问题问法的变化附录:背包问题的搜索解法目录第一讲 01背包问题这是最基本的背包问题,每个物品最多只能放一次。第二讲 完全背包问题第二个基本的背包问题模型,每种物品可以放无限多次。第三讲 多重背包问题每种物品有一个固定的次数上限。第四讲 混合三种背包问题将前面三种简单的问题叠加成较复杂的问题。第五讲 二维费用的背包问题一个简单的常见扩展。第六讲 分组的背包问题一种题 阅读全文
posted @ 2012-08-07 21:44 苦逼程序猴 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 给定一个字符串的集合,格式如:{aaabbbccc},{bbbddd},{eeefff},{ggg},{dddhhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaabbbcccdddhhh},{eeefff},{ggg}。 (1)请描述你解决这个问题的思路; (2)请给出主要的处理流程,算法,以及算法的复杂度 (3)请描述可能的改进。回答: 集合使用hash_set来表示,这样合并时间复杂度比较低。 1、给每个集合编号为0,1,2,3... 2、创建一个hash_map,key为字符串,value为一个链表,链表节点为字符串所在集合的编号... 阅读全文
posted @ 2012-08-07 21:41 苦逼程序猴 阅读(187) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace HellWorld{ class Program { public static void PrintSumProbabilityOfDices(int num) { int max = num*6; int[,] arr = new int[num + 1,max + 1]; for (int i = 1;... 阅读全文
posted @ 2012-08-07 21:39 苦逼程序猴 阅读(296) 评论(0) 推荐(0) 编辑