- 博客(526)
- 资源 (6)
- 收藏
- 关注
原创 用堆对大文件进行多路归并的在线算法程序
int pos;表示文件号#define HEAP_CONTAIN 150#define ORDER_TYPE ushort#define NIL 65535typedef struct wrap_data{ ORDER_TYPE data; int pos;}wrap_data;wrap_data min_hea
2011-12-22 11:26:48 779
原创 快速排序中对指针地址所指向的值进行排序的代码
static int compareweight(const void *arg1, const void *arg2) {
2011-12-22 11:11:50 637
原创 禁用光标和调用函数接口的emacs配置
关于调用函数接口,按下esc + f 后就和按下esc +x 效果差不多 ,比如都可以调用函数indent-whole(defun kill-now ()
2011-12-18 13:01:42 515
原创 skew堆(相当于leftist的简化版)
#include #include #include #define NIL 99999#define RAND 1000typedef struct _skew{ int key; // int dis; struct _skew *left; struct _skew *right;}skew;typ
2011-12-14 11:41:23 879
原创 leftist (左偏堆,自动测试)
windows下运行正确,linux 却出错。主要是这行代码的问题。 wrapleftist *temp = (wrapleftist *)( (int)(node)-sizeof (wrapleftist *) );windows下写为 wrapleftist *temp = (wrapleftist *)( (int)(node)-4);用数字做了假定。 #incl
2011-12-12 18:46:04 767
原创 leftist (左偏堆,插入与弹出功能的实现)
与堆相比没有那么强烈的关系和限制。不过想想,如果要扩展原始堆,比如扩展为链表存储的形式,好像也就只能走左偏堆的路子。#include #include #define NIL 99999typedef struct _leftist{ int key; int dis; struct _leftist *left; struct
2011-12-12 17:26:59 588
原创 结构之法
结构之法前面在对多路归并进行分析时,仔细研究了败者树这种结构,可以将复杂度有n*path降低为n*log path,这是结构的力量,不是原始的1对1的比较,而是1与部分分形结构的比较。再回忆下huffman树的构造过程中也有类似的现象。目前我们即将讨论的leftist在构建树的时候也会表现这点,比如以前在自己的堆构建过程中,采用的是暴力法,也就是没有利用累加的结构优势,同样的如果构建lefti
2011-12-12 16:10:13 769
原创 二项堆和信息论的关系分析
二项堆和信息论的关系分析如果是一个个数字插入到二项堆中,那可以看到二项堆所组成的小堆中所包含的元素个数的变化情况,是1,2,4,8。。。这样的过程。如果是一个个删除的话,显然可以看到相反的过程。那我们先看稳定状态下的查找状况,查找最小的元素的时间复杂度是log n,调整恢复状态的时间复杂度也是log n.仔细想一下,这里log n的来源与多路归并中的层数确定方式是一样的,主要有如下关系存在
2011-12-11 23:26:05 402
原创 关于信息的存储
关于信息的存储简单地说可以分为明文和密文,比如一个很大的数字,4个字节能表示的,假设为11111111111111,很明显它所表达的十进制的长度会比4要长,而造成这种情况的原因是1个字节在二进制结构中确实能表示256中不同的选择,而在明文中,还是以数字为例子,确实又只能表示10种选择。造成不一样的本质在于一个是信息的基础表示,一个是抽象表示,因为基础表示要考虑到字符等其他东西,而抽象表示不需要
2011-12-11 21:05:40 572
原创 自动测试二项堆的插入和弹出
#include #include #include #define NIL 10000#define MAX 10000#define RAND 10000typedef struct _binheap{int key;int degree;struct _binheap *parent;stru
2011-12-11 20:26:37 469
原创 二项堆(减小关键字的值和删除指定关键字)
注意观察注释掉的代码#include #include #define NIL 9999typedef struct _binheap{int key;int degree;struct _binheap *parent;struct _binheap *sib;struct _binheap *child;}binhe
2011-12-11 19:09:21 1073
原创 安装linux需要注意的问题
/ 6000M /home 3000M /tmp 1024M /usr 6000M /boot 100M swap 1024M /var 剩下的所有 装完CentOS,启动后默认是进入图形界面,不熟悉,只需要设置/etc/inittab,修改以下行:id:5:initdefaul
2011-12-11 11:01:29 644
原创 排序功能完备的二项堆
插入的时候采用了不同的数据插入顺序,但排序的结果是一样的。level=0 key=33 level=1 key=55 level=0 key=12 level=1 key=21 level=2 key=77 level=3 key=221 level=2 key=345 level=1 key=44 level=2 key=67 level
2011-12-09 10:11:49 378
原创 linux界面操作程序
#define FLAG_TA (1#define FLAG_TC (1#define FLAG_REMAIN (1#define FLAG_LINK (1#define FLAG_TERM (1#define FLAG_HELP
2011-12-08 13:13:53 616
原创 对硬盘文件进行二分查找
uint32_t binary_search_file(FILE *fpfile ,int m_termcount , int single_length, uint64_t termsign){ int low=0,high=m_termcount-1; int mid; char *ptemp=(char *)calloc ( single_length
2011-12-07 23:33:06 1093
原创 比bitmap慢但不占用太大空间的字符串文本匹配版
int is_hotword(wchar wc,const char *path){ char filename[100]="\0"; sprintf(filename,"%s/%s",path,"hotword.txt"); static FILE *fp=NULL; static char hotword[256]="\0";
2011-12-07 10:14:43 624
原创 urlno的压缩和解压缩
//codeuint32_t urlno = ptmpUWArray[i].urlNo - cururlno;cururlno = ptmpUWArray[i].urlNo;/**佸弫獊鍋佺悊urlno */while ((urlno & ~0x7F) != 0) {pOPBuf[j++] = (urlno & 0x7f) | 0x80;urlno >>= 7;m
2011-12-07 09:49:12 657
原创 插入和打印功能完备的二项堆
其中在union时时候故意加的wrap_head很有意义,另外打印阶段采用的是深度优先,还能打印合理的层数. #include #include #define NIL 9999typedef struct _binheap{ int key; int degree; struct _binheap *parent; struct _bi
2011-12-04 22:33:44 566
原创 很不错的Makefile管理的工程
## Makefile#COMM_DIR=commonSPLIT_APP_DIR=splitBUILD_APP_DIR=buildRELEASE_DIR=releasecurDate=shell(date +%F)all: mk_project mk_releasemk_project: cd $(COMM_DIR); make
2011-12-02 13:13:36 547
原创 第一个Makefile文件(可以用来编译前面红黑树的实现程序和测试程序)
## split Makefile#AR=arARFLAGS=-crCC=gccSRC=rbtree_test.c red_black_tree.cSRCC=OBJ=$(SRC:.cpp=.o)OBJC=$(SRCC:.c=.o)OBJ_DBG=$(SRC:.cpp=DBG.o)OBJC_DBG=$(SRCC:.c=DBG.c.o)CXX_FLAG
2011-12-02 12:54:07 1549
原创 hash存储,序列化和调整大小平衡
#include #include #include "hashdict.h"templateEA_COMMON::CHashDict::CHashDict(){}templateEA_COMMON::CHashDict::~CHashDict(){}templateEA_COMMON::ENUM_HASHDICT_OPTYPE EA_COMMON::C
2011-12-02 10:11:01 902
原创 将任意数字转化为对应gbk输出的程序
#include #include int main (){ int i; char word[5]={0}; while (scanf("%d",&i) && i) { word[0]=i/256; word[1]=i%256; printf("%s\n",word); }}
2011-12-01 14:20:29 927
原创 红黑树用来存储单个汉字GBK编码
#include #include #include #define RAND 10000int error_label=0;#pragma pack(1)typedef enum _color { RED, BLACK }color;typedef struct _data{ int v
2011-12-01 10:19:24 1052
原创 能够处理冲突的散列表(中文文本匹配)
#include #include #include "tries.h"#include "dicthead.h"#define DEF_TRIES_DIC_VERSION 1struct STRU_TRIES_INN_NODE{ unsigned int m_uiLen; unsigned int m_uiAttr; unsigned int m
2011-11-30 11:35:10 1040
原创 让emacs完美显示中文
(set-language-environment 'Chinese-GB) (set-keyboard-coding-system 'euc-cn)
2011-11-29 18:45:37 3875
原创 经过自动压力测试的红黑树(删除功能完备)
#include #include #define COUNT 10000#define RAND (4*COUNT)int error_label=0;#pragma pack(1)typedef enum _color { RED, BLACK }color;typedef struct _d
2011-11-28 18:05:45 676
原创 linux 动态库和静态库的编译
g++ -shared -fpic -o libeaconfig.so eaconfig.cppg++ -o t mytest.c ./libeaconfig.so$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$g++ -c eaconfig.cppar -cr libea
2011-11-28 17:39:48 603
原创 我的emacs配置
;; .emacs;;; uncomment this line to disable loading of "default.el" at startup;; (setq inhibit-default-init t);; turn on font-lock mode(when (fboundp 'global-font-lock-mode) (global-font-lo
2011-11-28 15:32:35 458
转载 采用算法导论思维的红黑树
/****************************************************************************** * red_black_tree.c * * Download From:
2011-11-22 13:21:41 633
原创 关于树的最少节点数
关于树的最少节点数对于AVL树,因为定义的限制,需要满足如下关系a(n)=a(n-1)+a(n-2)+1存在,所以采用差分的方法是可以推出最后的精确结果的。对于满二叉树,采用国际上的定义,它的最少节点数不是以前习惯想的那样,因为按照新定义,huffman树也是属于满二叉树,按照直觉思维,它的最少节点数应该是这样的,根节点一个,其它每层都有两个节点,当然它的变化形式是多种多样的。可以这样计算
2011-11-22 08:25:10 1780
原创 从信息的角度看数字的表示和分割(败者树多路时的层数,树状数组求和时的次数,skiplist层数的确定)
从信息的角度看数字的表示和分割(败者树多路时的层数,树状数组求和时的次数,skiplist层数的确定)当用二进制表示数字时,除了进位关系外,还可以获得一些更弱但更有意义的联系存在。比如思考一个任意的数字它的二进制中1的分布情况,从人的思维角度看,是先看它的最高位应该在哪里?然后采用递归的方法,最后可以完全确定下来。而在观察数字的增长过程中,数字1分布的变化情况,其中体现的是当数字达到2^n次方
2011-11-20 21:11:35 685
原创 grep与sed,awk语义中的共同部分(筛掉特定字符串)
awk '$0 !~/printf/' my.c.tempsed '/printf/d' my.c.tempgrep -v printf my.c.temp 筛掉文件中包含printf的行。
2011-11-18 13:49:36 340
原创 grep与sed,awk语义中的共同部分
sed -n '/print/p' my.c.tempawk '/print/' my.c.tempgrep print my.c.temp 这三行代码的出的结果完全一样。 另外对于sed,以下两行命令意义一样.sed -n '/print/p' my.c.tempsed -n 's/print/&/p' my.c.temp
2011-11-18 13:12:21 442
原创 awk 条件打印
awk -F":" '{print $2==20? $0: $1}' chen.data chen.data文件内容为:data:10:1000us:1:32data:20:3000llsd:9:56kk:8:667data:100:2000dat:123:9000结果为(如果第二条记录为20,则打印全行,否则打印第一个记录)dat
2011-11-18 10:51:59 3378
原创 emacs 统计字符的个数
(defun countword () (interactive ) (let (( number 0)) (goto-char (point-min)) (while ( (forward-word 1)
2011-11-18 09:41:50 1379
原创 用awk进行动态计算
[boris@localhost ~]$ (echo "1&20" | awk -F "&" '{print $1+ $2}' ) 21[boris@localhost ~]$ (echo "1&20" | awk -F "&" '{print $1+ $2}' | awk '{print $0+100}' )121[boris@l
2011-11-17 14:10:08 877
原创 sed 过滤字符文本 (一行行的)
前面写过用sed对整个文件过滤的,代码很简单。现在这个是能够取出其中的一行行来过滤的,为了获取更多的相关信息。 注意列表中的空格先变为_,然后再变回来,不然会出错。 #/bin/shi=$( grep "chenbing" my.c.temp | sed 's/\ /\_/g' | awk -F "chenbing" '{print$1}')echo $i
2011-11-17 13:30:40 3196
原创 emacs 中的ring
34 67 89 2223 44 55 775 332 345 675 4234 123 565 345 98 1213 9876 90 353 4242 left ring
2011-11-15 18:54:22 617
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人