
算法
winsunxu
逆水行舟,不进则退
展开
-
几种经典hash算法
<br />哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。<br />链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。<br />设计高效算法往往需要使用Hash链表,常数级的查找速度原创 2011-03-01 22:13:00 · 1022 阅读 · 0 评论 -
栈求最小值
<br />题目:<br /> 实现一个栈,它有三个操作。<br /> 1、压栈push。<br /> 2、出栈pop。<br /> 3、找出当前栈的最小元素。<br /> 要求:这三个操作的时间复杂度是O(1)。<br /> 解:<br /> 使用两个数组(或链表),element和least,它们的大小一致。element数组用来存放压栈和出栈的元素;least数组用来存放当前栈中最小值的下标。<br /> 1、push操作。把需要压栈的元素A放进element数组栈顶中、A与least栈顶的值m对应的转载 2011-03-02 20:22:00 · 2981 阅读 · 0 评论 -
n个数里找出前m个数
。。。。转载 2011-03-02 22:40:00 · 3513 阅读 · 0 评论 -
求从一个整数数组中两个数之和为m的两个数
<br />方案一:<br /> int iArrary[10] = {3,4,5,634,567,23,45,6,7,10};<br />//先排序,就暂时选个简单的来排序吧<br /> for(int i = 0; i < 9; i++)<br />{<br /> int j;<br /> int swap;<br /> int MinIndex = i;<br /> for(j = i+1; j < 10; j++)<br /> {<br /> <br />原创 2011-03-05 20:30:00 · 1701 阅读 · 1 评论 -
判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
判断数组中是否有重复整数的方法:<br /><br />#include "stdio.h"<br />#define MAX 200//就是允许整数数组中的最大数组<br />#define Len 10<br /><br />//有一个整型数组,判断里面是否有重复数据,要求O(n)的算法<br />int main()<br />{ <br /> int arr[Len] = {123,10,3,5,199,77,99,8,5,10};<br /> int flag[MAX] = {0转载 2011-03-05 17:48:00 · 5754 阅读 · 0 评论