
Algorithm
文章平均质量分 71
astro_boy
这个作者很懒,什么都没留下…
展开
-
一个分页算法
/** * 分页算法 */ package cn.eshore.user.util; public class PageBean { private int currentPage = 1;// 当前页数 public int totalPages = 0;// 总页数 private int pageSize = 0;// 每页显示数 private int totalRows = 0;// 总...原创 2009-11-27 09:31:52 · 113 阅读 · 0 评论 -
Rete(3)
4.6 连接节点(Join node)当一个连接节点的alpha内存中加入一个事实时,将引发此连接节点的right activation,当一个连接结点的beta内存中加入一个token时,将引发此连接节点的left activation。连接节点的数据结构包括:指向其alpha内存和beta内存的指针,变量连接检测的说明,指向子节点的指针。当一个连接节点的alpha内存中加入某个事实时,引...原创 2010-10-21 09:59:13 · 129 阅读 · 0 评论 -
分配排序(桶排序..)
分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。箱排序(Bin Sort)1、箱排序的基本思想 箱排序也称桶排序(Bucket Sort),其基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子...原创 2010-10-21 13:39:25 · 171 阅读 · 0 评论 -
大数据排序或取重或去重相关问题解决方案
Q:TC群里有人发消息说在10亿个数据中找出所有的重复数,内存限制10M。貌似百度面试题。“笨一休”大牛的初步提出了个方法:1,利用hash对所有数进行取模(比如%1M),利用余数进行分1K组;2,再对1K组,内部进行hash查重复数。 晚上上自习时候想了想,觉得不需要设计hash函数来进行操作,一来很难设计出无冲突的hash函数,二来每次进行hash时候涉及取模操作,比较费时...原创 2010-10-21 16:13:12 · 556 阅读 · 0 评论 -
如何判断两个单向链表是否有相交,并找出交点
题比较简单,单向链表有交点意思就是交点后的节点都是一样的了 NODE* FindNode(NODE* pHead1, NODE* pHead2){ NODE* p1 = pHead1; NODE* p2 = pHead2; int i = 1, j = 1, k = 0, f = 0; if(pHead1 == NULL || pHead2 == N...原创 2010-10-24 13:37:42 · 256 阅读 · 0 评论 -
高度为n的平衡二叉树最少需要多少个节点
递推关系 A(1)=1 A(2)=2 A(n+2)=A(n+1)+A(n)+1 子树高度为n+1,n以及根节点 你可以照这个以此类推就可以得出答案了。算下A(4)=7 设f(n)为高度为n的平衡二叉树最少含有的节点数,则:f(1) = 1;f(2) = 2; f(3) = 4;f(4) = 7;……这些可以通过画图就能得到,但是当n很大时呢?其实有如下结论:f(n) =...原创 2010-10-24 13:42:16 · 8947 阅读 · 0 评论 -
字典树(trie tree)
今天AC了两题trie tree的题目,感觉trie的性质真的是相当的好,而且实现比较简单。它使在字符串集合中查找某个字符串的操作的复杂度降到最大只需O(n),其中n为字符串的长度。trie是典型的将时间置换为空间的算法,好在ACM中一般对空间的要求很宽松。 trie的原理是利用字符串集合中字符串的公共前缀来降低时间开销以达到提高效率的目的。它具有以下性质:1,根结点...原创 2010-10-26 11:19:04 · 92 阅读 · 0 评论 -
Trie Tree
给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。 这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。 现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找...原创 2010-10-26 11:34:14 · 232 阅读 · 0 评论 -
链表的一些常见笔试面试问题总结及代码
先什么也不说,假设链表节点的数据结构为: struct node {int data;struct node* next;};创建单链表的程序为:struct node* create(unsigned int n){//创建长度为n的单链表assert(n > 0);node* head;head = new node;head->next = NULL;cout &...原创 2010-10-27 13:39:39 · 83 阅读 · 0 评论 -
不使用/,%,+和*,如何判断一个数能否被3整除
如果n的二进制末位为0,那么n和n>>1同时被3整除或者不整除如果n的二进制末位为1,那么n和(n>>1)-1同时被3整除或者不整除 3是一个比较特别的数,其二进制表示是0b11,也就是说任何一个数乘以3的结果实际上是这个数与其左移1位后相加的结果。现在给出一个数a,假设它能被3整除,结果是b,即a=3*b,那么从二进制乘法运算判断出,b的最低位与a的最...原创 2012-05-30 14:28:07 · 353 阅读 · 0 评论 -
【转】大数据量算法
第一部分、十五道海量数据处理面试题1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小...原创 2012-03-06 16:11:43 · 137 阅读 · 0 评论 -
从N个变量中找出一个错误变量的方法
假设有N包咖啡,里面有一包咖啡是掺和了沙子的,可以将咖啡放到水杯里融化,如果十分钟后,被子里有沙子沉淀的,那么那包就是有问题的咖啡。问题是:在十分钟之内,需要最少多少个杯子能检验出那包有问题的咖啡呢? 【思路】可以利用二进制数的特点来解答。将N表示成二进制,那么二进制的如果能确定出现问题的咖啡在二进制位的哪些(哪个)位上,即使解答。而要确定哪些位,只需要知道二进制的长度即可。(将咖啡搀...原创 2012-03-31 12:17:07 · 123 阅读 · 0 评论 -
高阶幂的求余的方法
通常会有如下问法: 有两个数,A和B,A的范围较小,B的范围较大。问A的B次幂的最后n位是多少? n一般都小于5. 或 有两个数,A和B,他们的范围都很大。问A的B次幂的最后n位是多少? 该题目主要思路是A的B次幂最后求余即可。但是A和B要不一个很大,要不都很大,是很难求到的。 都用到了数学里的同余数的概念。 同余数概念如下: ...原创 2012-03-31 16:41:43 · 1598 阅读 · 0 评论 -
Rete(2)
使用RETE算法的模块系统,有四个入口,分别是添加事实(add-wme)、去除事实(remove-wme)、添加规则(add-production)、去除规则(remove-production)。上面的主要介绍了建立rete网络后添加事实的过程。下面先具体介绍alpha网络的建立和添加事实的过程,然后再介绍另外三个过程。4.4 Alpha网络当事实添加到工作内存后,alpha网络对事实...原创 2010-10-21 09:57:45 · 156 阅读 · 0 评论 -
Rete(1)
一、 rete概述Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete是拉丁文,对应英文是net,也就是网络。Rete算法通过形成一个rete网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy)和结构相似性(structural similarity),提高系统模式匹配效率。二、 相关概念2.1 事实(fact):事实:对象...原创 2010-10-21 09:53:42 · 218 阅读 · 0 评论 -
how many different binary trees you can build with N nodes?
how many different binary trees you can build with N nodes?一棵二叉树可以看成根节点,左子树,右子树。因此N个节点,左子树如果有 j (<= N-1)个节点, 右子树有(N-1-j)个节点,故:N个节点二叉树数目:f(n) = f(n-1) + f(1)* f(n-2) +...+f(n-2)*f(1) + f(n-1) ...原创 2010-07-08 21:55:24 · 196 阅读 · 0 评论 -
算法大全(1)单链表 1
1.单链表反转2.找出单链表的倒数第4个元素3.找出单链表的中间元素4.删除无头单链表的一个节点5.两个不交叉的有序链表的合并6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。7.单链表交换任意两个元素(不包括表头)8.判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?9.判断两个单链表是否相交10.两...原创 2010-07-22 11:16:54 · 126 阅读 · 0 评论 -
算法大全(1)单链表 2
10.两个单链表相交,计算相交点分别遍历两个单链表,计算出它们的长度M和N,假设M比N大,则长度M的链表先前进M-N,然后两个链表同时以步长1前进,前进的同时比较当前的元素,如果相同,则必是交点。public static Link GetIntersect(Link head1, Link head2){ Link curr1 = head1; Link curr...原创 2010-07-22 11:18:33 · 120 阅读 · 0 评论 -
算法大全(2)栈和队列
声明,本文所有9道算法题目,覆盖了基本上所有常见的栈/队列问题,全都用C#实现,并测试通过,代码下载:StackAndQueue.zip目录:1.设计含min函数的栈,要求min、push和pop的时间复杂度都是o(1)。 2.设计含min函数的栈的另解3.用两个栈实现队列 4.用两个队列实现栈 5.栈的push、pop序列是否一致6.递归反转一个栈,要求不得重新申...原创 2010-07-22 11:20:06 · 157 阅读 · 0 评论 -
链表反转的两种实现方法
原创的技术文章好久没更新了,特此补上。对于链表的讨论似乎永远都不会过时。虽然现在有了容器,但是一味的使用它们,也使自己失去了锻炼的机会。前不久被导师问及链表反转的问题,结果编码、调试,费了好大功夫才算完成了。而且,代码还没得到优化,完善。想不到许久没碰指针,对指针的操作竟生疏了不少。看来对技术的学习,真的不能放松啊~!把代码简单整理下,大家参考:#include <io...原创 2010-08-10 15:19:40 · 161 阅读 · 0 评论 -
图论—深度优先和广度优先算法源码
近由于项目需要,需要实现深度优先和广度优先算法,图论中的基础内容,源代码共享一下,希望对大家有用: Java代码 public class Graph { private final int MAX_VERT=500; private Node nodelist[]; private int adj...原创 2010-09-10 10:12:33 · 102 阅读 · 0 评论 -
Linux下大文件的排序和去重复
Linux下我们用 sort 与 uniq 的命令来实现去重复行。去重复行简单的用法如下,如一个文件名:happybirthday.txtcat happybirthday.txt (显示文件内容)Happy Birthday to You!Happy Birthday to You!Happy Birthday Dear Tux!Happy Birthday ...原创 2010-10-15 10:02:44 · 184 阅读 · 0 评论 -
Java分页实现
Java代码 public interface Paginable { public int getTotalCount(); public int getPageCount(); public int getPageSize(); public int getCurrentPag...原创 2010-10-18 22:11:47 · 107 阅读 · 0 评论 -
数据库笔试题(经典SELECT语句用法)
问题描述: 为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩 --1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名 SE...原创 2010-10-18 22:49:33 · 262 阅读 · 0 评论 -
如何求N的阶乘所得的数字末尾含有多少个0
原题是这样: 给定一个整数N ,那么N 的阶乘N !末尾有多少个0呢?例如:N =10,N !=3 628 800,N !的末尾有两个0。初看这样的题目可能会想到直接求出N!的阶乘,然后再计算出0的个数。显然用这种方法如果N很大的情况下,非常容易溢出。所以我们可以换个角度来分析这个问题。N!=1×2×3×4×5×6×··· ×N我们可以对N!进行分解质因数 即N!=2x ×3...原创 2010-10-19 13:13:27 · 230 阅读 · 0 评论 -
用JDBC实现数据的分页
数据分页主要用到了resultSet的absolute()方法用来定位到某一行上去,其代码如下:Java代码 package com.ajliu.pageOperation; import java.sql.*; import com.ajliu.UtilTool.*; import java.util.*; p...原创 2010-10-20 11:23:06 · 193 阅读 · 0 评论 -
[转]海量数据处理面试题
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。...原创 2010-10-20 15:15:52 · 108 阅读 · 0 评论 -
一些数学知识
zz:http://hi.baidu.com/imake/blog/item/f215818b9d7414d0fc1f1039.html相关的一些链接:http://blog.youkuaiyun.com/nianglao/article/details/7250702 http://hi.baidu.com/smilngsky/blog/item/071ff5dfc62df04e95...原创 2012-03-31 20:12:41 · 178 阅读 · 0 评论