摘要: I/O重定向重定向I/O的是shell而不是程序。下面的例子证明了shell并不将重定向标记和文件名传递给程序。#include<stdio.h>main(int argc,char *argv[]){ int i; printf("%d args:\n",argc); for(i=0;i<argc;i++){ printf("%s\n",argv[i]); } fprintf(stderr,"this is message sent to stderr.\n");}$ ./listargs testing > 阅读全文
posted @ 2011-12-24 17:19 张朝阳 阅读(2107) 评论(0) 推荐(0) 编辑
摘要: 环境是每个程序都可以存取的一个字符串数组,每个字符串都以var=value的形式出现。在shell中列出环境:$ envORBIT_SOCKETDIR=/tmp/orbit-orisunWEKA_HOME=/home/orisun/develop/weka-3-7-4SSH_AGENT_PID=1587TERM=xtermSHELL=/bin/bashenv是一个普通的程序,它并不是shell内置命令。在shell中更新环境:$ export var=value在C语言中使用getenv()读入并修改环境:#include<stdio.h>#include<string.h& 阅读全文
posted @ 2011-12-24 11:47 张朝阳 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 问题:一个程序如何运行另一个程序?答:程序调用execvp#include<stdio.h>main(){ char *arglist[3]; arglist[0]="ls"; arglist[1]="-l"; arglist[2]=0; //参数字符串必须以0结束 printf("********About to execute ls -l\n"); execvp("ls",arglist); printf("********ls is done.bye\n");}execvp有两 阅读全文
posted @ 2011-12-22 19:04 张朝阳 阅读(8350) 评论(0) 推荐(0) 编辑
摘要: signalkill()不仅可以向进程发送SIGKILL信号,也可以发送其他信号。#include<signal.h>#include<sys/types.h>int kill(pid_t pid,int sig)pid的取值:正数:要发送信号的进程号0:信号被发送到所有和pid进程在同一个进程组的进程−1:信号发给所有的进程表中的进程(除了进程号最大的进程外)int raise(int sig) 进程向自身发送信号#include <unistd.h>unsigned int alarm(unsigned int seconds)alarm当定时器指定的时 阅读全文
posted @ 2011-12-22 11:48 张朝阳 阅读(3110) 评论(0) 推荐(2) 编辑
摘要: sleep(n)和alarm(n)的精度是秒。usleep(n)挂起进程n微秒或直到有一个不能被忽略的信号到达。#include<stdio.h>#include<curses.h>void main(){ initscr(); //初始化curses库和tty clear(); //清屏 int i; for(i=0;i<LINES;i++){ move(i,i+1); //把光标移到(10,20)的位置 if(i%2==1) standout();//启动standout模式,一般使屏幕反色 a... 阅读全文
posted @ 2011-12-22 10:23 张朝阳 阅读(562) 评论(0) 推荐(0) 编辑
摘要: $ ll wgettotal 544drwxr-xr-x 3 orisun orisun 4096 2011-12-15 09:48 ./drwxr-xr-x 65 orisun orisun 4096 2011-12-20 19:45 ../drwxr-xr-x 11 orisun orisun 4096 2011-08-09 21:55 wget-1.13/-rw-r--r-- 1 orisun orisun 540756 2011-12-15 09:47 wget.pdf目录总是不为空,它至少包含两项:.代表当前路径,..代表父路径。ll命令用于列出一个目录下的文件的详细信息:文件模式这 阅读全文
posted @ 2011-12-21 09:27 张朝阳 阅读(4185) 评论(0) 推荐(0) 编辑
摘要: 进程缓冲区我们慢慢来说明为什么要使用缓冲:只有工作在管理员模式下,即只有内核代码才可以访问磁盘、终端、打印机等设备,还可以访问全部的内存。而用户模式下只访问特定区域的内存空间。系统调用就是要从用户空间陷入内核空间,进入管理员模式。系统调用是很花时间的,原因:(1)执行权从用户代码转移到内核代码本身要进行数据传输;(2)管理员模式对应特殊的堆栈和内存环境,系统调用前必须建立好,系统调用后又要把堆栈和内存环境恢复成用户程序运行时的状态,这种切换需要消耗很多时间。read()和write()要访问磁盘,它们是系统调用,为节约时间应尽量减少read()和write()的调用次数,为达到此目的就要增大文 阅读全文
posted @ 2011-12-20 10:58 张朝阳 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: more命令可以实现的功能是很丰富的,包括模式查找。今天我们只是实现它的一个基本功能:more 文件列表在屏幕正文显示已读的百分比按下回车显示下一行按下空格显示下一屏按下q退出按回车、空格、q时没有回显这里有几个问题:要在屏幕正文显示已读的百分比,那我们必须先获取文件列表中各个文件的长度,这个可以使用系统调用lstat#include<sys/stat.h>struct stat *buf;lstat("filename",buf) //获取文件状态filesize+=buf->st_size; //获取文件大小要显示整屏内容,我们就需要知道一屏可以显示多 阅读全文
posted @ 2011-12-19 22:05 张朝阳 阅读(1628) 评论(0) 推荐(1) 编辑
摘要: 执行who命令查看已登录的用户信息$ whoorisun tty7 2011-12-19 14:12 (:0)orisun pts/0 2011-12-19 14:12 (:0.0)显示出了:用户名、终端名、登录时间、登录地址现在我们要自己写一个程序来实现who。是不是要用到一些特殊的系统调用,或者需要root权限呢?实际上都不用,我们要学会使用Linux的联机帮助文档,从Linux中学习Linux。要学习linux系统给我们提供的编程接口,很多时间查看相应的头文件就可以了。$ man whoWHO(1) User Commands WHO(1)NAME who - show who is l 阅读全文
posted @ 2011-12-19 18:33 张朝阳 阅读(2335) 评论(1) 推荐(0) 编辑
摘要: 在用perl写爬虫时,网页内容如果是英文可以正常写入文件,一旦网页中包含中文,文件是全部是乱码。可以网页的meta信息明明写着charset='utf8',并且我把网页内容直接输出到STDOUT也可以正常显示。尝试了很多方法都不行:open文件时指定utf8编码使用Encode::_to_utf8调用系统命令enca或iconv转码使用Unicode::MapUTF8::to_utf8使用Encode::encode和Encode::decode,即use Encode;print FH encode("utf-8",decode("utf-8&q 阅读全文
posted @ 2011-12-10 14:38 张朝阳 阅读(5506) 评论(0) 推荐(0) 编辑
摘要: AVL-tree、RB-tree、AA-tree均可以实现平衡的二叉查找树,虽然相对于一般的二叉搜索树其插入、删除节点的平均时间会比较长,但它们可以避免极验证应付的最坏的情况--树高度不平衡。 平衡二叉查找树所谓的平衡并不是绝对的平衡,而是要求任何一个节点的左右子树高度相差不会超过1,此时仍能够保证 阅读全文
posted @ 2011-12-06 12:08 张朝阳 阅读(7742) 评论(0) 推荐(1) 编辑
摘要: deque相对于vector的两大特点:可在常数时间内对首尾进行插入、删除操作。没有capacity(),不需要reserce(size_type n)。这是因为deque由动态分配的连续空间组合而成,随时可以增加一段新的空间链接起来。它没有必要像vector那样“因旧空间不足而重新分配2倍的空间,然后复制元素,再释放旧空间”。虽然deque也提供随机访问迭代器,但其复杂度不能和vector同日而语,这当然影响了各个运算层面。为提高效率,对deque进行排序时,可先将deque拷贝到vector中,再使用STL的sort算法,最后再复制回deque。deque是由一段一段的定量连续空间构成。一 阅读全文
posted @ 2011-12-06 09:17 张朝阳 阅读(3985) 评论(0) 推荐(1) 编辑
摘要: 上回文说到基于误差梯度下降的BP网络算法容易陷入局部极小,通常的改进方法先使用遗传算法生成比较好的权重值,再交给神经网络训练。遗传算法随着进化的进行,其选择率、交叉算子、变异率应该是动态改变的。编码方式在使用BP网络进行文本分类时,大都是采用实数编码,把权值设为[0,1]上的实数,这是因为要使用权值调整公式要求权值是实数。但是在使用遗传算法优化这些权值时,完全可以把它们编码为整数。比如设为[1,64]上的整数,一个权值只有64种选择,而[0,1]上的实数有无穷多个,这样既可以缩小搜寻的范围,同时也加大了搜寻的步长。毕竟BP网络中很多个极小点,使用遗传的目的只是在全局找个一个比较优的解,进一步的 阅读全文
posted @ 2011-12-02 11:35 张朝阳 阅读(8742) 评论(1) 推荐(3) 编辑
摘要: 书上的一个例子,是要识别英文字符C、I、T。 则XC=(1,1,1,1,0,0,1,1,1),XI=(0,1,0,0,1,0,0,1,0),XT=(1,1,1,0,1,0,0,1,0)。 1.标准BP算法 网络图我就不画了。 输入层X=(x0,x1,x2,...xi,...,xn) 隐藏层Y=(y0 阅读全文
posted @ 2011-11-30 19:15 张朝阳 阅读(10451) 评论(4) 推荐(5) 编辑
摘要: f(n)=f(n-1)+f(n-2)直接使用递归计算:#include<iostream>using namespace std;int count=0; //记录fibo函数调用的次数int fibo(int n){ count++; if(n==0 || n==1){ return 1; }else{ return fibo(n-1)+fibo(n-2); }}int main(){ int n=24; cout<<fibo(n)<<endl; cout<<"fibo函数被调用了"<<count<< 阅读全文
posted @ 2011-11-18 10:34 张朝阳 阅读(495) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/pangxiaodong/archive/2011/09/24/2189593.html问题描述:我这里有很多学生的学号(有重复的),已知其中有K个学生,他们的学号出现的次数都超过了总数的1/(K+1),请把这K个学号找出来。上代码:#include<iostream>#include<list>#include<utility>using namespace std;template<typename T,size_t N>inline size_t getArrLen(T (&arr)[N 阅读全文
posted @ 2011-11-17 22:48 张朝阳 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 问题描述和解题思路见此:http://www.cnblogs.com/flyinghearts/archive/2011/03/24/1994453.html。关于此问题我没什么好说的,值得一提的是请注意下面我的代码里那两个辅助函数:C++返回数组的长度;同时查找数组中的最大者和最小者。#include<iostream>#include<map>#include<vector>#include<algorithm>#include<string>#include<utility> //pairusing namespac 阅读全文
posted @ 2011-11-16 18:49 张朝阳 阅读(1102) 评论(0) 推荐(0) 编辑
摘要: 有时候从博客上粘贴过来的代码带有行号,删除起来很麻烦。”程度搞定一切“,于是就写了个小脚本来删除每行开头的行号。放在这儿,以备以后再用。 顺便说一下,Perl中的ARGV跟其他语言的有些不一样,比如C++中执行程序的命令本身就属于ARGV数组,而当你执行上面的脚本文件时“perl rmlineno. 阅读全文
posted @ 2011-11-14 09:44 张朝阳 阅读(2151) 评论(0) 推荐(0) 编辑
摘要: 先是写了个Java版本,由于运行时间太长,后来写了个C++版本,虽然时间缩短了,但还是得数小时。Java版:View Code 1 /** 2 * Author: Orisun 3 * Date: Oct 10, 2011 4 * FileName: KNN.java 5 * Function: 对于一个unseen文档,计算它与所有训练文档的向量夹角,根据KNN决定它以至于哪一类 6 */ 7 8 import java.io.BufferedReader; 9 import java.io.File; 10 import java.io.FileNotFoun... 阅读全文
posted @ 2011-11-12 09:39 张朝阳 阅读(2324) 评论(2) 推荐(2) 编辑
摘要: 计算每个特征项的权重时使用公式:上式是对于训练集,而对于测试集,我直接使用:对于训练集,TF和DF都在已经生成的word-doc矩阵中;对于测试集,TF需要另外数一下。对于文档中的一个词,我们首先要判断它是否是特征项,所以首先要把特征项放到一个HashSet中,这是可行的,因为所有特征项也就几千个。同时我们还要快速地从word-doc矩阵中找到该词对应的那一行。当特征项选定后,word-doc矩阵中那些非特征项对应的行就是没用的,所以我们可以对word-doc矩阵进行裁剪:View Code #/usr/bin/perl$bt=time;%hash_all_features=();my $fe 阅读全文
posted @ 2011-11-09 19:23 张朝阳 阅读(2299) 评论(0) 推荐(0) 编辑
摘要: 原始文件存储了每个特征项及其对应的IG值,一行一条记录,约11.7万行。#ifndef TERM_H#define TERM_H#include<string>using std::string;class term{private: string word; double ig;public: term(string word,double ig):word(word),ig(ig){ } string getWord() const{ return word; } void setIG(double newig){ ig=newig... 阅读全文
posted @ 2011-11-06 22:06 张朝阳 阅读(7356) 评论(1) 推荐(0) 编辑
摘要: 上一节我们已经对训练集建立了word-doc矩阵,每读取矩阵的一行就可以计算出term对应的IG值。最后把结果写入文件。信息增益的计算公式参见我的另一篇博客信息论。代码如下:View Code import java.io.BufferedReader;import java.io.File;imp... 阅读全文
posted @ 2011-11-05 18:15 张朝阳 阅读(4576) 评论(0) 推荐(1) 编辑
摘要: 选择问题即:寻找N个元素中的第K个最大者。选择问题的特殊情况是找最大者或最小者,这当然很简单了。还是一个特例找中位数。《寻找N个元素中的前K个最大者》方法总结是在这里看到的http://zhangliang008008.blog.163.com/blog/static/25136049200882423842325/,我觉得解法二和解法四用得广泛一些,编程实现了一下。利用快速排序中的partition操作经过partition后,pivot左边的序列sa都大于pivot右边的序列sb;如果|sa|==K或者|sa|==K-1,则数组的前K个元素就是最大的前K个元素,算法终止;如果|sa|< 阅读全文
posted @ 2011-11-05 09:48 张朝阳 阅读(3575) 评论(0) 推荐(0) 编辑
摘要: 首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。由此可得到快速排序和冒泡排序的一些共同点:都要经历n趟排序每趟排序要经历O(n)次比较都是后半部分元素比前半部大而不同之处就在于冒泡排序的交换操作发生相邻的元素之间,即一趟排序可以要经过多次交换操作;快速排序的交换操作发生在间隔比较远的两个元素之间,一趟排序要经过交换操作次数会少一些。下面给出快速排序的递归和非递归实现代码:#include<iostream>#include<vector>#include< 阅读全文
posted @ 2011-11-03 17:33 张朝阳 阅读(40143) 评论(6) 推荐(2) 编辑
摘要: 使用信息增益法选择特征项时需要建立word-doc矩阵。由于预处理后的测试集有7196个文档,按照常规方法内存根本不够用,所以决定采用Hadoop的standalone模式。View Code /** * Author: Orisun * Date: Sep 5, 2011 * FileName: WordDocMatrix.java * Function: 建立word-doc矩阵 */import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;i 阅读全文
posted @ 2011-11-02 17:07 张朝阳 阅读(1212) 评论(0) 推荐(0) 编辑
摘要: ICTCLAS提供C/C++,Java,C#接口。我发现在ubuntu上使用时,配置文件Configure.xml不起作用,因为不管<Tagger>设为On还Off,C版的总是加词性标注,而JNI版的总是不加词性标注。而<GranularityContorl>设为开或关结果都一样。先给一个C++版的:#include <string.h>#include <stdlib.h>#include <stdio.h>#include "/home/orisun/SoftWare/ICTCLAS50_Linux_RHAS_32_C/ 阅读全文
posted @ 2011-11-02 14:48 张朝阳 阅读(2951) 评论(0) 推荐(0) 编辑
摘要: 在感谢复旦语料库整理人员辛勤劳动的同时,也要指出其工作上的瑕疵。采用了gbk编码而不是UTF-8,这导致大多Linux用户不能直接使用。语料库包含训练集和测试集,分别包含9000多个文档,却分别有近1500个文档是重复的。训练集和测试集中的C35-Law中的部分文件是已经经过分词处理了的(分词结果很差),且部分又不是采用的GBK编码(这给编码转换工作带来麻烦)。有些文章只有文章头部,而没有实际的内容。step1.下载复旦语料库的训练集和测试集。解压。step2.分别删除train和answer文件夹下的C35-Law文件夹。step3.使用FindDupFile工具分别找到train和answ 阅读全文
posted @ 2011-11-01 21:10 张朝阳 阅读(3730) 评论(1) 推荐(1) 编辑
摘要: 新版的GCC编译器都支持OpenMP。在程序中需要引入omp.h头文件,另外在编译时需要指定-fopenmp选项。#include<stdio.h>#include<omp.h>#include<time.h>void test(){ int a=0; clock_t t1=clock(); for(int i=0;i<10000000;i++){ a=i+1; } clock_t t2=clock(); printf("Test Time=%ld\n",t2-t1);}int main(int argc,char *argv[]) 阅读全文
posted @ 2011-10-31 16:37 张朝阳 阅读(8499) 评论(0) 推荐(0) 编辑
摘要: 降维的必要性 1.多重共线性--预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。 2.高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。 3.过多的变量会妨碍查找规律的建立。 4.仅在变量层面上分析可能会忽略变量之间的潜 阅读全文
posted @ 2011-10-23 22:18 张朝阳 阅读(257225) 评论(26) 推荐(12) 编辑
摘要: 本文承接上篇博客《隐马尔可夫模型及的评估和解码问题》,用到的概念和例子都是那里面的。 学习问题 在HMM模型中,已知隐藏状态的集合S,观察值的集合O,以及一个观察序列(o1,o2,...,on),求使得该观察序列出现的可能性最大的模型参数(包括初始状态概率矩阵π,状态转移矩阵A,发射矩阵B)。这正好 阅读全文
posted @ 2011-10-22 09:32 张朝阳 阅读(30933) 评论(16) 推荐(3) 编辑
摘要: HMM介绍 Hidden Markov Models是一种统计信号处理方法,模型中包含2个序列和3个矩阵:状态序列S、观察序列O、初始状态矩阵P、状态转移矩阵A、混淆矩阵B。举个例子来说明。 你一个异地的朋友只做三种活动:散步、看书、做清洁。每天只做一种活动。假设天气只有两种状态:晴和兩。每天只有一 阅读全文
posted @ 2011-10-20 22:10 张朝阳 阅读(8557) 评论(3) 推荐(4) 编辑
摘要: 想法来自于《游戏编程中的人工智能》,坦克扫雷的相关介绍zzwu老兄的博客上有,原版是VC++写的,我重写了个Java版。初始,在随机的位置上布置地雷和坦克,未扫的地雷是红色,扫过的是绿色。单击游戏界面,则游戏暂停。再次单击则游戏继续。Game over后报告本次游戏所用的时间。可以点击这里下载我的源代码。 阅读全文
posted @ 2011-10-20 12:08 张朝阳 阅读(915) 评论(0) 推荐(0) 编辑
摘要: 在百度文库上看到一篇文章《遗传算法及神经网络在游戏开发中的应用》,里面讲到了用遗传算法走迷宫的小游戏,我自己编程实现了一下,并用SWT把游戏的界面做出来了。算法我就不多说了,上述文章里面讲得很清楚。直接看我做的小软件吧。刚开始初始化一个迷宫,一般是走不通的,但你点击一个格子它就会变色,由路变为墙,或由墙变为路。点击“Run"之后,遗传算法在后台运行,把出路给你找出来,然后在迷宫上把路径标出来。点击"Evolution Chart"查看进入情况,即每一代中最优的个体的适应度是多少。点击"Options"对遗传算法的参数进行重新设置。换用更大规模的 阅读全文
posted @ 2011-10-16 19:17 张朝阳 阅读(4257) 评论(5) 推荐(0) 编辑
摘要: BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)天生就是为处理超大规模(至少要让你的内存容不下)的数据集而设计的,它可以在任何给定的内存下运行。关于BIRCH的更多特点先不介绍,我先讲一下算法的完整实现细节,对算法 阅读全文
posted @ 2011-10-07 20:34 张朝阳 阅读(17205) 评论(26) 推荐(9) 编辑
摘要: 在关联规则挖掘领域最经典的算法法是Apriori,其致命的缺点是需要多次扫描事务数据库。于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,韩嘉炜老师的FP-Tree算法就是其中非常高效的一种。 名词约定 举个例子,设事务数据库为: 每一行为一个事务,事务由若干个互不相同的项目构成,任 阅读全文
posted @ 2011-10-04 15:09 张朝阳 阅读(63416) 评论(46) 推荐(17) 编辑
摘要: 先上问题吧,我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play)。如果给出新一天的气象指标数据:sunny,cool,high,TRUE,判断一下会不会去打球。table 1outlooktemperature... 阅读全文
posted @ 2011-09-30 15:57 张朝阳 阅读(66121) 评论(24) 推荐(6) 编辑
摘要: 先规范一下发间:bow的韵音同low而不是cow。bow包含三个项目:rainbow用于文本分类;arrow用于文本检索;crossbow用于文本聚类。这三个程序是独立的。Rainbow使用rainbow前首先要建立原始文档的一个model----包含了原始文档的一些统计信息,使用rainbow命令时通过-d选项来指定model的路径。rainbow -d ~/model --index ~/20_newsgroups/*以上命令是为 20_newsgroups所有分类创建model,生成~/model文件。--index目录可以分别写:rainbow -d ~/model --index ~ 阅读全文
posted @ 2011-09-27 21:44 张朝阳 阅读(956) 评论(0) 推荐(0) 编辑
摘要: 有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来。还有一个用于创建PDF文件的项目----iText。PDFBox下面有两个子项目:FontBox是一个处理PDF字体的java类库;JempBox是一个处理XMP元数据的java类库。一个简单示例:要引入pdfbox-app-1.6.0.jar这个包。package pdf;import java.io.File;import java.net.MalformedURLException;import org.apache.pdfbox.pdmodel.PDDocument;import 阅读全文
posted @ 2011-09-26 19:15 张朝阳 阅读(6179) 评论(2) 推荐(2) 编辑
摘要: 本文包含以下几个部分:支持向量机--SVM简介LibSVM的安装LibSVM的使用LibSVM参数调优Java版LibSVM库函数的调用SVM简介在进行下面的内容时我们认为你已经具备了数据挖掘的基础知识。SVM是新近出现的强大的数据挖掘工具,它在文本分类、手写文字识别、图像分类、生物序列分析等实际应用中表现出非常好的性能。SVM属于监督学习算法,样本以属性向量的形式提供,所以输入空间是Rn的子集。图1如图1所示,SVM的目标是找到两个间距尽可能大的边界平面来把样本本点分开,以”最小化泛化误差“,即对新的样本点进行分类预测时,出错的几率最小。落在边界平面上的点称为支持向量。Vapnik证明如果可 阅读全文
posted @ 2011-09-24 18:41 张朝阳 阅读(43909) 评论(7) 推荐(1) 编辑
摘要: CHAMELEON是一种两阶段聚类法。第一阶段把点分成很多小的簇;第二阶段根据相近程度合并这些小的簇。第一阶段采用K最邻近法,即把一个点和它最邻近的K个点连接起来。第二阶段计算任意两个簇的互连性RI和紧密性RC,当两个指标都比较大时才合并这两个簇。 相对互连度 $$RI(C_i,C_j)=\frac 阅读全文
posted @ 2011-09-20 18:25 张朝阳 阅读(10629) 评论(19) 推荐(2) 编辑