
算法与数据结构
zzxian
尘世中一个迷途小书童!
展开
-
查找元素问题
<br />假设有一个无序表存放有1亿个32位无符号整数,怎样快速判断一个数字是否在无序表中呢?<br />------<br />1 是否可以使用tire树来存放这些数字呢?把这些数字都看成字符串,像查找字典一样查找数字。这样查找的复杂度是o(1),最多查找32步就可以作出判断了。<br />2 有没有比1更好的方法呢?原创 2010-12-19 13:39:00 · 539 阅读 · 1 评论 -
求数组的逆序数
概念和算法原理我就不说了,中午要吃饭,直接给代码。int inverseNumber(int *arr, int len){ if (len==1) return 0; int inverseLeft=inverseNumber(arr, len/2); int inverseRight=inverseNumber(arr+len/2, len-len/2); int *sort原创 2012-12-06 12:31:12 · 1399 阅读 · 2 评论 -
素数筛法的复杂度
素数筛法的复杂度Xie Xie给我看了一个链接性能调优--永远超乎想象,里面提到了素数筛法的复杂度,作者用实验发现此筛法是线形的。所谓素数筛法就是那个求小于n的所有素数最简单的算法:bool* prime(int n) { bool *p = new bool[n]; memset(p, 0, sizeof p); for (int i = 2; i <转载 2012-12-06 00:28:54 · 5334 阅读 · 2 评论 -
字符串的全排列
网上有一些解决这个问题的方法,但是解释的不够简洁。这里给出较简单的解释和实现。如果你用过回溯算法的话,这个题目算是弱爆了。就是在排列树空间里遍历了一边。。现在从头开始解决这个问题,对于长度位n的字符串(假设所有字符均不相同)有n!个排列。这就很自然的想到了排列树嘛,在排列树里搜索什么呢? 什么都不用做,遍历到叶节点后打印搜索路径就好了。回溯的搜索路径就在原数组上,打印出来就好了。原创 2012-04-20 12:45:40 · 834 阅读 · 0 评论 -
使用KMP算法求子串出现次数
1. KMP算法:对应长度为n的目标串和长度为m的模式串,kmp算法的复杂度是o(m+n).其中o(m)的时间用于需找模式串的失效函数,o(n)的时间用于匹配。算法思想说起来比较麻烦,但是并不复杂,参考数据结构的书吧。2. 下面给出kmp的代码search()和子串出现次数代码count().其中count()的复杂度是o(n),整体复杂度也是o(m+n).#include #inclu原创 2012-04-19 12:57:15 · 5843 阅读 · 1 评论 -
动态规划
动态规划通常应用于最优化问题。使用动态规划的两个前提:最优子结构和重叠子问题。若问题满足这两个前提,可以考虑使用动态规划解决。一般步骤为:1. 描述最优解的结构2. 递归定义最优值3. 自底向上计算最优值4.构造一个最优解其中每一步都是下一步的基础,难度也依次降低。这里我想说的是如何递归定义原问题和子问题。----------------------------原创 2012-04-05 23:36:35 · 831 阅读 · 0 评论 -
合并两个有序链表
题目:已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序分析:两个链表都应该是增序或者降序方法一使用递归的方法struct Node { Node* next; int value; }; Node* Merge(Node* head1, Node* head2) {转载 2012-03-17 00:01:35 · 556 阅读 · 0 评论 -
判断单链表是否存在环,判断两单链表是否相交
<br />【摘要】有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?扩展:判断两个单链表是否相交,如果相交,给出相交的第一个点。<br />有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。<br />问题:<br />1、如何判断一个链表是不是这类链表?<br />2、如果链表为存在环,如果找到环的入口点转载 2011-03-29 09:54:00 · 602 阅读 · 0 评论 -
最简单的哈希表删除元素
<br />有一个简单的Hash表,采用一位数组直接存放元素,Hash函数是个对表长取模,冲突解决采用线性探测。<br />这样的Hash表较容易实现,查找和插入方法都按照先哈希再探测的步骤就可以了,但删除表中的元素稍微复杂。<br /> <br />因为表中有冲突的元素存在,这些元素应用了探测方法被放置在其他位置上,若删除表中一个元素可能对这些元素的查找造成影响,可能使查找元素的正常过程中断。这里称由于删除一个元素给哈希表造成一个gap。我们称关键字key的哈希值为key的哈希位置;称使用探测技术重新安排原创 2010-11-25 17:39:00 · 17872 阅读 · 5 评论 -
高精度计算
这里使用最简单的方式处理高精度计算问题:使用数组保存高精度数的每一位,模仿四则运算竖式规则依次操作每一位,完成高精度计算。1 高精度加法:模仿加法,对应的每一位相加,可以分别处理每一次产生的进位也可以最后集中处理。很简单,你懂得。2 高精度乘法:模仿乘法,因数1的第i位与因数2的第j位相乘的结果加到积的第i+j位上。最后集中处理进位问题。3 高精度除法:模仿除法,其实是做减法。除法的每次商是几,我们是凭观察看出来的。计算机"观察“不出来,只能一次一次的减,每减一次,商的对应位就增一。我们做商是从高位做到低位原创 2011-01-04 00:30:00 · 752 阅读 · 0 评论 -
微博短网址生成算法原理 by cubeking
短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。例如:http://t.cn/SzjPjA 表示http://hi.baidu.com/cubeking/ 短网址服务,可能很多朋友都转载 2013-04-26 18:48:43 · 2281 阅读 · 0 评论