- 博客(41)
- 资源 (4)
- 收藏
- 关注
原创 算法导论之散列表
散列方法哈系表有 m 个槽,如何将关键字 key 散列到哈系表的槽中呢?除法散列方法散列结果由下列散列函数决定:hash(key) mod m其中 m 是 hash 表的大小,注意 m 的选择:(1) m 不应是 2 的幂。原因分析如下:
2011-10-08 21:35:45
1287
原创 约瑟夫问题的解法
约瑟夫问题是个有名的问题:N个人围成一圈(编号为 0 ~ n-1),从1个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。求胜利者的编号。例如N=6,M=5, 编号为: [0,1,2,3,4,5]被杀掉的人的序号为4,3,5,1,2。最后剩下0号。
2011-10-01 00:20:38
1041
原创 求两个有序数组的中位数
设数组A的长度为m, 数组B的长度为n, 两个数组都都是递增有序的。求这两个数组的中位数首先我们看看中位数的特点,一个大小为n的数组,如果n是奇数,则中位数只有一个,数组中恰好有 (n-1)/2 个元素比中位数小。如果n是偶数,则中位数有两个(下中位数和
2011-09-29 12:06:27
25999
原创 求二叉树中节点的最大距离
递归求解,最大距离总是在一下两种情况产生情况1: 最大路径经过root这个例子中,最长路径经过root, 其距离等于左子树的高度 + 1 + 右子树的高度 + 1在这种情况下:如果只有左子树,右子树为空 最大距离 = (左子树的高度
2011-09-26 15:54:45
1256
原创 B-树
B-树的存储方式定义一条数据记录为二元组[key,data], key为记录的键值,data为记录的数据,一般是磁盘数据所在的地址。B-树的一个节点大小刚好定位一页大小(4KB),每个节点可以存储多个[key,data]的二元组。B-树的定义1 每个节点
2011-09-24 01:41:43
1177
原创 一道面试题
一 问题描述给定一个含有n个元素的整形数组a,再给定一个和sum,求出数组中满足给定和的所有元素组合,举个例子,设有数组a[5] = {1,2,3,4,5},sum = 7,则满足和为7的所有组合是{5,2}{4,3}{4,2,1}二 解法
2011-09-24 00:45:37
2136
原创 最大堆的插入
void insert(int *heap, int n, int e) { int i; for (i = (n+1); i > 1 && heap[i/2] < e; i /= 2) { heap[i] = heap[i/2]; } heap[i] = e;
2011-09-23 20:52:20
967
原创 最大堆的调整
void adjust(int *heap, int n, int r) { int child, i, tmp; tmp = heap[r]; for (i = r; i*2 <= n; i = child) { child = i*2;
2011-09-23 19:53:39
1309
原创 最长递增子序列问题
一 问题描述设序列L = 是长度为n的序列,L的一个递增序列描述为:, 其中下标序列 是递增的, 子序列 也是递增的。此递增序列的长度为 k二 解法1, 转化为LCS问题先把序列 L 按照从小到大的顺序排列, 得到另一个序列S,再求L和S的最长公共子序列
2011-09-23 19:09:33
10452
原创 最长公共子串问题
类比Subquence问题的动态规划解法,Substring也可以用动态规划解决,令c[i][j]表示同时以X[i]和Y[j]结尾,且包含X[i]和Y[j]的公共子串的长度。求c[i][j]的可以转化为子问题c[i-1][j-1]比如X =
2011-09-23 17:42:35
755
原创 LCS最长公共子序列
1 什么是公共子序列给定序列X,长度为m,序列Y,长度为n,存在两个严格递增的下表序列i1,i2,...,ik 和 j1,j2,...,jk 使X[i1] = Y[j1], X[i2] = Y[j2], ... X[ik] = Y[jk]则序列 或者 Y[j1],
2011-09-23 01:16:37
937
原创 main.c
// Copyright (c) 2004-2009 Sergey Lyubka//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this softw
2011-08-07 00:10:57
1654
原创 getopt_long函数学习笔记
1.头文件#include #include #include #include 2.函数原型int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);longindex参数如果没有设置为NULL
2009-04-06 11:18:00
3568
原创 sscanf函数和正则表达式
此文所有的实验都是基于下面的程序:char str[10];for (int i = 0; i 执行完后str的值为str = "!!!!!!!!!!"我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的惊叹号,这样就可以方便的观察str发生了怎样的变化。下面我们做几个小实验,看看使用sscanf和正则表达式格式化输入后,s
2009-04-05 23:12:00
21806
2
转载 回车符与换行符的起源
转自: http://blog.youkuaiyun.com/skywalker_nick/archive/2007/11/08/1873682.aspx<!--function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSe
2009-04-02 09:15:00
1015
原创 apue2的ruptime和ruptimed程序例子
这个例子是一个c/s程序,有4个文件:ruptime.c clconn.c ruptimed.c initsrv1.c,其中ruptime.c和clconn.c构成client, ruptimed.c initsrv1.c构成server, client向server发送请求,server接到请求后运行uptime命令,并把结果返回给client。编译运行方式如下:1. 编辑/etc/serv
2009-03-31 08:51:00
1591
原创 文件权限与umask的作用
1. 文件权限有读,写,执行三种权限,分别用r,w,x代表,这三种权限的数值大小如下表所示:1 x2 w4 r2. 根据这三个数值可以得到混合权限数值表1 --x2 -w-3 -wx4 r--5 r-x6 rw-7 rwx3. Linux的文件有三种权限组成,执行ls -lh可以看到Lin
2009-03-23 22:24:00
2497
原创 约瑟夫问题求解(C++)
设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新开始报数,数到m2(刚出列者所持密码)的人又出列,如此重复进行,直到n个人都出列为止。问题是:对于任意给定的n个人的原始排列顺序,求出n个人的出列顺序。输入数据从文本文件中读取。该文件有两行:第1行只有一个
2009-02-26 21:58:00
3756
2
原创 C++沉思录
1,如果派生类和基类有相同名字的变量,派生类会覆盖基类的变量吗?class A { int i; }; class B : public class A { int i; };不会覆盖,只会隐藏,sizeof(A) = 4, sizeof(B) = 8可以证明这一点,隐藏的意思是说通过派生类的对象或指针无法访问基类的变量,实际上,编译器可能会对类的member加上class名称,形成
2009-02-23 20:52:00
1258
原创 深入理解C++的多态
一. 编译器对C++的多态是通过在Class里面插入一个vptr指针,同时生成一个virtual table, 让vptr指向这个virtual table来实现的,那么什么样的Class才有必要设置vptr指针呢?如下图所示:下面分6种情况讨论(1)有虚函数的基类class A {public: virtual void foo() {}protecte
2009-02-23 12:54:00
857
原创 C++虚函数调用的汇编过程
下面的程序改编自《Thinking in C++》的Instrument4.cpp#include using namespace std;enum note { middleC, Csharp, Cflat }; // Etc.class Instrument { public: virtual void play(note)
2009-02-19 19:51:00
1199
原创 AT&amp;T汇编语言笔记
1。在gcc产生的汇编中,$0x80498d4表示立即数,而0x80498d4表示内存地址0x80498d4对应的内容。对于lable,比如value,则$value表示value的地址,value表示value的值。设函数func的地址&func = 0x8048828这两种调用都是一样的1) call 0x80488282) movl $0x8048828 %edx call *%edx
2009-02-19 19:48:00
863
原创 排序算法
#include #define LENGTH 10#define MAXVALUE ~(~1<<30)using namespace std;int A[LENGTH] = {16, 4, 10, 14, 7, 9, 3, 2, 8, 1};/* ===========================插入排序=================================
2009-02-16 22:51:00
456
原创 KMP算法实现
/* * ===================================================================================== * * Filename: kmp.cpp * * Description: KMP算法实现 * * Version: 1.0 *
2009-02-13 16:16:00
1852
原创 关于c语言字符串
1. strlen(char *str) 返回str中除去结束字符/0的字符数 2. 系统对所有""号内的字符串,无论是全局的和局部的,都会在字符串区域开辟一块内存。例如: char *p = "hello"; 系统为hello开辟一块内存,并把p指向这块内存。3. 初始化动态分配的字符串不能使用=,应使用strcpy,例如把world追加到hello的末尾: // 正
2009-01-14 12:03:00
650
原创 Memorky Layout and Allocation
Lecture 5 Memorky Layout and Allocation使用静态内存分配方式的不一定都是静态变量, 也可能是全局变量但静态变量一定是静态内存分配int a;int b = 1;static int c; //静态全局变量:只在文件内使用static int d = 1;char *str = "str";static char *str1 = "str1"
2009-01-11 13:50:00
896
原创 编译器专业术语
1.intermediate representation,IR,中间代码表示2.literal table,常数表3.front end,前段4.back end,后端5.register transfer language,RTL,寄存器传递语言5.rtls expression,RTX,rtl表达式
2008-11-23 22:54:00
1086
原创 fgets函数的理解
fget函数的原型如下:char *fgets(char *buf, int n, FILE *fp)功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。2.每次调用,fgets都会把缓冲区的最后一个字符设为
2008-11-12 19:45:00
52249
2
原创 浮点数的二进制表示-实例
/* 注意,形如2[3]表示2的3次方 */实例一:38414.4 的IEEE浮点数表示法(double):double型的指数域有11位,所以偏置值为 2[11-1]-1 = 102338414.4 = 1001011000001110.0110011001100110011001100110011001101 = 1.0010110000011100110011001100110011
2008-10-30 18:41:00
4029
1
原创 C语言类型转换的原则
c语言类型转换的根本原则是必须保证数据不能丢失!在这个基础上,总结两个基本原则.1.若两种类型的比特数不同,转换成比特数高的类型如:-1 > (unsigned char)1会把(unsigned char)1转换成int型,变成1,表达式的值为false2.若两种类型的比特数相同,且一种有符号,一种无符号,则转换成无符号类型。如:-1 > (unsigned int)1会把int型的-1转换成(
2008-10-30 09:48:00
803
原创 卡内基SSD6 System-Level Programming Exercise 1总结
个人认为SSD6 Exercise 1是卡内基有史以来最经典的题目,本来想写一篇大家都看得懂的长篇大论,无奈时间不够,只好延续以往记流水帐的风格,把心得一条一条列出来。 心得1.从汇编的层次去理解c语言传值和传地址的区别.看实例int main (int argc, char *argv[]) { int start = 10; int stride =
2008-10-24 20:23:00
2093
1
转载 求职需向主考官提出的10个问题
1.贵公司对这项职务的工作内容和期望目标为和?有没有什么部分是我可以努力的地方? 2.贵公司是否有正式或非正式教育训练? 3.贵公司的升迁管道如何? 4.贵公司的多角化经营,而且在海内外都设有分公司,将来是否有外派、轮调的机会? 5.贵公司能超越同业的最大利基点为何? 6.在项目的执行分工上,是否有资深的人员能够带领新进者,并让新进者有发挥的机会? 7.贵公司强调的团队合作中,其它的
2008-09-19 22:56:00
714
原创 fork的执行
先看看一段fork的程序int main (void) { pid_t pid; 语句a; pid = fork(); 语句b;} 1.当程序运行到 pid = fork()时,这个进程马上分裂(fork的中文意思)成两个进程,我们称为父进程和子进程,子进程是父进程的副本,副本的意思是子进程把父进程的数据空间,堆和栈都复制一遍给自己用,这要求在内存给子进程分配和父进程同
2008-09-17 00:30:00
1253
原创 apue2读书笔记
1.判断文件类型的两种方法1):使用宏函数struct stat buf;lstat("/home",buf);if ( S_ISDIR(buf.st_mode) ) { printf("目录文件");}2):使用st_mode和S_IFMT的与运算结果struct stat buf;lstat("/home",&buf);if ( buf.st_mode & S_IFMT == S_IFD
2008-09-10 22:42:00
711
原创 如何为元素添加样式表
testvar h1 = document.getElementById("h"); 要为h1添加样式class="blue bold"有三种方法1. h1.setAttribute("class","blue bold");2. h1.setAttribute("className","blue bold");3. h1.className = "blue bold";第1种方
2008-07-17 14:09:00
521
原创 如何为元素添加样式表
testvar h1 = document.getElementById("h");如果要添加 class="blue bold",有三种方法1. h.setAttribute("class","blue bold");2. h.setAttribute("className","blue bold");3. h.className = "blue bold";第1种方法只支持f
2008-07-17 13:57:00
551
原创 关于DOM的nodeType
*元素-1 h1 id="h1">An HTML Document/h1> var element=document.getElementById("h1") element.nodeType = 1 element.nodeName = H1 element.nodeValue = null*文本-3 var element = document.getEle
2008-07-17 02:26:00
693
原创 AVL树的C++实现
包括3个文件:AvlNode.h AvlTree.h和main.cpp1.节点类的定义AvlNode.h#ifndef AVLNODE_H#define AVLNODE_H#include using namespace std;template class AvlTree; //声明AvlTree类template class AvlNode{public: frien
2008-06-08 19:47:00
4832
原创 stdlib.h头文件下的常用函数
atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号 数字.数字 E符号 数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h atoi()将字符串转换成整型数的函数 原形:int atoi(const char *s) 功能:把s所指向的字符串
2008-04-15 16:49:00
16878
1
原创 计算器c++实现
1.中缀表达式转后缀表达式 中缀:a/(b-c)+d*e后缀: abc-/de*+转换步骤:(1)从左到右扫描中缀表达式,遇到#转(6);(2)遇到操作数直接输出;(不进栈)(3)遇到“)”,则连续出栈输出,直到遇到“(”为止(“(”出栈但不输出);否则(4)若是其它操作符,则与栈顶的操作符比较优先级;若优先级小于栈顶的优先级,如a*b+c,说明*号所需的两个数a和b已经输出,则把
2008-04-15 13:18:00
1840
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人