数据结构与算法
文章平均质量分 55
ericming200409
C/C LINUX TCP/IP Python
展开
-
循环不变式
看算法导论,第二章提到一个重要概念------循环不变式,一眼看过去,感觉理解不是很透彻,书上举的例子是插入排序,仔细琢磨之后,个人理解是:循环不变式并不一定是一个数学表达式(很多情况下都不是),循环不变式和数学归纳法很相似,在插入排序的例子当中,循环不变式应该描述如下: 第k次循环之前,A[1,2.....K-1],是已排序好的,k=2,3,4......n,n为输入原创 2009-11-27 20:28:00 · 3243 阅读 · 3 评论 -
中缀表达式 转换成 前缀表达式(二叉树实现)
<br />#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100typedef struct Node{ char key; struct Node * left; struct Node * right;}Node;//search for the operator with the highest grade in aint search(char a[],原创 2010-10-03 16:57:00 · 6630 阅读 · 0 评论 -
位运算实现加法
<br />定理:设a,b为两个二进制数,则a+b = a^b + (a&b)<<1。<br /><br />证明:a^b是不考虑进位时加法结果。当二进制位同时为1时,才有进位,因此 (a&b)<<1是进位产生的值,称为进位补偿。将两者相加便是完整加法结果。原创 2010-10-02 08:10:00 · 1880 阅读 · 3 评论 -
profiler
<br />改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的。在本文中我们将学习如何使用 gprof 为 Linux ?? 平台上的用户空间和系统调用精确分析性能瓶颈。<br /> 简介<br /> 各种软件对于性能的需求可能会有很大的区别,但是很多应用程序都有非常严格的性能需求,这一点并不奇怪。电影播放器就是一个很好的例子:如果一个电影播放器只能以所需要速度的 75% 来播放电影,那么它几乎就没什么用处了。<br />转载 2010-10-01 21:40:00 · 641 阅读 · 0 评论 -
快速排序
int partion(int a[], int low, int upper);void quik_sort(int a[], int left, int right){ if(left < right) { int q = partion(a, left, right);//根据基准,调整数组 quik_sort(a, left, q-1);//对基准左边序列进行原创 2010-04-28 18:42:00 · 404 阅读 · 0 评论 -
约瑟夫环问题
typedef struct Node{ int num; struct Node *next;}Node;//总共有N个人,从第s个人开始数起,数到第M个将其踢出void fun(int N, int s, int m){ Node * head = 0, *p =0, *pre=0; //建立循环链表 for(int i=0; i<N; i++) {原创 2010-04-27 10:40:00 · 739 阅读 · 0 评论 -
基于链表的栈实现(c++)
#ifndef _STACK#define _STACK#include //节点类template class Node{ public: T data; Node * next; };//栈的类声明,基于链表实现template class Stack{ public: Stack(); ~Stack();原创 2010-04-26 20:13:00 · 2324 阅读 · 0 评论 -
二分查找算法
//二分查找,假设数组a是非递减排列的int binary_search(int a[], int size, int key){ int left = 0, right = size-1;//初始化搜索区间 int middle; while(left <= right) { middle = (left + right)/2; if(a[middle]==原创 2010-04-27 10:16:00 · 522 阅读 · 0 评论 -
Levenshtein 算法c语言实现
//@func:计算字符串s 和 t之间的levenshtein距离//@paras:s和t均为c风格字符串unsigned lev_distance(const char * s,const char *t){ //n:目标单词t的长度 m:源单词s的长度 unsigned m_tmp=0,n_tmp=0; int i=0; //计算源单词长度 while(s原创 2010-04-14 21:03:00 · 1093 阅读 · 0 评论 -
链表环检测
<br />#include <stdio.h>#include <stdlib.h>#define N 45typedef struct Node{ int key; struct Node * next;}Node;// 检测链表是否存在环// 快慢指针方法实现int loopCheck(Node * head){ Node *slow = head, *fast = head; while(fast != NULL && fa原创 2010-10-08 19:40:00 · 1103 阅读 · 0 评论