关闭

Don't Track Me Google

用Google的第一大烦恼是随时被墙。 番羽土啬吧。 用Google的第二大烦恼是,点击的链接总要过一道Google的统计。比如搜索test,第一条是www.test.com,但是点击的时候,打开的页面是  http://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CCoQFjAA&u...
阅读(2709) 评论(0)

你应该知道的vim插件之surround.vim

写代码的时候你会发现这个插件是多么有用! 强烈推荐! 0×01.change 1 2 3 4 5 6 cs"' cs" cs)] cstp> csw' csW' 1 2 3 4 5 6 7 8 9 10 11 文本              命令...
阅读(5297) 评论(0)

linux下平均负载3个数字的含义

越来越多人开始接触Linux操作系统,从VPS到无线路由的刷机系统(如OpenWRT、Tomato),同时也必不可少地会在各式各样的探针和系统监测界面上看到"系统平均负载"或者"Load Average"这样的字眼,但是它并不像我们习惯中Windows、Mac操作系统提供百分比显示CPU、内存占用率,而是以几个用空格隔开的浮点数来表示系统平均负载,那么它们到底是什么意思呢?又如何衡量系统负载及系统...
阅读(1920) 评论(0)

Ubuntu 开启 SSH服务

Ubuntu 开启 SSH服务 网上有很多介绍在Ubuntu 9.0.4下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务。 最终成功的方法如下: sudo apt-get install openssh-server Ubuntu缺省安装了openssh-client...
阅读(1913) 评论(0)

linux 使用boost

Linux上安装使用boost入门指导 获得boostboost分布只需要头文件的库使用boost建立一个简单的程序准备使用boost二进制文件库把你的程序链接到boost库 1.获得boost 下载boost_1_46_1.tar.bz2 解压 2.boost分布 boost_1_46_1.........................boost根目录   boost/....
阅读(3111) 评论(0)

STL中bind1st和bind2nd的区别

