算法与数据结构
文章平均质量分 56
TYLEO
.
展开
-
分治与递归(二)--- 快速排序
快速排序(QuikSort)具有O(n log n)的平均运行时间,split(int*, left, right)是找出划分点i,之后再分割数组分别进行排序。void qsort(int *data, int left, int right){ if(right > left) { int p; p = split(data, left, right); qsort(data, left,原创 2005-07-11 01:31:00 · 1130 阅读 · 0 评论 -
分治法
简介对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。分治法的基本思想任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序原创 2005-07-11 01:37:00 · 2007 阅读 · 0 评论 -
分治与递归(一)----全排列问题
//产生全排列,perm1(list,k,m)产生list[k...m]的全排列import javax.swing.*;public class Perm{ static String output = ""; public static void swap(int [] list, int k, int m) { int temp; temp = list[k]; list[k] = l原创 2005-07-11 01:11:00 · 1302 阅读 · 0 评论 -
模式匹配---KMP算法
//KMP算法的效率主要是去掉了指针回溯,借助于实效函数,可以高效的移动指针到下一个检查位置#include #include #include #include using namespace std;void fail(char *src, int *f);int KmpFind(char *src, char *pat, int fail[]);int main(){ char src[10原创 2005-07-11 01:35:00 · 1290 阅读 · 0 评论 -
大数乘法求尾数的快速算法
今天,在做ZJU的题目的时候遇到了大数乘法求尾数的问题。最后发现了,其实不需要把实际数值求出来就可以知道尾数。只要每次都记录最后一位模10的结果就可以了。原理如下:求: n * m * k 的最后一位数字。把 n ,m和k转换成 10 进制:n = a0 * 10^0 + a1 * 10^1 + a2 * 10^2+……+ai *10^i原创 2005-07-27 02:15:00 · 2685 阅读 · 0 评论