
算法和数据结构
文章平均质量分 77
dremi
享受工作,享受生活!
心态是王道...
展开
-
模取幂运算 (a^b mod c)
这个算法的思想我是从一本书上看到的,对合法的输入能很快的计算出结果来,其思想是利用 数学公式: (a * b ) mod c = (( a mod c) * b) mod c;首先把 b 转化成二进制如: b0 b1 b2 b3..... b31 即 b = b0*231 + b1*230+......+ b31;也就是把 ab = a ^ (b0*231 + b1*230+......原创 2007-04-17 20:00:00 · 16547 阅读 · 7 评论 -
BM算法(更好的字符串匹配算法)
BM算法和KMP算法一样,也是构造一个辅助的模式函数来加速匹配的速度。和KMP的模式函数相比BM的模式函数更加的简单:void make_next(const char p[], int next[]){ for(int i = 0; i next[p[i]] = i;}next[] 是一个和ASCII数目一样大的数组256个数据吧。当然如转载 2008-10-11 21:46:00 · 1337 阅读 · 2 评论 -
归并排序(Merge sort)
//merge the A[s...m] and A[m+1...t] to R[s...t] templatetypename typeT>void two_merge(typeT A[], typeT R[], int s, int m, int t){ int i, j, k; i = s; j = m+1; k = s;原创 2008-09-15 15:45:00 · 926 阅读 · 1 评论 -
组合函数递归和非递归实现
最近笔试了一个关于组合算法的非递归算法,以前写过递归的算法,http://blog.youkuaiyun.com/dremi/archive/2007/12/15/1940723.aspx但这次要用非递归去实现,在有限的时间里,确实没有想的太周到,只是大概的思想写了一下,可能也有点紧张了。现在再来把它完整的来实现, 包括算法思想:代码#include "stdafx.h"原创 2008-03-26 21:12:00 · 4345 阅读 · 2 评论 -
组合算法
#include iostream>using namespace std;/**///////////////////////////////////////////////////////////////////////////// 功能 : 从0....m中选取n个的所有组合// idx[]: 用来记录一个组合, 如: 0,1,3表示选取的是第1,2,4个元素的组合//原创 2007-12-15 22:51:00 · 3150 阅读 · 0 评论 -
堆排序(HeapSort)
堆的介绍:堆是一种数组,但是以树的结构形式来看待它,如下标 i 节点的求解Parent和Children节点如下: PARENT(i) return ⌊i/2⌋LEFT(i) return 2iRIGHT(i) return 2i + 1 堆分为MAX-堆和MIN-堆,MAX堆满足的条件为: A[PARENT(i)] ≥原创 2007-10-14 13:39:00 · 2712 阅读 · 0 评论 -
快速排序
最近比较有空,想熟悉一下算法,有一段时间没有写程序了。基本思想: 在当前无序区Array[1..H]中任取一个数据元素(这里用中间的元素)作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:Array[1..I-1]和Array[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的原创 2007-04-22 22:36:00 · 1231 阅读 · 0 评论