自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Neil的博客

我庆幸,我正在做我最喜欢的事

  • 博客(107)
  • 收藏
  • 关注

原创 猜你喜欢-----推荐系统原理介绍

写在正文之前 最近在做推荐系统,在项目组内做了一个分享。今天有些时间,就将逻辑梳理一遍,将ppt内容用文字沉淀下来,便于接下来对推荐系统的进一步研究。推荐系统确实是极度复杂,要走的路还很长。 A First Glance  为什么需要推荐系统——信息过载 随着互联网行业的井喷式发展,获取信息的方式越来越多,人们从主动获

2015-07-05 18:08:37 10553 1

原创 万剑归宗—架构设计中的抽象思维与具象思维

新项目上线,用户量不断增加,工作中继续不断发现问题,解决问题。花一点时间来总结一下自己对架构设计的理解。 小小的打个广告。这篇文章是发布在neil的微信公众号上。neil的文章都会第一时间发布在微信公众号上。欢迎小伙伴们关注。                      微信公众号:互联网与作曲家   武侠小说中的“万剑归宗”---

2015-06-14 19:34:48 2263

原创 写给程序员的心理学入门知识(一)

正文之前neil是14年毕业的一枚后台开发,在大学的时候除了钻研技术外,还喜欢看一些其他领域的书籍。作为工科学生,我们都很擅长逻辑思维。但作为社会人,工作和生活中不可避免地需要跟很多人打交道,学点简单的心理学大有裨益。其实在我看来,心理学等很多社会科学的知识在本质上都是逻辑,只是换了一种思维方式而已。所以,对于我们工科生来说,学一些入门的心理学常识是没任何难度的。

2015-04-21 10:55:51 3287 2

原创 用递归方法对二叉树进行层次遍历