bind1st和bind2nd函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。为了达到这个目的,它们需要两个参数:要转换的bf和一个值(v)。          可能这么解释以后大家还不是很清楚,那么就说点白话吧。我们在做比较的时候所写的表达式像 x > k ,x x,k int a[] = {...
阅读(5231) 评论(1)

旋转数组

问题定义:       给定一个数组data[]和一个数M,向右旋转M位,要求时间复杂度为O(n),空间复杂度为O(1),如,char data[]="abcde", M = 2,旋转以后data 应该为cdeab,如何高效的实现该功能? 这是一个非常经典的题目,第一次自己看到可能根本想不出来,也是09年计算机研究生入学考试的算法题,该题在《编程珠玑》和《编程之美》里都有讨论,写这篇文章的原因...
阅读(5425) 评论(1)

python语言入门

个人总结: 1. python 不支持++ --操作 2. 缩进和":"是一起的,如果下面一行是子语句,需缩进,则上面一行末尾需要":" 3. python 可以这么赋值x,y,z=5,4,3 4. lambda 就是一个匿名函数对象,使用方法如:b=filter(lambda x: not x % 2, a) 将列表a里的素数拷贝到b中 5. 输入使用input 和 raw_input...
阅读(6225) 评论(5)

STL——for_each的用法

描述: template Function for_each (InputIterator first, InputIterator last, Function f); Apply function to range Applies function f to each of the elements in the range [first,last). Th...
阅读(9560) 评论(0)

遗传算法求解旅行商问题

1.遗传算法         遗传算法是受大自然的启发,模拟生物在自然环境中的遗传和进化过程而形成的一种自适应、具有全局优化能力的随机搜索算法。 自然界的进化包括3个原则: (1)适者生存原则,这意味着适应能力强的物种,会在残酷的竞争中生存下来,而适应能力差的物种会逐渐地消亡。 (2) 两性繁殖。这意味着种群中性别不同的个体,生活在一起,产生新的个体。 (3) 变异。 由于环境的变化,新...
阅读(14739) 评论(0)

linux和windows的内存组织方式

先看一道爱立信的笔试题,分析程序死循环的原因。 int index; int avg[3]; for(index = 0; index < 5; index++) { avg[0] = 10; avg[1] = 12; avg[2] = 10; if(index / 2) avg[3] = 0; else avg[3]...
阅读(2963) 评论(0)

模拟退火算法求解旅行商问题

一. 爬山算法 ( Hill Climbing )          介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。          爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜...
阅读(9991) 评论(2)

Ubuntu下LaTex中文环境配置

LaTeX是一个强大的排版软件,但是其最初只是为英文排版而设计的。为了使其能够胜任中文排版的重任,我们还需要进行一些额外的调教。这篇文章中,就谈谈如何在Ubuntu下(使用12.04)进行LaTeX中文环境配置。 第一步,安装基本的LaTeX环境: 1 sudo apt-get install texlive 第二步,安装中文...
阅读(4517) 评论(0)

STL中各种容器的删除操作

在应用中,我们通常不可避免地要对容器中的某些特定元素进行删除操作。这看起来并不是什么困难的问题。我们先写一个循环来迭代容器中的元素,如果迭代元素是要删除的元素,则删除之。代码如下所示:          vector intContainer; for(vector::iterator is = intContainer.begin(); it != intContainer.end();...
阅读(5257) 评论(2)

近似算法求解调度问题

给定n个任务J1, J2,……, Jn和M台机器M1, M2……,Mm。对于每个任务Ji,其处理时间为ti > 0,而且必须由一台不间断底处理,每台机器在一个时间段里最多处理一个任务。并行机器调度问题就是如何将任务分配给机器,使得处理完成任务的完成时间(makespan)最短。       对于这个NP问题,没有多项式时间的精确算法,用近似算法,效果好,速度快,真是难以置信啊,我刚5小时前还觉得...
阅读(2291) 评论(0)

交换整型的奇数位和偶数位

问题定义:         Write a program to swap odd and even bits in an integer with as few instructions as possible(e.g, bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc) 代码如下,自己想了一个晚上,居然没想出来,太失...
阅读(2330) 评论(1)

memcpy 和 memmove 的区别,memcpy 和 strcpy 的区别

以下是man memcpy的结果:  #include        void *memcpy(void *dest, const void *src, size_t n); DESCRIPTION        The  memcpy()  function  copies  n bytes from memory area src to memory...
阅读(2019) 评论(0)

[编程之美]设计一个高效的数据结构,尽可能快的返回队列中的最大值

如题。设计一个高效的数据结构,包含MaxElement操作,快速的返回队列中最大的元素。编程之美关于这题的解析实在是太漂亮了,因为直接求解没有什么好的解法,但是我们可以轻松使用两个栈来实现一个队列,这样就把问题转换为如果方便的从栈中返回最大值问题。         思路如下:         在栈中维护一个最大值序列,保证MaxElement操作的时间复杂度为O(1)。 伪代...
阅读(3310) 评论(3)

二叉树的非递归遍历

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 一.前序遍历...
阅读(1876) 评论(0)

找出有环链表中环的起点

问题:         给定一个有环的链表,写一个算法,找出环的起点。 例如: 输入:A->B->C->D->E->C[与前面的C是同一个节点] 输出:C 判断一个链表是否存在环有一个简单的方法,就是使用一个快指针、和一个慢指针,快指针每次走两步,慢指针每次走一步,则如果有环,它们最后必然会相遇的。本题的难点在于要找出环的起点。其实也不难,与判断是否有环类似,用两个步长分别为1和...
阅读(6481) 评论(2)

[编程之美]字符串的相似度

许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:   1.修改一个字符(如把“a”替换为“b”);   2.增加一个字符(如把“abdd”变为“aebdd”);   3.删除一个字符(如把“travelling”变为“traveling”);     比如,对于“abcdef...
阅读(1852) 评论(0)

[编程之美]二叉树的层次遍历

问题定义 给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。下面是一个例子: 输出: 1 2 3 4 5 6 7 8 节点的定义: structNode { Node *pLeft; Node *pRight; intdata; };...
阅读(21404) 评论(5)

[编程之美]求二叉树中节点的最大距离

问题定义 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 书上的解法 书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。 计算一个二叉树的最大距离有两个情况: 情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。 情况...
阅读(7710) 评论(2)

树中两个节点的最低公共祖先

问题定义:         Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure.NOTE:This is not necessarily a bin...
阅读(2498) 评论(0)

求一棵二叉树中任意节点的后继节点(后继节点是指在中序遍历中紧随其后的节点)

问题定义:         RT,基本上标题已经说得很清楚了。Write an algorithm to find the 'next' node (eg. in-order successor) of a given node in a binary search tree where each node has a link to its parent. 思路:         分为三种...
阅读(5934) 评论(2)

树的子结构——判断B树是不是A树的一颗子树

问题定义:          输入两棵二叉树A和B,判断B是不是A的子结构。 思路:         要查找树A中是否存在和树B结构一样的子结构,我们可以分成两步:第一步在树A中找到和B的根节点的值一样的节点R,第二步再判断A中以R为根节点的子树是不是包含和树B一样的结构。(关于建树部分可以参考:http://blog.csdn.net/lalor/article/details/76181...
阅读(5746) 评论(1)

重建二叉树

题目:         输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 思路:         在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但是中序遍历序列中,根节点的值在序列的中间,左子树的节点的值位于根节点的值的左边,而右子树的节点的值位于根节点的值的右边。因此我们需要扫描中序遍历序列,才能找到根节点的值。...
阅读(2976) 评论(0)

求二叉树中和为给定值的所有路径

问题定义:         You are given a binary tree in which each node contains a value. Design an algorithm to print all paths which sum up to that value. Note that it can be any path in the tree-it does not...
阅读(2101) 评论(0)

在一个数组中找一个三元组,使得它们的和等于指定值

问题定义: Find a triplet that sum to a given value Given an array and a value, find if there is a triplet in array whose sum is equal to the given value. If there is such a triplet p...
阅读(2328) 评论(0)

[Cracking the coding interview]判断一棵树是否平衡

问题定义:         Implement a function to check if a tree is balaned. For the purpose of this question, a balanced tree is defined to be a tree such that no two leaf nodes differ in distance from the r...
阅读(1181) 评论(1)

将一个数组转换成深度最低的二叉树

问题定义:         Givena sorted(increasing order) array, write an algorithm to create abinary tree with minimal height. 思路:        这题还是比较简单的,从已排序的数组和高度最低的二叉树这两个关键词中就可以得到一些启发,类似与二分查找,将最中间的元素作为根节...
阅读(1604) 评论(0)

[编程之美]子数组的最大和扩展题

子数组的最大和大家都会求,如果将首尾相连,则麻烦了不少。以下是编程之美提供的思路(对于全是负数的情况,返回0): 问题的解可以分为两种情况: 1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值 2)解跨过A[n-1]到A[0] 对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0 M_2=A[i]+...A[n-1]+A[0]+...+A[j]...
阅读(1061) 评论(0)

归并排序

都怪我们老师太牛逼,硬是成功的让我们相信了“数据结构”是一门只要上课听一下就可以的课程,不需要实践的。咱的理论可不是一般的牛,希快选堆是不稳定的排序算法balabala……言归正传,之所以需要学习归并排序是因为归并排序是时间复杂度接近最优的O(nLogn)的排序算法,平时写代码我们应该优先选者随机快速排序,那为什么还要学习归并排序呢?有两条理由可以说服我。 1, 学习一种新的思想,归并排序采用典...
阅读(874) 评论(0)

最大子矩阵之和

Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of...
阅读(728) 评论(0)

chrome浏览器的快捷键

chrome窗口和标签页快捷键:  Ctrl+N 打开新窗口  Ctrl+T 打开新标签页  Ctrl+Shift+N 在隐身模式下打开新窗口  Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件  按住 Ctrl 键,然后点击链接 从后台在新标签页中打开链接,但您仍停留在当前标签页中  按住 Ctrl+Shift 键,然后点击链接 在新标签页中打开链...
阅读(659) 评论(0)

单链表常见操作——18个难度各异的问题

一下程序包含了常见了单链表问题,包含18个难度各异的问题,是复习单链表的绝佳资料。 #include #include #include struct node { int data; struct node *next; }; /* *get the length of a linkedlist */ int Length(struct node *head); /*...
阅读(1262) 评论(0)

[unix系统编程]读者-写者问题

读者一写者问题是一个用信号量实现的经典进程同步问题。在系统中,一个数据集( 如文件或记录) 被几个并发进程共享,这些线程分两类,一部分只要求进行读操作,称之为“读者”;另一类要求写或修改操作,我们称之为“写者“。 一般而言,对一个数据集,为了保证数据的完整性、正确性,允许多个读者进程同时访问,但是不允许一个写者进程同其它任何一个进程(读者或者写者)同时访问,而这类问题就称之为”读者-写者“问...
阅读(1596) 评论(0)

perror和strerror的区别

概述: perror和strerror都是C语言提供的库函数,用于获取与erno相关的错误信息,区别不大,用法也简单。最大的区别在于perror向stderr输出结果,而 strerror向stdout输出结果。 测试代码如下: #include #include #include int main(int argc, char* argv[]) { FILE *fp; if (...
阅读(10731) 评论(0)

[Unix系统编程]用信号量实现哲学家就餐问题

概述:不知道是信号量简单,还是信号量太简单,《Advanced Programming in the UNIX Environment》居然不讲。有几个与信号量相关的系统调用,sem_init, sem_wait, sem_trywait, sem_post, sem_getvalue, sem_destory,可以通过man sem_init的方式查看帮助文档,确实比较简单,就不再赘述。 下面...
阅读(1949) 评论(1)

[面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合

思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增加了空间复杂度。 思路2:同样是基于查找,我们可以先将数组排序,然后依次取一个数后,在数组中用二分查找,查找sum -val是否存在,如果存在,则找到了一对二元组,它们的和为sum,该方法与上面的方...
阅读(9518) 评论(1)

Yong式矩阵的查找

问题定义: Q:给定一个矩阵,每行和每列都是有序的(单独看每行或者每列,自左到右或自上而下看,都是递增序列).写一个算法,找到指定的元素. 这个题目好像很火的样子. 代码示例: #include using namespace std; const int M = 4; const int N = 4; bool find(int *matrix, int rows, int co...
阅读(942) 评论(0)

两个字符串hash问题:检查两个单词是否互为变位词和在一个字符串中第一个只出现一次的字符

问题1:如何快速找出在第一个在一个字符串中只出现一次的字符。 问题2:如何判断两个单词是否互为变位词(两个字符串所含有的字符和字符个数都相同,如:abcda和adabc)         之所以将这两个问题一起讲,是它们有很大的相似之处,且开开始可能思路复杂,在看完答案以后都很简单明了。关于第一个问题,只需要统计每个字符出现的次数,然后再遍历一遍该单词,找出第一个出现次数为1的字符,时间复杂度...
阅读(2865) 评论(1)

[置顶] c/c++字符串处理函数

C语言处理字符串极为不便,幸好库函数提供了还算丰富的处理字符串的函数。有一些函数我们平时不大用的到,不过了解一下总是好的,知道有这么个东西,下次要用的时候再去查一下手册就好了。         这里介绍的函数主要有:strcat, strcmp, strcasecmp, strcpy, strdup, strlen, strchr, strrchr, strstr, strpbrk, strsp...
阅读(1481) 评论(0)

文件互斥的方式实现哲学家就餐问题

问题定义:         用互斥打开文件的方式解决哲学家就餐问题。 lock.h #include #include #include #include void initlock(const char *lockfile); void lock(const char *lockfile); void unlock(const char *lockfile); l...
阅读(902) 评论(0)

批量重命名文件

相对与windows下的批量重命名文件,linux下的重命名简直弱爆了~ 示例 首先新建一批文件: #!/bin/bash for name in {1..100}.jpg do touch $name done 以上脚本新建了100个jpg文件,虽然是空文件,不过完成我们的测试足够了。 重命名文件: #! /bin/bash count=1...
阅读(736) 评论(0)

测试管道的容量

#include #include #include #include #include int count; void alrm_action(int); int main() { int p[2]; int pipe_size = 0; char c = 'x'; static struct sigaction act; /*set up the signal ha...
阅读(1193) 评论(2)

Testing the Type of a File in Unix

The file mode, stored in the st_mode field of the file attributes, contains two kinds of information: the file type code, and the access permission bits. This section discusses only the type code, wh...
阅读(772) 评论(0)

POJ图论相关

Dijkstra && Floyd && Bellman_Ford && SPFA: POJ  1062 POJ  1125 POJ  1130 POJ  1178 POJ  1237 POJ  1502 POJ  1511 POJ  1529 POJ  1797 POJ  1847 POJ  1860 POJ  1932 POJ  1975 POJ  2139 PO...
阅读(1183) 评论(0)

Shell脚本之循环

Shell中有3中循环,分别是for,while,until,until与while正好相反,前者条件为假则执行,后者条件为真时执行。基本和C语言中额循环没什么区别。只是语法上有些差异。 for循环 格式: for var in word1 word2 …… in     command     command     …… done...
阅读(43411) 评论(2)

linux下常用的几个工具 (cut, uniq, wc, grep, sort, tr, paste)

cut cut就是“切”的意思,这个命令可以将一段信息的某一段“切”出来,处理的信息是以“行”为单位。 用法: 1. cut-d'分隔符' -f fields echo $PATH > test echo $PATH | cut -d':' -f 5 >> test echo $PATH | cut -d':' -f3,5 >> test more test /sr/lib...
阅读(4102) 评论(1)

vim小技巧(将Caps Lock键映射成Esc)

Caps Lock对我们来说基本就是多余的,而且在键盘中的位置根本不合理,一不小心就按到了Caps Lock,然后就出错了。Esc又是vim下使用最为频繁的按键,将Caps Lock替换成Esc真是再好不过了,而且不用担心按的时候按到了该死的。     可能有人会问,这样对于连续的大写不是就不方便了吗?我们可以先用小写,然后选中该段文中,按U,就变成大写了。现在是不是觉得Caps Lock确实是...
阅读(9658) 评论(2)

求两个链表的并集和交集

给定2个链表,求这2个链表的并集(链表)和交集(链表)。不要求并集(链表)和交集(链表)中的元素有序。 如,输入: List1: 10->15->4->20 List2: 8->4->2->10 输出: 交集(链表):4->10 并集(链表):2->8->20->4->15->10 方法一(简单、直观的方法):         下面是得到2个链表的并集和交集的简单算法。...
阅读(11807) 评论(0)

用归并排序对链表进行排序

当我们需要对链表进行排序时,由于不能对它的元素进行随机访问,所以更适合使用归并排序,大名鼎鼎的快速排序用到链表上,效率也很低,原因还是在于不能对链表中的元素进行随机访问,同理,采用堆排序更是不可能的事情。         算法具体实现时需要一个指向头节点(链表的第一个节点,链表中不包含额外的一个节点来作头节点)的指针,这是因为在算法实现的时候,不大可能第一个节点正好就是所有元素中最小的一个,则链...
阅读(13011) 评论(1)

将两个有序链表合并成一个有序链表

问题定义:         写一个函数SortedMerge函数,该函数有两个参数,都是递增的链表,函数的功能就是合并这两个递增的链表为一个递增的链表,SortedMerge的返回值是新的链表。新链表由前两个链表按元素递增顺序合并而成,也就是说它不会创建新的元素。 比如:这里有两个链表,分别是 list1: 5->10->15 list2: 2->3->20 SortedMerge函数返...
阅读(39067) 评论(2)

Unix编程之size_t、ssize_t

对于赶时间的朋友,只看第一段就好了。    首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的。size_t 就是无符号型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的编译器或系统可能会有区别,主要是因为在3...
阅读(29207) 评论(5)

Unix编程之环境变量

Unix提供了几个操作环境变量的函数以及一个全局变量,全局变量存储的是指向环境变量的指针,形如char **environ。 使用environ变量需要在源文件中进行外部声明: extern char ** environ; 相关函数: char *getenv(cosnt char *name);         Returns:pointer to value associated...
阅读(1271) 评论(0)

[算法导论读书笔记]huffman编码

huffman编码,大家都知道,不再过介绍。下面的程序只做练习,输入任意长度的字符,自动用根据字符的出现次数进行编码,可以看到,出现次数越多的字符,编码长度越短,这也是huffman编码的特点。需要注意的是,由于有些字符是不可打印的,或者打印出现看得不明显的,输出时输出的是其ASSIC码值。在linux下按ctrl+d结束输入,windows下么,我也不知道,自己google吧。 #includ...
阅读(997) 评论(0)

Java加密入门

加密算法的分类: 1.对称加密 DES,AES 2.非对称加密 RSA, DSA,  3.单向加密 MD5, SHA 对称加密的特点:     1.双方使用相同的密钥,解密方事先必须知道加密密钥     2. 加密时使用什么密钥,解密时必须使用相同的密钥     3. 对同样的信息,使用不同的密钥,加密结果理论上不相同     在DES中,使用了一个56位的密钥以及附加的8为奇偶校...
阅读(960) 评论(0)

STL的set容器如何存放结构体?根据什么排序?

下面程序的输出结果是什么?为什么? #include #include #include using namespace std; struct node { char ch; int cost; node() { ch = '\0'; cost = 0; } //把这个函数注释了,对整个程序没有任何影响 bool operator == ( const nod...
阅读(4309) 评论(0)

[算法导论读书笔记]活动选择问题

问题定义:     活动选择问题就是要选择出一个由相互兼容的问题组成的最大子集合。 活动编号:1    2    3    4    5    6    7        8        9        10        11   开始时间:1    3    0    5    3    5    6        8        8        2         12  完...
阅读(1680) 评论(0)

[算法导论读书笔记]Dijkstra算法

算法思想: Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。...
阅读(5737) 评论(4)

[算法导论读书笔记]Bellman-Ford算法(单源最短路径)

Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问题,因此 Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法时间复杂度为 O(VE),比Dijkstra算法的...
阅读(1661) 评论(0)

[算法导论读书笔记]Prim算法

算法思想: 任意时刻的中间结果都是一棵树,每次花费最小的代价,用一条边把不在树中的结点加进来。 【最小生成树算法实例】     现有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权代表公路造价。在分析了这张图后发现,任一对城市都是连通的。现在要求用公路把所有城市联系起来,如何设计可使得工程的总造价最少? 伪代码: 代码示例: #include us...
阅读(1720) 评论(0)

[算法导论读书笔记]Kruskal算法

算法思想:     把n个顶点看成看成n棵分离的树(每棵树只有一个顶点),每次选取可连接两个分离树中权值最小的边把两个分离的树合成一个新的树取代原来的两个分离树,如果重复n-1步后便得到最小生成树。     Kruskal算法适合于稀疏图,如果用邻接矩阵来表示图,那么按边的权重排序也不好实现。 伪代码: 代码示例: #include #include const...
阅读(1199) 评论(0)

[算法导论读书笔记]拓扑排序

算法思想:         算法导论中关于拓扑排序部分,讲得真是太好了。比按节点的入度的贪心法的拓扑排序容易理解,且容易实现。实现方法是这样的,用DFS遍历整个图,得出个节点的完成时间,然后按完成时间倒序排列就得到了图的拓扑排序序列。 例子: 伪代码: 代码示例: #include #include #include #include using names...
阅读(2096) 评论(0)

POJ并查集的题目汇总

POJ1611 The suspects题目描述: 有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入。但是SARS是很容易传染的,只要在改组有一位同学感染SARS,那么该组的所有同学都被认为得了SARS。现在的任务是计算出有多少位学生感染SARS了。假定编号为0的同学是得了SARS的。 解题思路---->显然并查集了。并查集的详细解释在可以点击 并查集(不相交集合)进行学...
阅读(7671) 评论(2)

[算法导论读书笔记]用于不相交集合的数据结构(并查集)

不相交集合数据结构的概念和操作:     不相交集合数据结构(disjoing-set data structure)保持一组不相交的动态集合S={S1,S2,S3,……Sk}。每个集合通过一个代表来识别,代表即集合中的某个成员。 我们希望不相交集合数据结构支持如下操作: 1 . MAKE_SET(x): 建立一个新的集合,其唯一成员就是x,所以其代表也就是自己。因为各集合是不相交的,故要求...
阅读(3383) 评论(0)

Depth First Traversal for a graph

Depth First Traversal (or Search) for a graph is similar to Depth First Traversal of a tree. The only catch here is, unlike trees, graphs may contain cycles, so we may come to the same node again. T...
阅读(1069) 评论(0)

[算法导论读书笔记]二项堆

二项树的定义: 二项树Bk是一种递归定义的有序树,如下图所示。二项树B0只包含一个节点。二项树Bk由两棵二项树Bk-1连接而成。其中一棵树的根是另一棵树的根的最左孩子。下图所示的是二项堆,二项堆链接了三个二项树(B0 B2 B4 )。 二项树的性质: 1.共有2k个节点。 2.树的高度为k 4.根的度数为k,它大于任何其他节点的度数;并且,如果根的...
阅读(1387) 评论(0)

图的广度优先搜索

图的广度优先搜索基本思想和树的层次遍历差不错。与树的层次遍历不同的是,图中可能包含回路,我们遍历完一个节点,继续进行遍历,可能会回到已经遍历过的节点。为了避免遍历一个节点两次,需要开辟一个bool型的数组来标记该节点是否已经遍历过。       例如,在下图中,我们从节点2开始遍历,当我们到达节点0以后,继续寻找节点0的邻接点,节点2也是节点0的邻接点。如果我们不对已经遍历过的节点做任何标记,节...
阅读(2151) 评论(1)

[算法导论读书笔记]线性时间排序——桶排序

桶排序的要求:         当桶排序的输入符合均匀分布时,即可以以线性期望时间运行。与计数排序类似,桶排序也对输入做了某种假设,因此运行得很快。具体来说,计数排序假设输入是由一个小范围内的整数构成,而桶排序则假设输入由一个随机过程产生,该过程将元素均匀而独立地分布在某一区间。 基本思想:         桶排序的思想就是把区间划分成n个相同大小的子区间,或称桶。然后将n个输入数分布到各个...
阅读(918) 评论(0)

[算法导论读书笔记]线性时间排序——计数排序

计数排序的要求:     计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。当 k = O(n)时,计数器的排序运行时间为O(n)。 基本思想:     计数器排序的基本思想就是堆每一个输入元素x,确定出小于x的元素个数。有了这一信息就可以把x直接放在它在最终输出数组中的位置上。例如,如果有17个元素小于x,则x就属于第18个输出位置。当有几个元素相同时,这个方案...
阅读(719) 评论(0)

[算法导论读书笔记]堆排序,优先队列

#include #include #include #include //#include #include #include #define PARENT(i) (i/2) #define LEFT(i) (2*i) #define RIGHT(i) (2*i+1) //test data #define MAX 1000000 int HEAP_SIZE; int ARR_L...
阅读(1277) 评论(2)

从一亿个数中找出最大的一万个数

问题定义:         从一亿个数中找出最大的一万个数 不假思索:         拿到这道题,马上就会想到的方法是建立一个数组把1亿个数装起来,然后用for循环遍历这个数组,找出最大的1万个数来。原因很简单,如果要找最大的那个数,就是这样解决的;而找最大的一万个数,只是重复一万遍。这个解法类似于选择排序,一次将一个正确解放在合适的位置,重复一万次,所以时间复杂度为O(n *m),如果你...
阅读(7718) 评论(3)

clock,clock_t,times的注意事项

1. clock,windows下的time一样, 也和 linux下的times一样 2. clock返回clock_t型,其实就是长整型 3. clock和times返回的单位是滴答 4. 滴答根据不同的系统,和不同的标准而不同     The clock() function returns the processor time since the program start...
阅读(3553) 评论(1)

不用任何算术运算符计算两个数的和

问题定义:     写一个函数 int Add( int x, int y),计算两个整数的和,这个函数不能使用任何算术运算符(+, ++, --, -……等。) 分析:     考虑只有一位的二进制,在这种情况下,有四种可能( 0 + 0, 1 + 0, 0 + 1, 1 + 1 ),我们可以把这四种可能分成两种情况,一种情况就是位相同(0 + 0, 1 + 1),一种情况就是位不相同(1...
阅读(1563) 评论(0)

Unix下文件的访问权限

access Function:     When we open a file, the kernel performs its access tests based on the effective user and group IDs. There are times when a process wants to test accessibility based on the real...
阅读(1024) 评论(0)

[置顶] C语言细节

这篇文章主要讨论C语言细节问题。在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结这篇文章: 1. 总会有些面试官喜欢问这样的问题,尤其是偏底层开发的面试官。 2. 总有有那么两个2B同学、同事,搞两个很偏的知识点来考你,把你难倒以后,他就乐呵呵的满足了。 3. 对C语言...
阅读(2907) 评论(1)

KMP算法的练习题(poj 3461、poj 2752、poj 2406、poj 1961)

//poj 3461 Oulipo 最简单的KMP题,找出第一个字符串在第二个字符串中出现次数。 #include #define M 1000010 char s[M],t[M]; int next[M],sum; void getNext()//求next数组 { int i,j; next[0]=-1; for(i=1,j=-1;s[i];i++){ while(j!=-...
阅读(6131) 评论(0)

poj3126

1)这是自己写的,超时了。 #include #include #include #include #include #include using namespace std; #define MAX_WORD 1200 //保存所有的素数 int data[MAX_WORD]; //1000——9999共有几个素数, 1061 int g_num =0; char map[2]...
阅读(1108) 评论(0)

[算法导论读书笔记]最长公共子串

代码示例: #include #include #define MAX 50 char up = 'u', left = 'l', topLeftConer = 'c'; void PrintLcs( char b[][MAX], char *x, int i, int j) { if( i == 0 || j == 0)return; if( b[i][j] == topLeftC...
阅读(573) 评论(0)

[算法导论读书笔记]矩阵链乘法

参考资料:http://net.pku.edu.cn/~course/cs101/2007/resource/Intro2Algorithm/book6/chap16.htm 代码示例: #include #include //共有6个矩阵相乘 #define N 6 //代表无穷大 #define infinity 4280000 void PrintOptimalParens( uns...
阅读(820) 评论(0)

[算法导论读书笔记]装配线调度问题

问题描述:有二条流水线,每条流水线都有n个站,流水线1,2站j的处理功能相同,但处理时间可能不同,每个站都有一个处理时间,而且从一条流水线的站j-1到另一条流水线站j有一个消耗时间t1[j-1](从流水线1到2)或t2[j-1](从流水线2到1),同一条流水线站j-1到站j的消耗时间忽略不计,物品上每一条流水线有个时间,下每一条流水线也有一个时间。 ---------------------...
阅读(2266) 评论(2)

主元素问题(判断数组是否出现主元素,O(n)时间内找出主元素,主元素出现次数)

x称为一个长度为n的数组a的主元素,如果这个数组里面等于x的元素数目不少于n/2个。例如,a={2,3,2,2,5,3,2,4,2}, x = 2就是主元素。给定包含n个元素的数组a,主元素问题就是判断数组a是否包含一个主元素x。          一个一般的方法就是对数组排序,然后相同的元素就会聚集在一起,这样的算法复杂度介于O(nlgn) 和O(n^2)之间。         为了更快的找...
阅读(2982) 评论(1)

又见八皇后

一般八皇后问题都要求我们找出所有的可能性(如: http://blog.csdn.net/lalor/article/details/7315891 ),但是如果只要求我们找出一组可行的解,要如何快速的实现呢?下面给出求一个可行解的递归程序: #include #include #include using namespace std; const int n = 8; int y[...
阅读(762) 评论(0)

chattr和lsattr的用法

chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多 功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令 修改属性能够提高系统的安全 性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var 目录。 lsattr比较简单,只是显示文件的属性 [ro...
阅读(1054) 评论(0)

umask的用法

umask: umask用以指定目前用户在新建文件或目录时候的权限默认值。 用法: 1.umask    显示希望用umask取消的权限 2.umask -S 显示umask取消相应权限以后的权限 3.umask 0022 指定默认文件中不需要的权限 lalor@ubuntu:~/temp$ umask 0022 lalor@ubuntu:~/temp$ umask -S...
阅读(2117) 评论(0)

touch的用法(新建文件,修改时间)

touch: touch这个命令最常使用的情况是:1.创建一个空文件;2.将某个文件的日期修改为目前日期(mtime, atime) 补充知识:mtime, ctime, atime linux会记录很多的时间参数,常用的有一下三种: 1.modification time(mtime) 即文件的修改时间。 2.status time(ctime) 文件的“状态”改变的时间,...
阅读(1284) 评论(0)

C/C++程序员眼中的Java

JAVA:     一个程序有多个类,但是只有一个类前面允许加public,这个类称为主类,且java源程序的名字必须与主类的名字完全一致,扩展名必须为java,主类中含有main方法,是整个程序的入口。一个java文件中可以有多个类,但是只有一个主类。 数组的定义: int [] a1 = new int[10]; int a2[] = new int[10]; a.lengt...
阅读(910) 评论(0)

linux下配置java运行环境

一、下载Linux JDK   1. 下载从这里可以找到最新的 Linux JDK:http://java.sun.com/根据自己的机器来下载对应的版本,例如jdk-1_5_0_05-linux-i586.bin这是 J2SE Development Kit 1.5 update 5 for Linux 的 sh 自解压执行脚本。里面已经包含安装压缩包。   2、释放软件包查看当前目录下...
阅读(2230) 评论(0)

一些好的编程习惯

1.尽量不要用立即数,而用#define定义成常量,以便以后修改。 2.使用sizeof()宏,不直接使用变量所占字节数的数值。 3.稍微复杂的表达式要积极使用括号,以免优先级理解上的混乱以及二义性。 4.不很容易理解的表达式,要分写成几行 5.嵌套的if else要多使用{} 6.单个函数的程序行数最后最好不要超过100行,其实代码超过50行,就需要重新审视一下,很 少需要1...
阅读(534) 评论(0)

常用C语言标准库函数

1.数学函数 abs(x) cos(x) fabs(x) ceil(x)  //求不小于x的最大整数 floor(x)  //求不大于x的最小整数 log(x)  //求x的自然对数 log10(x) //求x的对数(低为10) pow(x, y) sin(x) sqrt(x) 2.字符处理函数 int isdigit( int c) int isalpha( i...
阅读(676) 评论(0)

12.4循环链表、链表节点的删除--约瑟夫环

之所以将这段代码再敲一次,因为这段代码有几点值得学习。 1.对于链表,可以很方便的在表头插入数据,但是如果保留一个尾节点,则可以很方便的尾部插入节点。 2.不用专门定义一个指针来保留欲删除节点的父节点,只需要在数数的时候少数一个即可。如代码中:if( count == stride - 1) 代码示例: #include struct Monkey { int...
阅读(700) 评论(0)

字符串匹配之Rabin-Karp算法

问题描述:       Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Rain-Karp在最坏的情况下与朴素匹配一样,但是实际应用中往往比朴素算法快很多。而且该算法的期望匹配时间是O(n)【参照《算法导论》】,但是Rabin-Karp算法需要进行数值运算,速度...
阅读(6019) 评论(3)

10.3例题:最长上升子序列

问题定义: 一个数的序列bi,当b1 这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).  你的任务,就是对于给定的序列,求出最长上升子序列的长度。 输入数据 输入的第一行是序列的长度N (1 输出要求 最长上升子序列的长度。 输入样例  7  1 7 3 5 9 4 8 输出样...
阅读(1327) 评论(0)

9.7例题:八皇后问题

问题描述: 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将  8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后 问题。对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8, 其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数b,要...
阅读(1809) 评论(0)

9.6例题:红与黑

问题描述: 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入数据 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。  W和H都不超过20。在接下来的H行中,每行包括W个字符。 每个字符表示一块瓷砖的颜色,规则如...
阅读(2446) 评论(0)

8.4搜索空间中解不唯一的例子:完美立方

问题定义: a3 = b3 + c3 + d3为完美立方等式。例如123 = 63 + 83 + 103。编写一个程序,对任给的正 整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中1 输入数据 正整数  N (N≤100) 输出要求 每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a...
阅读(1168) 评论(0)

8.3数学模型中包括多个变量的例子:称硬币

问题定义: 赛利有  12枚银币。其中有 11枚真币和1枚假币。假币看起来和真币没有区别,但是重量不同。但赛利不知道假币比真币轻还是重。于是他向朋友借了一架天平。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称三次...
阅读(1190) 评论(0)

8.2简单枚举例子:生理周期

问题定义: 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例 如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。     对于每个周期,我们会给出从当前年份的第一天开始,...
阅读(1367) 评论(0)

个性化vim之折叠

手动折叠: zfap 你将会看到该段落被一行高亮的文本所代替。你已经创建了一个折叠了。|zf|是一个操作符,而|ap|是一个文本对象。你可以将 |zf| 操作符跟任何一个移动命令联用,为所经 之处的文本创建一个折叠。 |zf| 也能在可视模式下使用 说明:ap是用以选择一个段落。这里a的用法如下所示: " "this is a example" " 使用的方法就是a 只要在内层双引...
阅读(4506) 评论(0)

随机选择(求中位数,第i 小的元素)

问题定义: 输入:输入一个由n个元素构成的集合a和一个数值i,且1 输出:一个元素x属于a,它比前面i-1个元素都大,也就是第i个最小的元素。 特列:寻找中位数问题。 随机选择的时间复制度为O(n)。 代码如下: /* *Copyright(c) Computer Science Department of XiaMen University * *Author...
阅读(1111) 评论(0)

线性规划之单纯型算法

问题定义:         问题定义比较复杂,建议看《算法导论》里的线性规划一章。单纯型算法用于求解如下这类问题: 例: 求等式的最小值:  -2X1– 3X2   且自变量满足如下约束:  X1 + X2 = 7 X1  –  2X2  X1 >=  0 将约束等式转换为标准型: 标准型的条件: 1. 求目标函数的最大值 2. 每个自变量都大于等于零...
阅读(5499) 评论(3)

Buffon投针(近似计算π)

问题定义:     如果地板的宽度是针的两倍,则向地板投针,与地板缝隙相交的概率为1/π 参考资料: http://www.hudong.com/wiki/Buffon%E6%8A%95%E9%92%88%E9%97%AE%E9%A2%98 程序如下: #include #include #include #include // 设地板的宽度为2,针的长度为1 void...
阅读(1090) 评论(0)

linux文件内容查看(cat,tac,nl,more,less,head,tail,od)

cat:由第一行开始显示文本内容 tac:从最后一行开始显示文本内容 nl:显示的时候,顺便输出行号 more:一页一页地显示文件内容 less:与more类似,但是比more更好的是,可以往前翻页 head:只看头几行 tail:只看结尾几行 od:以二进制的方式读取文件内容 cat [-AbEnTv] -A 相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已...
阅读(2477) 评论(0)

linux权限管理(chmod, chgrp, chown)

chgrp  :  change the group chown:  change the owner chmod:  change the permission chgrp [-R] dirname/filename...... For example: chgrp users install.log chown [-R] username dirname/filenam...
阅读(972) 评论(0)

5.3日历问题

问题描述: 在我们现在使用的日历中 , 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。 例如:  1700, 1800, 1900 和 2100不是闰年,而 1600, 2000 和 2400是闰年。给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。 输入数据 输入包含若干行,每行包含一个正整数...
阅读(3181) 评论(4)

5.2 细菌繁殖

问题描述 一种细菌的繁殖速度是每天成倍增长。例如:第一天有  10个,第二天就变成  20个, 第三天变成  40个,第四天变成  80个,……。现在给出第一天的日期和细菌数目,要你 写程序求出到某一天的时候,细菌的数目。 输入数据 第一行有一个整数  n,表示测试数据的数目。其后  n行每行有  5个整数,整数之间 用一个空格隔开。第一个数表示第...
阅读(2498) 评论(0)

4.4子串

问题定义: 有一些由英文字符组成的大小写敏感的字符串。请写一个程序,找到一个最长的字符串x,使得:对于已经给出的字符串中的任意一个y,x或者是y的子串、或者x中的字符反序之后得到的新字符串是y的子串。 输入:输入的第一行是一个整数t (1 数据,第一行是一个整数n (1 输出:对于每一组测试数据,输出一行,给出题目中要求的字符串x的长度;如果找不到符合要求的字符串,则输...
阅读(1656) 评论(0)

3.2 相邻数字的基数不等比:skew数

问题定义:  在 skew binary表示中, 第 k 位的值 xk表示 xk.(2k+1-1)。每个位上的可能数字是 0 或1,最后面一个非零位可以是 2,例如, 10120(skew) = 1*(2^5-1) + 0*(2^4-1) + 1*(2^3-1)+ 2*(2^2-1)+ 0*(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44.前十个 skew数是 0、1、2、10...
阅读(1052) 评论(0)

3.1想邻数字的基数等比:确定进制

问题定义: 6*9 = 42对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) =42(13),而  42(13) = 4 * 131 + 2 * 130 = 54(10)。你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16)使得p * q = r.如果 B有很多选择, 输出最小的一个。例如:p = 11, q = 11,...
阅读(959) 评论(0)

[编程珠玑读书笔记]抽样问题

问题定义:从n个数中,等概率的抽取m个数。 真心觉得自己概率论学得不咋第。第一个和第三个函数还是没有看懂。 #include #include #include #include using namespace std; void genknuth( int m, int n) { srand(5); for( int i = 0; i < n; i++) if( (rand...
阅读(799) 评论(0)

个性化vim之映射(map,vmap)

map是一个映射命令,将常用的很长的命令映射到一个新的功能键上。 map的格式: map ,比如 map T :q!后,则在命令模式下按T并按回车,就会退出vim vmap 和map类似,二者的区别在于前者用于所谓的Visual模式,后者用于通常的命令模式。  映射 :map ggvG 解除映射 :unmap 清除所有映射 :mapclear 在光标后...
阅读(12611) 评论(0)

个性化vim之配置文件vimrc

当我们使用vim进行一些高级时,发现每次都需要进行相应的设置(如:这次设置了缩写 ab #i #include ,下次使用就不行了,还得再次设置,非常不爽)vim不会为我们保存这些个性化的设置,需要我们自行修改配置文件。         这篇博客主要讨论vim的配置文件,使其能保存我们的一些个性化设置。其实设置也很简单,只是初学者对此毫无头绪,而且,想用搜索引擎解决这个问题,又不知到该输入什么关...
阅读(3169) 评论(0)

[Accelerated c++读书笔记]统计单词出现的行号

This is a program to generate a cross-reference table that indicated where each word occurs in the input. Here is the program( I think this is a good example to illustrate the subject which is modern...
阅读(669) 评论(0)

[编程珠玑读书笔记]堆排序,小根堆

堆排序的关键是要实现siftup和siftdown。当建立完这两个函数以后,排序一个数组只需要5行代码。算法执行了n-1次siftup和siftdown,而每次操作的成本最多O(lgn),所以运行时间为O(nlogn)。 #include #include #define MAX 20 void swap( int *data, int i, int j) { int temp...
阅读(3107) 评论(0)

[编程珠玑读书笔记]优先队列

以前学数据结构的时候,学到后面一些抽象一点的数据结构,老师也不让我们写代码,也没有强调这些东西的重要性。再加上那时候不懂事,都没有具体去实现过堆,总认为这是很复杂的东西,其实学会以后真是简单的不得了,而且是又简单,又好用。#include #include #include using namespace std; template class priqueue{ private: int...
阅读(628) 评论(0)

vim高级主题之缩写(iab, ab, abbreviate)

这几天对vim的学习就快到了狂热的地步,简直忘了学习vim是为了编程,没有办法,就是喜欢,就是希望这种狂热的感觉。 缩写(abbreviations):     缩写在插入,替换和命令行模式中使用。如果你输入一个是缩写的单词,它会被替换成所表示的东西。这可以在经常输入的长单词时节省键击。并且能用它来自动更正经常犯的拼写错误。例如:    :iab ms Microsoft    :...
阅读(2641) 评论(0)

[编程珠玑读书笔记]最长重复子串

问题定义:     给定一个输入文本文件,查找其中最长的重复子字符串。例如,"Ask not what your country can do for you, but what you can do for you country"中最长的重复字串就是"can do for you","your country"是第二长的重复字串。如何编程找出最长的重复字串?如何找出出现次数超过M的重复字串?...
阅读(886) 评论(0)

bitset练习

标准库提供的bitset类简化了位集的处理。bitset其实很简单,只是因为它不如vector和string那样常用,所以很多人都放弃了这么好用的工具。 头文件:#include 常用的成员函数: b.any() b中是否存在置为1的二进制位? b.none() b中不存在置为1的二进制位吗? b.count() b中置为1的二进制位的个数 b.size() b中二进制位数...
阅读(1220) 评论(0)

[编程珠玑读书笔记]第一章代码实现

用C++的bitset实现非常的方便: /************* 位图排序算法实现 *************/ #include #include #include using namespace std; int main() { // 查看bitset的实现可知bitset是利用对unsigned long进行位运算间接实现对位的存储的 // 如是保存一个32位的bits...
阅读(886) 评论(1)

[编程珠玑读书笔记]最好的快速排序与库函数中的排序函数比较

#include #include #include #include using namespace std; const int MAX = 100000; void swap( int *data, int i, int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp; } void InsertSort3( in...
阅读(701) 评论(0)

[编程珠玑读书笔记]快速排序

一步一步优化的快速排序,速度比插入排序快很多,而且可以很方便的引入随机算法来避免最差情况。 #include #include #include #include #include //#include using namespace std; #define DEBUG const int MAX = 1000000; int cutoff = 10; void swap( int *...
阅读(1603) 评论(9)

[编程珠玑读书笔记] 插入排序

这么简单的插入排序,都可以优化,还有什么是不可以优化的。最让我惊讶的是,当多次调用一个函数的时候,函数的调用开销是不可忽略的。正如测试结果所示: #include #define MAX 1000000 void swap( int *data, int i, int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp;...
阅读(788) 评论(2)

[Accelerated c++读书笔记] 读入一行,拆分每个word。

很多C++书籍都鼓励我们使用vector替换数组,使用string替换传统的字符串,我一直相信可以这么做,而且这么做了以后,会减少工作量,提高效率。知道是一回事,实际操作起来是一回事,每次使用string的时候总会有这样那样的问题。我在想,之所以Accelerated c++这本书这么有名,或许就是因为作者直接教我们用C++的方式思考,这本书只看了一小部分,但是有个例子很能说明问题——作者教我们如...
阅读(2735) 评论(0)

vim宏录制

看陈皓大哥的博客(http://coolshell.cn/),学习VIM,宏录制的神奇在我脑海中挥之不去,不禁感叹VIM的强大。 示例如下: 宏录制: qa 操作序列 q, @a, @@ qa 把你的操作记录在寄存器 a。 于是 @a 会replay被录制的宏。 @@ 是一个快捷键用来replay最新录制的宏。 示例 在一个只有一行且这一行只有“1”的文本...
阅读(5841) 评论(2)

POJ1035Spell Checker

此乃程序提交失败,至今没有搞懂哪里不对。留做纪念,以后再回头来看。 #include #include #define max( a ,b ) ((a)>(b)?(a):(b)) #define MAX_LEN 16 #define MAX_NUM 10000 char words[ MAX_NUM ][ MAX_LEN ]; int ndata[ MAX_NUM + 1][ MAX...
阅读(601) 评论(0)

memset效率测试

刚刚AC了一题,需要将数组部分初始化为零,为了简单我就用memset将整个数组置零了,在我印象中memset函数的速度是快得惊人的,没想到居然超时了,让我不得不重新审视memset的效率和我那想当然的愚昧。     初始化部分如下:#include #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; ch...
阅读(5992) 评论(3)

vim 剪贴板

vim很强大,时常都会有新的惊喜和发现。今天解决的是两个关于剪贴板的问题。 1、怎样在X系统与vim进行拷贝粘贴操作(即vim与系统剪贴板的交流)? 2、拷贝某段文本A,覆盖文本B(或者用d或x删除B)。之后再使用p进行粘贴,就变成了B的内容,如果希望继续粘贴A,怎么办? 首先来点基础,vim有多个剪贴板,其中就包括了系统剪贴板。使用命令:reg可以看到各个剪贴板的内容。其中“”...
阅读(4853) 评论(0)

POJ1458最长公共子序列

为了完成POJ中的一题(spell checker),要写一个最长公共子序列的程序,居然突然全给忘了,楞是没有写出来,深深的鄙视自己一下。 这也是一道动态规划的典型题。 递归实现如下(POJ提交会超时,但是确实可以实现): using namespace std; #define max( a ,b ) ((a)>(b)?(a):(b)) //最长公共子序列 int maxle...
阅读(840) 评论(0)

linux文件管理相关命令mv mkdir cp rm

新建目录: mkdir directory mkdir [-m] [-p] 目录 -m 指定属性,也可以事后用chmod命令修改属性  -p 指定目录,默认是在当前目录想创建新的目录 rm 删除文件或目录( 可以使用正则表达式 ) 用法:rm [选项]... 文件... -f, --force 强制删除。忽略不存在的文件,不提示确认 -i 在删除前需...
阅读(1256) 评论(0)

alias的用法

alias的意思就是别名,顾名思义,就是给一个命令取个小名,便于记忆和使用。     使用方法:     alias '..'='cd ..'     注意:= 号两边不要有空格。 最常用的就是给需要用到的有很多参数的命令取别名: 如: alias lm='ls -l | more'   //左边可以没有单引号 查看别名: alias //不加任何参数即可...
阅读(1782) 评论(0)

vector的用法及相关算法

#include #include #include #include using namespace std; bool Comp( int &a, int &b) { return a < b; } int main() { //vector 容器的初始化 vector v1; vector v2(10); vector v3( 12, 8.6); //fill用以...
阅读(1166) 评论(0)

tar gzip biz2 rar unrar的使用,解压tar.gz文件,运行.sh脚本

bzip2的简单使用方法和gzip一样:压缩不用参数,解压参数-d gzip的使用: gzip 压缩的时候不用参数,直接使用就好了 gzip file -v 可以使用-v参数来查看压缩率 gzip -v file 注意:用gzip压缩的文件,可以在windows下用winRar打开 -d 解压的时候使用-d参数就好。 gzip -d file gzip的参数: -c 压...
阅读(3023) 评论(0)

interfaceX is on channel Y, but the AP uses channel Z

aircrack-ng 破解wep无线路由器密码。 Sudo airmon-ng start wlan0 Sudo airodump-ng mon0 另一个终端 Sudo airodump-ng –c 6 –bssid AP’s mac –w wep mon0 另一个终端 Sudo aireplay-ng -1 0 –e ESSID –a AP’s mac –h My Mac mon0...
阅读(2830) 评论(0)

gcc常用参数

gcc 常用参数 命令格式  gcc [选项] 文件 选项 -E      只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 -S           编译到汇编语言不进行汇编和链接 -c           编译到目标代码 -o 文件    输出到 文件 -------------------------------------------------...
阅读(572) 评论(0)

gdb笔记

gdb filename 调用gdb run r开始执行 step s  单步执行 F11 next n  但不执行 F10 print p 显示数据,对变量进行赋值 display 一直显示指定变量或表达式的值 undisplay + 编号 quit q 退出 set 可以显示数据,修改变量的值 断点相关: break b + 函数名或行号 设置断点 tbrak 设...
阅读(427) 评论(0)

C++之namespace

好记性不如烂笔头!!!      一直认为当初学习c++还是挺认真的,但是namespace到底怎么用一直不明白。书上讲的也不清楚,现在看了the C++ Programming Language才算懂了。o(╯□╰)o     客观的讲,当初老师上课也上得不好,要是他当初能给我看如下代码,不就屁事没有了么,他都不需要讲,一切尽在不言中!! #include u...
阅读(600) 评论(0)

函数重载有感

好记性不如烂笔头!   函数重载注意点:下面程序段说明一些问题,虽然我们一般不会写这么迷惑人的代码,但是知道编译器到底是怎么干得,始终没有坏处。 ①unsigned 可以作为函数重载的标示。 ②unsigned char 和unsigned int 会自动转换为 int , 如果没有unsigned int 的重载,则调用时,传入的参数如果是unsigned int 则会出错----幸运的是...
阅读(692) 评论(0)

virtual解决菱形继承中多份拷贝问题

我一直都知道菱形继承的时候,虚继承就能解决一个基类多份拷贝的问题。但是,已经忘了virtual应该添在哪里了,俗话说得好啊,好记性不如烂笔头,还是记下来吧。纯属笔记,读者请略过。 #include using namespace std; class A { public: A(){ cout << "A()" << endl;} ~A(){ cout << "~A()" <<...
阅读(570) 评论(0)

统计单词出现次数--hash表,二叉树,标准库

我一直很喜欢用标准库,非常非常方便。但是有时候你根本不知道它为你做了什么,我喜欢知道自己写的程序每一步都干了什么!!! ////////////////////////////////// ///////////////////////////////// //标准模板库 ////////////////////////////////// /* #include #include #inc...
阅读(1241) 评论(0)

多线程练习----读者写者问题

#include #include #include #include #include using namespace std; DWORD WINAPI Reader(LPVOID lpParameter); DWORD WINAPI Writer(LPVOID lpParameter); //全局变量 CRITICAL_SECTION ReaderMutex, WriteMu...
阅读(858) 评论(0)

多线程练习----生产者消费者

#include #include using namespace std; const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度 unsigned short ProductID = 0; //产品号 unsigned short ConsumeID = 0; //将被消耗的产品号 unsigned s...
阅读(1210) 评论(1)

多线程练习----哲学家问题

哲学家进餐问题 在多线程中如何避免死锁。   问题描述:有五位哲学家围绕着餐桌坐,每一位哲学家要么思考 要么等待,要么吃饭。为了吃饭,哲学家必须拿起两支筷子(分 别放于左右两端)不幸的是,筷子的数量和哲学家相等,所以每 只筷子必须由两位哲学家共享   一、使用数组来跟踪一个哲学家的的状态:吃饭,思考或是试图拿起筷子,规定一个哲学家只有在两个邻居都不再...
阅读(4854) 评论(1)

多线程练习----吃水果问题

n问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。  解:四人之间的关系:1爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系;2爸爸放的苹果,女儿吃,所以两者是...
阅读(3232) 评论(0)

最小生成树笔记

两种常用的最小生成树算法: ①普里姆算法(Prim,时间复杂度O( n^2 ))----引入一个辅助数组,便巧妙实现之 ②克鲁斯卡尔算法( Kruskal ,时间复杂度O( e log e)  Prim算法是根据点找边,适合稠密图。Kruskal算法一直都是找最小边,适合稀疏图。 Prim算法的伪代码: void MiniSpanTree_PRIM( MGraph G, VertexTy...
阅读(803) 评论(0)

拓扑排序

严蔚敏教材伪代码如下: Status TopologicalSort( ALGraph G) { //有向图G采用邻接表存储结构。 //若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则ERROR FindInDegree( G, indegree); //对各顶点求入度 InitStack(S); for ( int i = 0; i < G.vexnum; i++) //建立...
阅读(615) 评论(0)

10.5例题:动态规划典型题--最长公共子序列

问题描述 我们称序列  Z = 是序列  X = 的子序列当且仅当存在严格上 升的序列,使得对  j = 1, 2, ... ,k, 有  xij = zj。比如  Z = 是  X = c, f, b, c >的子序列。 现在给出两个序列  X和  Y,你的任务是找到  X和  Y的最大公共子序列,也就是说要找 到一个最长的序列  Z,使...
阅读(1217) 评论(0)

10.1动态规划例题:数字三角形

10.1 什么是动态规划 前面学过了用递归的方法解决问题。但是,单纯的递归,在解决某些问题的时候,效率 会很低。例如下面这道题目: 例题:数字三角形  问题描述  7  3 8  8 1 0  2 7 4 4  4 5 2 6 5  上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路 径,把路径上面的数加起来可...
阅读(15748) 评论(1)

9.4递归例题:逆波兰表达式

一直觉得递归还是很好理解的,看得懂,会用,原来我一直用的不够熟练,还可以用得这么巧妙啊。。。 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式  2 + 3的逆波 兰表示法为  + 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号 改变运算次序,例如(2 + 3) * 4的逆波兰表示法为  * + 2 3 4。本题求解逆波兰表达式的值, 其中运...
阅读(3316) 评论(2)

迪杰斯特拉算法

迪杰斯特拉算法不懂?看严蔚敏的书还是看不懂?就看这篇文章吧,博主我一大优点就是表述能力比较强。也就是说,要么我自己不懂,我懂了以后一定能让别人弄懂。 1,迪杰斯特拉算法介绍(转载自:http://gelivable.blog.51cto.com/2250777/427009) 迪杰斯特拉算法是典型最短路径算法,用于计算图或网中某个特定顶点到其他所有顶点的最短路径。主要特点是...
阅读(4559) 评论(4)

MFC对话框画图

实现功能: 1、在对话框上的一块区域绘制彩色线条。 2、窗口被覆盖后恢复时,图像自动重绘。 3、改变按钮颜色。 操作: 根据向导建立一个对话框程序。在资源中添加一个静态文本框,其ID为IDC_STATIC。 在DialogXXXDlg.h 中加入如下内容       CBrush m_brush;//用于自定义颜色     CDC m_memDC;//屏...
阅读(12865) 评论(4)

MFC连接mysql数据库(十分钟搞定)

最近要做一个大作业,需要用到数据库,sql server装了两次都失败,遂弃暗投明,用mysql,虽然我从来没有接触过,数据库么,一通百通的,5分钟就熟悉了。问题的关键是要用MFC连接mysql数据库,将数据库里面的数据读出来,查了一个晚上的资料,愣是没有搞定。连接数据库太烦了吧……     如果你也跟我一样,没有专研精神,只是想快速的完成任务,这篇文章就是写给你的,不用找了,这已经是相对很简单...
阅读(27256) 评论(6)

matlab学习笔记

常用的矩阵函数: size(a)//求矩阵的大小 fliplr(a)//矩阵左右翻转 flipud(a)//矩阵上下翻转 rot90(a)//逆时针旋转90度 diag(a)//生成对角矩阵或取出对角元素 repmat(a,m,n)// eye(a)//生成a阶方阵 ones(a)//生成a阶全1矩阵 zeros(a)//生成a阶全0矩阵 inv(a)//求逆矩阵 cat(k...
阅读(936) 评论(0)

一道有趣的面试题——将int型数组强制转换为char*,再求strlen,涉及大小端

写出如下程序运行结果: #include #include int main() { int a[2000]; char *p = (char*)a; for( int i = 0; i < 2000; i++) a[i] = -1 - i; printf( "...
阅读(3981) 评论(4)

VS2008创建启动画面

我勒个去,网上大部分代码都是不靠谱的,都是扯淡,也不怕失控卫星砸到你!     先是在CSDN的某人的博客上看到CSplashWnd的源代码,你说你写就写吧,又不写完整,最后就说了一下为什么那么做不行,也不弄个解决方案出来,鄙视!本想先用VC++6.0创建一个CSplashWn...
阅读(1576) 评论(0)

xml复习笔记

xml 注意事项 1 有且仅有一个跟标记 应当以xml的声明作为第一行 2 空标记 " 3 标记名只能有字母数字下划线,点组成,且只能以字母和下划线开头 4 文本数据中不能有特殊字符,可以通过实体引用实现 5 解析其不对段的内容做处理 6 属性命名规则和标记一样,但必...
阅读(400) 评论(0)

startx失效

提示:screen not found 解决方案:sudo rm -f /etc/X11/xorg.conf...
阅读(500) 评论(0)

linux笔记之文件管理

linux 目录和路径 .    此层目录 ..    上一层目录 -    上一个工作目录 ~    当前用户家目录 ~account     account的家目录   pwd mkdir rmdir echo $PATH PATH="$PATH":/roo...
阅读(721) 评论(0)

深度优先遍历算法的非递归实现

深度优先遍历算法的非递归实现需要了解深度优先遍历的执行过程,设计一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:   假设图采用邻接矩阵作为存储结构,具体算法如下:      深度优先遍历算法的非递归实现需要了解深度优先遍历的执行过程,设计一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:   假设图采用邻接矩阵作为存储结构,具体算法如下: #i...
阅读(22943) 评论(5)

函数指针终极练习

设计 9个任务函数task0()-task8()只输出一句话:如task0()输出“task0 is called!”;设计一个调度函数schedule()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数 execute()的参数进行调度任务函数...
阅读(995) 评论(0)

C语言求10000的阶乘

#include #include #include #define M 10000 int p = 1; //用10000个数组存储数据,其中每个数为0~9999,p表示已经用了数组中的几个数。 void jiechen( int a[] , int n){...
阅读(2334) 评论(1)

天杀的内存对齐

#include using namespace std; struct information { float f; int i; char c; }; struct info { double b; char c; }; in...
阅读(641) 评论(0)

深入理解各种构造函数

#include #include using namespace std; class test{ public: test(char *p ){ cout << "this is construction of test"<< p << endl;...
阅读(620) 评论(0)

2009年山东大学计算机复试上机题目,输入一个数,求所有连续序列之和为这个数的序列

【1】输入一个整数,它可以由n(n>=2)个连续整数相加得到,输出所有可能的连续整数序列,每个序列占一行,数字之间用空格分开,数据从小到大,每列按最小元素递增顺序排列,如果找不到,输出none 例:21=1+2+3+4+5+6    21=6+7+8 则输出 1 2 3 4...
阅读(716) 评论(0)

CPP复习总结

CPP复习总结 1.       Cstring  strstr strlwr strupr 2.       调用复制构造函数的几种情况①一个新对象被另一个已经存在的同类型对象用以初始化②当一个对象作为实参传递给函数形参时要调用复制构造函数,函数返回时自动调用其析构函数③在...
阅读(578) 评论(0)

C++中私有变量的值想怎么改就怎么改

这应该算是C++的一个不足吧,C++是优秀的编程语言,但不是完美的。 #include class A { public : A():_personalA(100){ cout << " this is construction of A " << endl ;...
阅读(1518) 评论(0)

string对象与数值相互转换

#include #include #include using namespace std; //c++方法:将数值转换为string string convertToString(double x ) { ostringstream o ; if( o...
阅读(708) 评论(0)

找出数组中出现次数超过长度一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。 看到这道题...
阅读(662) 评论(0)

数组a[N],存放了1至N-1个数,其中某个数重复一次,找出重复的那个数

要求:时间复杂度为o(n)。 #include using namespace std; void do_dup(int a[] , int n) { int *b = new int[n]; for( int i = 0 ; i != n ; ++i...
阅读(1534) 评论(0)

sizeof( vector<> )

#include #include using namespace std; struct Node { int id; vector score; }; void DisplayV...
阅读(1412) 评论(0)

刚刚学会的函数回调,据说是高手的最爱,只知其然不知其所以然

#include using namespace std; void print(char *s,int n) { for(int k = 0 ; k <n ; k++){ cout << s << endl; } } voi...
阅读(605) 评论(0)

MFC笔记——消息响应

在Menu中为同一个消息添加四个消息响应函数,则响应次序为:视类,文档类,架构类,应用程序。  Menu命令消息路由的具体过程:当点击某菜单项是,最先接收到这个菜单命令消息的是架构类。架构类将把接收到的这个消息借给它的子窗口,即视类,由视类首先进行处理。视类首先根据命令消息映射...
阅读(556) 评论(0)

C++中变量的构造顺序

①设定静态数据成员初始化时,不受任何存取权限的束缚。 ②每个类中,不论有多少个虚函数,都只有一个vptr指向虚函数表。 ③类的定义也存在内存对齐问题,且sizeof不计入static变量。 #include using namespace std; class A { private: char ch1; char ch2; int a; static double dd; }...
阅读(531) 评论(0)

2.5例题 装箱问题

问题描述 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个 型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常使用一个 6*6*h 的长方 体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减...
阅读(1580) 评论(0)

2.3例题 校门外的树

问题描述 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们 可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置;数轴上的每 个整数点,即0,1,2,……,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它...
阅读(2263) 评论(1)

2.1例题 鸡兔同笼

问题描述 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼 子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物 输入数据 第1 行是测试数据的组数n,后面跟着n 行输入。每组测试数据占1 行,包括一个正整 数a (a 输出...
阅读(948) 评论(0)
    个人资料
    • 访问:698739次
    • 积分:7681
    • 等级:
    • 排名:千里之外
    • 原创:135篇
    • 转载:35篇
    • 译文:7篇
    • 评论:119条
    声明
    本博客乃学习笔记,没有纯粹无意义的转载。作者除了对自己负责,不对任何读者负责。欢迎指出文章错误,如果原意交朋友,可以通过Gmail联系我(mingxinglai#gmail.com),博客基本不再更新,欢迎访问我的独立博客http://mingxinglai.com
    文章分类
    最新评论