lionel chang

导航

2012年9月4日 #

如何判断一棵树是平衡二叉树

摘要: 首先,想一下平衡二叉树的概念。平衡二叉树(AVL树)是满足下面条件的二叉树:要么是一棵空树,要么左右子树都是AVL树,并且左右子树的深度之差的绝对值不大于1。由此可知,要判断一棵树是不是AVL树,只要判断它的左右子树的深度之差。问题落到了如何求一棵树的深度上去了。下面使用递归的方法求一棵树的深度:#include<stdio.h>#include<math.h>#include<malloc.h>typedef struct BTree{ int data; struct BTree *lchild,*rchild;}BTree,*Root;int isAV 阅读全文

posted @ 2012-09-04 22:36 woshizyl 阅读(473) 评论(0) 推荐(0) 编辑

c++中的容器

摘要: 容器指容纳特定类型对象的集合。容器分为顺序容器和关联容器。顺序容器中的元素按其位置存储和访问。关联容器中的元素按键排序。顺序容器有三种:vector,list和deque,标准库还提供了三种容器适配器stack,queue,priority_queue。其中三种容器vector 相当于c语言中的数组,可以快速随机访问list 相当于c语言中的链表,可以快速插入/删除deque double-ended queue 即双端队列三种适配器stack 栈queue 队列priority_queue 有优先级管理的队列一.顺序容器的定义《=================... 阅读全文

posted @ 2012-09-04 16:29 woshizyl 阅读(126) 评论(0) 推荐(0) 编辑

c++中的虚函数

摘要: 1.为什么c++没有虚构造函数?因为构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。2.为什么c++中赋值操作符不是虚函数?将类的复制操作符设为虚函数很可能会令人混淆,而且没有什么好处。在基类中将operator=定义为虚函数,并不会影响派生类中使用的赋值操作符。每个类都有自己的赋值操作符,派生类中的赋值操作符有一个与类本身类型相同的形参,该类型必须不同于继承层次中的任意其他类的赋值操作符的形参类型。3.虚函数的使用i.静态函数不能为虚函数,因为静态函数是被一个类的各个对象共有的,它不会因为继承而改变。ii.inline函数不能为虚函数,因为inline不能在 阅读全文

posted @ 2012-09-04 14:47 woshizyl 阅读(159) 评论(0) 推荐(0) 编辑

2012年9月3日 #

海量数据处理题集

摘要: 1、海量日志数据,提取出某日访问百度次数最多的那个IP。因为ip地址本省就是用简单的数字表示,可以直接利用hash算法建立一个ip与访问次数的键值对。ip地址最多有2^32约等于40亿,对ip地址用1000取余,得到有1000个4M左右个记录的文件,每个文件都可以直接读入到内存中。然后按照访问次数对每个文件排序,取出每个文件中的最大值,在1000个最大值中再找到最大的那个。2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越 阅读全文

posted @ 2012-09-03 10:41 woshizyl 阅读(328) 评论(0) 推荐(0) 编辑

海量数据处理

摘要: 每年各大IT公司招聘的笔试题里面都有海量数据处理的问题,而这些问题在一般的课本中都找不到讲解。在此参考网上牛人的blog,写一个总结。海量数据处理一般都是要解决非常大量的数据(一般以亿作为单位)的存储,查找等,数据不可能一次性存入到内存当中,往往采用分而治之的方法,将问题简化为我们熟知的状况。其中使用到方法有:1.存储问题 i.位图法 ii.hash映射 iii.Bloom filter iv.双层桶划分 v.数据库索引 vi.倒排索引 vii.分布式处理 mapreduce2.查找问题 归并排序/堆排序/快速排序/trie树+二分查找一.Bloom filter 阅读全文

posted @ 2012-09-03 10:14 woshizyl 阅读(151) 评论(0) 推荐(0) 编辑

2012年9月1日 #

atoi函数的实现

摘要: 参考:http://blog.163.com/zhe_wang_2009/blog/static/17228212120123294841684/ 阅读全文

posted @ 2012-09-01 15:42 woshizyl 阅读(115) 评论(0) 推荐(0) 编辑

虚拟文件系统VFS

摘要: 一.虚拟文件系统VFS的作用为了使Linux支持不同的文件系统,如ext2,ext3,NTFS,FAT等等,Linux引入了虚拟文件系统。它为用户提供了统一的接口,而不必关心具体的文件系统的细节,这些接口就是文件系统的系统调用,如read(),write(),等。VFS在系统中的位置如下图所示:当用户程序在用户态调用write这样的系统调用时,而此时程序将陷入到内核态去,并引起write对应的内核调用sys_write,sys_write又会去调用vfs_write()。这个函数才会去调用具体的文件系统的文件操作二.VFS中的对象所谓“虚拟”的文件系统是指该文件系统并不存在于磁盘中,只存在于内 阅读全文

posted @ 2012-09-01 13:42 woshizyl 阅读(266) 评论(0) 推荐(0) 编辑

2012年8月31日 #

/proc文件系统

摘要: 一.proc文件系统proc目录最初只是存放进程相关的信息,但是现在它还存放系统的状态信息和配置信息。例如cat/proc/interrupts//查看系统中断的相关信息cat/proc/devices//查看系统中的设备信息cat/proc/kallsyms|grepsuper_blocks//查看超级块的信息cat/proc/meminfo//查看内存的使用情况在/proc文件下使用ls得到可以得到很多以数字命名的目录,这些数字代表的就是相应进程的pid。进入一个目录,使用catmaps可以查看相应进程的地址空间。/proc文件系统是内核的一个映像,只存在于内存中,不占用磁盘空间。因此,它 阅读全文

posted @ 2012-08-31 19:53 woshizyl 阅读(92) 评论(0) 推荐(0) 编辑

locate

摘要: lcoate 阅读全文

posted @ 2012-08-31 16:56 woshizyl 阅读(74) 评论(0) 推荐(0) 编辑

关于sizeof的几个问题

摘要: 一.sizeof的特点(与strlen比较)1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数。例如int arr[sizeof(int)];//相当于int arr[4];2.sizeof能够返回变量或类型所占的字节空间大小,而strlen只能够返回字符串的大小,即字符串必须以'\0'结尾。char str[20]="0123456789"; int a=strlen(str); //a=10;得到的是字符串的长度 int b=sizeof(str); //而b=2 阅读全文

posted @ 2012-08-31 12:47 woshizyl 阅读(213) 评论(0) 推荐(0) 编辑