在这里看到了这个题。层次遍历是用队列,一级一级地入队列然后输出。而用递归的话,我首先想到是用两个栈来模拟队列,在递归遍历二叉树的过程中入栈,然后最后一次性出栈。但仔细思考后发现无法做到层次遍历。在这里看到了正确的方法。     主要代码如下: 1 void PrintNodeAtLevel(BiTree T,int level) 2 { 3 // 空树或层级不合理

2013-04-04 08:57:30 4966

原创 C/C++内存管理 笔记

内存管理是个比较复杂的东西,我这里记录一些比较重要的笔记。     0.永远保持谦虚的态度来使用指针和操作内存。     1.在用free释放内存后,要记得将指针赋值为NULL,防止产生"野指针"。     2.尽量不要用指针指向常量字符串。看一个小例子:char *p="abcde";p[0]='m';std::cout     用gcc编译会出现

2013-03-30 08:51:49 1290

原创 二叉树的非递归遍历-----2013年3月20日

二叉树的递归遍历算法非常漂亮和易读,但是非递归算法就没那么容易懂了,尤其是后序遍历的非递归算法。一. 前序遍历       1 void PreOrderTraverse(Node *root) 2 { 3 stack ns; 4 Node *n=root; 5 while(n!=NULL || !ns.empty()) 6 {

2013-03-20 17:03:43 1258

原创 僵尸进程

僵尸进程就是父进程fork之后并没有wait子进程。在子进程退出的时候,内核释放该进程所有的资源,比如文件描述符,内存,等等,但是依然为该进程保留一定的信息,只有该进程的父进程wait之后才会释放掉这些保留的信息。如果父进程没有wait,那么子进程就变成了僵尸进程。在高并发的服务器中,僵尸进程会有很大的危害。如果僵尸进程过多,那么就会有大量的进程号被僵尸进程占用,但是系统所能使用的进程是有限的。如

2013-03-12 18:59:12 1311

原创 无限式查找-----2013年2月28日

问题描述:已知一个数组x[],元素个数有多少并不很清楚,但是数组元素已经依顺序从小到大排好,而且在数组最后添加了足够多的MAX记号;MAX表示最大的值,比数组中每一个元素都大,而且个数足够多。编写一个程序,在这个数组中找出某个给定的值。      思路:二分查找法是一个非常高效的算法,但要想使用二分查找法,必须满足2个条件:1.元素是有序的,可以从小到大排列,也可以从大到小排列。2.知道元

2013-02-28 11:01:29 960

原创 寻找固定的和----2013年2月26日

问题描述:有两个数组x[]与y[],各有m与n个元素,而且各个元素没有依顺序排列;d是一个已知的值。请写一个程序,看看在x[]与y[]中有没有满足x[i]+y[j]=d的元素。例如,若x[]为3,7,2,4,y[]为1,5,2,3,d为9;那么x[1]+y[2]与x[3]+y[1]都合乎条件,也即都是9。     思路:x[i]+y[j]=d。那么x[i]=d-y[j]了。将x[]数组按从

2013-02-26 10:25:51 938

原创 寻找脚码----2013年2月24日

题目来自:《C语言精选名题百则技巧篇》     问题描述:已知一个整数数组x[],其中的元素彼此都不相同,而且也已经从小到大排列好。请用比较大小,相等的方式编写一个程序,找出给定的数组中是否有一个元素满足x[i]==i(注意:在代码中是从0开始索引的,也就是x[0]是第一个数,所以对应于代码也就是x[i]==i+1)的关系。举例而言,如果x[]={-2,-1,3,7,8},x[3]=3,因

2013-02-24 13:22:07 1328

原创 找出没有相邻的1的二进制数的个数---2013年2月17日

问题描述:用G(n)表示在有n位的二进制数中没有相邻的两个1的二进制数个数。比如,当n=3时,000,001,010,011,100,101,110,111这8个数中只有000,001,010,100,101这5个是没有相邻为1的,故G(3)=5。请写一个程序,输出G(n)的值。      错误的思路(考虑的不周全):采用"分治"的方法,比如n=3,每次都将处理原问题规模的二分之一,直到n

2013-02-17 12:45:17 1716

原创 busybox源码剖析(3)---cat.c

cat显示一个文件的内容。需要注意的是,cat并不能处理目录。 1 extern int cat_main(int argc, char **argv) 2 { 3 int status = EXIT_SUCCESS; 4 5 if (argc == 1) { 6 print_file(stdin); 7 return st

2013-02-15 12:20:41 1575

原创 busybox源码剖析(2)---pwd.c

pwd命令是列出当前的路径。 1 extern int pwd_main(int argc, char **argv) 2 { 3 static char *buf; 4 5 buf = xgetcwd(buf); 6 7 if (buf != NULL) { 8 puts(buf); 9 r

2013-02-15 11:03:08 1291

原创 整数的所有不同分割数目--非递归算法

递归算法见:整数的所有不同分割数目--递归算法     思路:非递归与递归的思维顺序是互逆的,所以很容易写出以下代码。 1 #include 2 #define MAX 1000 3 4 int p[MAX][MAX]={0}; 5 6 int main() 7 { 8 int n=2; 9 int index_n,

2013-02-15 10:45:33 1270

原创 整数的所有不同分割数目----2013年2月15日

问题描述:把一个正整数写成若干个正整数的和。比如4=3+1,2+2,2+1+1,1+1+1+1,再加上自己,就一共有5种分割方式。     思路:求解4的所有分割方式,实际上就是求分割中以4为最大值而且和为4的所有分割方式,可以用p[4][4]来表示。抽象出来,就是p[n][m],表示分割中以m为最大值而且和为n的所有分割方式。那么,就有以下几种情况。     1.第一步当然是n=

2013-02-15 09:51:21 1185

原创 busybox源码剖析(1)---whoami.c

想找个简单的代码来看,学习代码的架构设计,就找到了busybox。先从最早的版本开始看。     whoami命令是获取当前终端的用户名。/etc/passwd文件存储了所有用户名的清单。要注意的是/etc存储的配置文件大多是系统级的配置文件。而whoami想要达到目的,就需要与/etc/passwd文件打交道。     首先来看whoami.c的主体程序: 1 ext

2013-02-14 21:42:59 1333

原创 集合的所有分割方式---2013年1月28日

问题描述:分割集合成多个子集合,这几个子集合间没有交集且他们的并集是原集合。       思路:将包含n个元素的集合set的分割表示为n个数字。比如set[]={1,2,3,4},那么{1,2},{3,4}就可以表示为1122,这4个数分别表示set[0]在第一个分割集合,set[1]在第一个分割集合,set[2]在第二个分割集合,set[3]在第二个分割集合。将这个过程称为编码。

2013-01-28 12:58:33 1655

原创 递归统计项目中的非空白代码行数

在准备阅读一个开源项目的代码前,可以大约看看整个项目共有多少代码,估计项目的规模。我就写了一个简单的程序来达到此目的,其中的一些代码参考了apue中的代码。      代码如下:View Code 1 //程序功能:统计一个文件夹(一个项目)中所有文件的有效代码行数(除去空白行)。 2 3 #include 4 #include 5 #inc

2013-01-26 17:59:50 1014

原创 列出所有K个元素的子集-----2013年1月26日

问题描述:列出一个集合的元素个数为k的所有子集。      思路:在字典顺序列出所有子集的基础上判断元素个数就可以了,比较简单。代码如下: 1 #include 2 #define MAX 1000 3 4 int main() 5 { 6 int n=5; 7 int set[MAX]={1}; 8 int index=0; 9

2013-01-26 09:16:30 1277

原创 产生所有排列---字典顺序-----2013年1月23日

问题描述:以字典顺序产生所有排列。假定集合set是连续的并且按从小到大顺序排列好了的,并且有n个元素。       思路:算法的思路分成两个部分:A是递归产生以某个数字开头的排列,B是调用A来依次生成  1为第一位的所有排列,2为第一位的所有排列,....n为第一位的所有排列。       下面是A部分的详细思路:        1.以1234为例子。从右到左来寻找 (j=

2013-01-23 20:01:36 1058

原创 产生所有排列---旋转法------2013年1月22日

我觉得这是一个很巧秒的算法。思路非常直接,从代码里可以很容易看出来,再单步调试查看set数组的值就可以很清楚地明白算法的过程。        代码如下: 1 #include 2 #define MAX 1000 3 4 int n=3; //the number of set element 5 int set[MAX]={1,2,3}; 6 7 //mo

2013-01-22 15:56:20 865

原创 《TCP/IP详解卷1》学习小结(三)------ARP协议与RARP协议

一.  总述       简单的说,ARP协议就是将IP地址转换为MAC物理地址;而RARP,就是ARP的逆向,也就是将MAC物理地址转换为IP地址。看起来这两个协议是完全对称的,但发明这两个协议的初衷基本上没有什么关系。ARP协议是为了在链接层中传输的datagram只能识别MAC地址,所以只能将IP地址转换为MAC物理地址再进行传输和定向;RARP协议是为了获取无磁盘操作系统的IP地址

2013-01-21 10:51:15 1822

原创 《TCP/IP详解卷1》学习小结(二)------Internet Protocol

一.  总述        IP(internet protocol)是TCP/IP协议簇的基础,在链接层中封装的IP datagram是网络间数据传输的一个基本单元,包括传输层的TCP,UDP等协议都是基于IP协议的。IP协议有个特点:IP协议是无连接的。我们知道,TCP是面向连接的,是可靠的传输协议;而UDP是无连接的,相应的也就不可靠,无法保证数据确实传输到了目的地。TCP面向连接,

2013-01-17 18:08:32 2066

原创 《TCP/IP详解卷1》学习小结(一)------链接层

开始学习《TCP/IP详解卷1》这本著作,每一章都要写一篇学习小结。       一.  总述        链接层位于整个网络协议suite的最低一层,与硬件关系密切,比如以太网,token ring都是位于这一层。二.  我总结的3个重点       1.对于IP datagrams,有多种不同的封装方式,一般是每个frame占48个bit。对于细节我不想赘述,因为我也

2013-01-17 14:58:58 2271

原创 列出所有子集-----字典顺序 2013年1月14日

问题描述:写一个程序,用字典顺序把一个集合的所有子集找出来。         此题的思路来自《C语言名题精选百则技巧篇》:字典顺序,也就是字符串比较时的顺序规则。可以采取这样的思路(以下是我根据书上的思路进行归纳再加上我自己的理解得来的步骤):         先定义n是集合的个数并且集合是已经从小到大排好顺序的{1,2,3....n}的集合。集合从{1}开始(此时下标index=

2013-01-14 20:32:40 1345

原创 2013寒假计划

明天晚上期末考试就结束了,已经不想看书了,先来计划一下寒假的学习计划。已经是大三了,估计这就是我的倒数第二个寒假了。       花了近1000块买了一些英文原版书,大概算算,在大学里我买书已经花了6000左右了吧。我属于买书的时候花钱不眨眼类型的,看书也基本上是只看经典。以下是我的寒假计划:       1.继续看apue。由于要准备期末考试,apue看了一半就停下了。回家后继续

2013-01-10 22:27:26 1594 2

原创 List All Of The Subset In Another Method

Problem description:Please list all of the subsets of a known set including the empty set.Thinking: the subset's sum of a super set is (n is the number of the super set element) while a n-bit bina

2013-01-04 16:29:57 1139

原创 列出所有子集(采用列出2进制数的方法)-------------2013年1月4日

问题描述:列出给定集合的所有子集合,包括空子集。          思路:一个集合的所有子集合的个数是个(n是集合中元素的个数),而一个位数为n的二进制也可以表示个数,所以,只要产生出了所有二进制数,就可以列出所有的子集了。在二进制的求解中,先来看这样一个例子。11111 01111+                   1--------------------111

2013-01-04 16:21:27 1339

原创 List All Of The Subsets

Problem description:Please list all of the subsets of a known set including the empty set.My idea: one thinking of the algorithm backtracking is to generate a tree of subset and the condition of a

2013-01-03 20:26:04 1215

原创 列出所有子集----------2013年1月3日

问题描述:列出一个集合的所有子集,包括空子集合。       我的思路:回溯法的一种思路就是生成一颗子集树,而一个集合中的元素,要么存在于子集中,要么不存在,所以这又特殊化成一颗二叉树了。每当到达二叉树的底端时,就打印一次。很容易写出如下的代码: 1 #include 2 #define MAX 1000 3 4 int n=3; //the number of t

2013-01-03 20:20:56 1050

原创 Linear Sieve Method for Prime Numbers

Problem description:When we calculate for prime numbers with a sieve method,we delete so many numbers which is not necessary repeatly.For instance,there is a number which consists of 3x7x17x23,and we

2013-01-03 15:55:12 899

原创 A Sieve Method for Prime Numbers

Problem description:Calculate the prime numbers with a sieve method.There is a magical sieve that can remove all the multiple of the number i.Please calculate the prime numbers at a range from 2 to N

2013-01-03 11:56:15 1135

原创 线性筛法--------2013年1月2日

问题描述:在做筛法求质数的问题时,在删除非质数的数据时,有很多是重复删除的。例如,如果有一个数是3x7x17x23,那么在删除3的倍数时会删除它,删除7,17与23的倍数时也都会删除它。请写一个程序,在删除非质数时"绝对"不做重复的工作。         思路:有一个因式分解定理:任何一个合数都可以分解成若干个质数相乘的形式。那么,num一定可以分解成p的i次方乘以q的形式(p,q是质数且

2013-01-02 21:00:55 1218

原创 筛法求质数------------2012年12月30日

问题描述:使用筛法求质数。有一个很神奇的筛子,可以给它一个数i,这个筛子有办法把i的所有倍数去掉。请用这个方法求出2到N之间的所有质数。要求,程序不能使用乘法和除法,只能用加或减,以求加快速度。        该问题的思路来自《C语言名题精选百则技巧篇》,很惭愧,我对这样的涉及一些数学知识的题很少有解决的办法,我需要在这一方面加强。        我把书中的思路归纳如下,并加上了我

2012-12-30 22:03:57 1124

原创 求质数-------2012年12月29日

昨天太忙,没有时间做一个题,先记着,明天来补。       问题描述很简单,就是求N之内的所有质数并且打印出来。       思路:求质数有很多方法,我这里用一种比较高效的方法。我一步一步地说明方法。      1.比如判断一个数num是否为质数,那么就用num去对"i(i从2开始)直到根号num"取模,如果都不能整除就说明num是质数。      2.但是这样会有

2012-12-29 21:34:06 1014

原创 等值首尾和-----------2012年12月27日

问题描述:假设有一个数组x[],它有n个元素,每一个都大于零;称x[0]+x[1]+.....+x[i]为前置和,而x[j]+x[j+1]+....+x[n-1]为后置和。编写程序,求出x[]中有多少组相同的前置和与后置和。         我的思路:因为这个数组都是正数,那么,对于i越大,前置和也就越大;后置和是j越小,那么后置和越大。接下来就很简单了,当以x[i]为终点的前置和大于以x

2012-12-27 16:39:22 1017

原创 两数组最短距离-------2012年12月26日

刚才那题太简单,不过瘾,再做一道题。       问题描述:已知两个元素从小到大排列的数组x[]与y[],请编写一个程序算出两个数组元素彼此之间差的绝对值中最小的一个数,此值称作数组的距离。       我的思路:关键点依然是"两个数组都从小到大排序"。那么,当x[i]==y[j]时,数组间距离为0,这肯定是最小的;当x[i]-y[j]>0时,如果i再增大,那么x[i]也会增大,那

2012-12-26 20:12:32 1516

原创 等值数目-------2012年12月26日

问题描述:已知两个整数数组f[]与g[],它们的元素都已经从小到大排列好,而且两个数组中的元素都各不相同。例如,f[]中有1,3,4,7,9,而g[]中有3,5,7,8,10。试编写程序算出这两个数组之间有多少组相同的元素。就这个例子而言,f[1]与g[0]是一组,f[3]与g[2]是一组。        我的思路:关键点还是"元素都已经从小到大排列好"。那么,两个数组,一起遍历就可以解决

2012-12-26 19:29:59 1275

原创 支配值数目-------2012年12月25日

刚才做的那道题比较简单,再做一道。          问题描述:已知f[]与g[]两个整数数组,元素都已经从小到大排列,请写一个程序,算出f[]比g[]中元素大的对数。换句话说,f[0]比g[]中多少个元素大,f[1]比g[]中多少个元素大,等等,这些值的总和就是要求的答案。举个例子,如果f[]中有1,3,5,7,9,而g[]中有2,3,4,7,8,那么答案就是12。

2012-12-25 15:25:37 1093

原创 最长平台问题(递归算法)------2012年12月25日

问题描述:已知一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。编写一个程序,接收一个数组,把这个数组中最长的平台找出来。在上面的例子中3.3.3就是该数组中最长的平台。          代码如下: 1 #include 2

2012-12-25 14:33:09 1520

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除