自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

姚灯灯的专栏

博客已迁移至:https://www.cnblogs.com/YaoDD Github:https://github.com/YaoZengzeng

  • 博客(44)
  • 资源 (12)
  • 收藏
  • 关注

原创 Hyper 源码分析-----创建hyper daemon

一、概述hyper daemon是hyper的后台守护进程,我们必须要通过输入hyperd命令先打开hyper daemon,然后才能执行hyper run,hyper stop等一系列对于hyper虚拟机的操作命令。与hyper client不同的是,hyper daemon承担了整个hyper程序的大部分任务且主要由三部分组成:server,engine和job。其中server用于接

2015-08-26 21:45:40 1176

原创 Hyper 源码分析------Hyper client创建与执行

一、Hyper总体架构Hyper是典型的C/S架构.首先需要启动守护进程hyperd,用于接收来自client的请求,从而进行真正的hyper虚拟机创建工作以及对其的一系列操作.而作为client端的hyper命令则更像是一个命令解析器.它的作用仅仅只是对用户的hyper指令进行解析和封装,然后将其通过HTTP请求的形式传递给hyperd进程.下面就通过一条具体的hyper虚拟机启动命令:hy

2015-08-26 16:23:28 1287

原创 模拟文件系统

先来将一下总的设计,然后再结合具体的函数进行详细的分析。       首先,创建一个大约100M的文件作为模拟的硬盘。硬盘的空间总共分为三个部分:超级块区,inode区和磁盘块区。其中超级块区就是一个struct结构,其中保存了inode区和磁盘块区的使用情况。inode区则由1024个inode块组成。一个inode块对应一个目录文件或者普通文件,其中保存了对应文件的文件类型,文件大小,占用

2015-04-13 20:13:03 10203 6

原创 LA 3942 Remember the Word

已知一些单词,选择其中一些单词组成目的字符串,问共有多少种方法。其实初看到这道题,自然而然地可以想到动态规划中经典的硬币问题:例如,问1元,2元,5元,总共有多少种方法能组成20元?这里不过是把硬币换成了单词而已。但是,如果真的只是像硬币问题一样每个单词都轮询一遍,显然太慢了,最多要有300000*4000*100次比对。       假如利用trie数的话,至多只要比对100次,就能找到所有

2015-04-10 21:13:34 778

原创 UVa Placing Lampposts 树型DP

大致思路和大白书上的相同,不过感觉书上的决策部分讲解的并不是非常清楚,因此我在这里讲解一下我的决策思路。        首先,d(i,j)表示根节点为i的子树,当它的父节点为j(j=0或1)时的x的最小值(x的含义书上有讲解),要将该子树根节点和父节点相连的边的情况计算在内。接下来遍历森林中的每一棵树,对于每一棵树的根节点进行特别的处理,然后就对该树进行深度优先搜索dfs(i)。     

2015-04-07 21:31:34 730

原创 UVa 11825 Hackers’ Crackdown

参照大白书上面的解法,总共三个步骤,前两个步骤都较好理解。P[i]是用位表示的当选中i时,总共有0~n-1总共有多少个数字被覆盖。cover[S]则表示,当子集为S时,0~n-1中能够被覆盖的位数。若cover[S]的每位都为1,则说明子集S能对全集进行覆盖,当然可能子集S的子集就能做到这一点了。关键的步骤是对状态转移方程的理解。书中的状态转移方程是f(S)=max{f(S0)|S0是S的子集

2015-04-06 19:57:21 762

原创 UVa 11029 Leading and Trailing

题目要求输出N的K次方的前三位和后三位。后三位的解法不用多说了,用二分法快速去模即可。关键是前三位怎么求?题目中说N能用32位带符号整数表示,K最大是10的六次方。因此N^K的解ans最多不过10^(9*10^6),因此我们完全可以用以十为底的对数x+y表示,其中x表示对数的整数部分,y表示对数的小数部分。显然,ans的具体数字是由10^y来表示的,而x只是用来将小数以为成整数而已。并且可以确定的

2015-02-25 12:48:59 1033

原创 UVa 10253 Series-Parallel Networks

《训练指南》中的第二种算法,其实本质上就是个背包。d[i][j]表示,在子树的节点数最大为i的情况下,j个节点的解。当之前的i-1,i-2,....0的结果都已知的时候,d[i][j]自然可根据下式求解:d[i][j]=sum{C(f(i)+p-1,p)*d[i-1][j-p*i] | p*i其中f(i)表示恰好有i个节点的子树的数量。而C(f(i)+p-1,p)则表示有p棵i节点子树形成

2015-02-23 15:57:37 747

原创 UVa 11361 Investigating Div-Sum Property

这道题居然提交了十次才过....期间小问题不断。思路的话基本是《训练指南》里面来的,不过有几个小问题需要注意一下。第一,当K在大于100的情况下,就直接输出0就可以了。因为a,b不超过2^31,可以估算出a,b最多十位十进制数,那么每位最大为9,所以各个数字之和是不可能超过100的,那么个数字之和为模K为0的条件是永远不可能到达的。      还有一点是,当剩余数字d=0时,当且仅当m1和m2

2015-02-22 16:46:13 1100

原创 UVa 1362(LA 3516) Exploring Pyramids

依旧是《训练指南》上的一道例题。思路大致相同,即设有一个序列S(i),S(i+1),S(i+2)...S(j),d[i,j]为所求的解。当S(i)==S(k),id[i,j]+=d[i+1,k-1]*d[k,j]直到k>j。最后的d[i,j]就是序列S(i)..S(j)的解。那么题目最终的解即为d[0,n-1],n为序列的长度。不过,在具体的解法上,我和书上的做法不一样。书上使用的是递归,而我

2015-02-21 16:53:17 1451

原创 UVa 11174 Stand in a Line

依旧是《训练指南》上的一道例题。书上讲的比较抽象,下面就把解法具体一下。因为涉及到父子关系,因此自然而然可以将n个节点构造成一棵树,最后将形成一个森林。接下来将使用递归的手法。设f(i)是以节点i为树根的子树,节点i有儿子c1,c2,c3....cj共j棵子树。s[i]为树根为i的子树包含的节点数。如果分别先给各个子树内部排序,那么毫无疑问,共有f(c1)*f(c2)*f(c3)....*f(

2015-02-19 17:32:57 1251

原创 UVa 11375 Matches

大年夜的写代码果然状态非常之差...感觉特别困,连个高精度都折腾了我好久。还是刘汝佳《训练指南》里的一道例题,解题思路其实也差不多,但是想对书里面的内容再讲讲。其中d[i]是代表i个火柴棒恰好能构成的正整数数目(不包含整数0),然后有点类似于动态规划的做法,通过已知的d[]求出剩下的d[]。       不过仔细想来貌似有点问题。例如已知d[j],那么d[j+num[0]]+=d[j].那么新

2015-02-18 22:14:20 908

原创 UVA 11806 Cheerleaders

刘汝佳《训练指南》里的一道例题。典型的容斥原理的应用。设C(M*N,K)为在M行,N列里放K个数的方案数。因为要求第一列,最后一列,第一行,最后一行都有放置,显然答案为:C(M*N,K)-(2*C(M*(N-1),K)+2*C((M-1)*N,K))+(4*C((M-1)*(N-1),K)+C(N*(M-2),K)+C((N-2)*M,K))-(2*C((N-2)*(M-1),K)+2*C((

2015-02-17 16:16:35 1012

原创 POJ 2184 Cow Exhibition

这道题整整思考了两天,最终还是AC啦!初看觉得这道题有三个维度,分别是智商和要大于0,幽默感的和要大于0,同时,智商和幽默感的和又要最大。而事实上,只要求出每个可能的智商值对应的最大的幽默感值即可。由于智商和幽默感都存在负数,所以智商和的值要整体向右平移100*1000个单位。而S[i]则表示,智商在i(实际上和为i-100*1000)对应的最大幽默感和,且初始时S[i]的值都为负无穷。接下来就可

2015-02-12 13:45:18 668

原创 UVa 10003 Cutting Sticks

类似于最有二叉排序树的解法。假设有N个切割点,则整条木棍有N+2个端点(包括起点0,终点N+1)。设d(i,j)为子问题序号i~j的木棍的最优解,则可得状态转移方程:d(i,j)={length(i,j)+max(d(i,k),d(k,j)),i在具体求解的过程中,应当把所有子问题的解都求出来,首先计算i,j之间没有端点的情况,继而推广到间隔1个端点,2个端点,...N个端点。则最后当间隔为N

2015-02-10 11:50:09 706

原创 UVa CD 0-1背包且打印路径

就是简单的0-1背包问题,不过没有具体的效益值,隐含的效益值就是剩余背包的容量。因为要输出具体选择了那些track(也就是物品),所以采用序偶的方法。其实0-1背包的解画在坐标轴上就是一个分段函数,所谓序偶就是那些跃迁的节点。但是这道题略有不同,第0阶段的初始序偶不是(0,0),而是(0,N)。序偶的第一个参数表示容量,第二个参数表示背包的剩余容量。当由前一阶段的序偶得到新序偶,并且将两者合并的时

2015-02-08 21:26:00 814

原创 POJ 3181 Dollar Dayz

其实这道题就是简单的完全背包问题。从低到高推断出每种硬币的所有面额的解即可。当然,离线的话会慢一点。可以将问题需要求出的子问题全部求出来。下一个问题出现的时候,如果之前已经求解过则不必求解,否则在之前的基础上继续求解。原本觉得没什么好写的,关键是同样的方法用STL中的vector代替数组会超时!搞得以后都不敢用STL了.....#include #include #include #in

2015-02-07 20:17:05 710

原创 UVa 10131 Is Bigger Smarter?

开始觉得这道题果断是用LCS解的,因为只要把大象的编号分别按照体重从小到大排序获得序列一,然后再将原始编号按照智商从大到小排序获得序列二。然后两个序列求最长子序列即可。但是后来发现这样做有问题,题目中要求所得子序列的体重或是智商都是严格单调的。解决方法其实也简单,只要在编号匹配的情况下,智商和体重都和前一个已经匹配的大象不一样就可以了。不过.....这种方法始终wrong answer。我想可能是

2015-02-07 10:39:32 860

转载 DP_背包专辑

这短时间看了论文《背包九讲》,看到背包问题解法中的优美之处也看到背包问题在现实中的应用,总结出一句话:背包问题值得一看。    背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题需要枚举每种状态,但是可以通过动态规划减少枚举的次数

2015-02-06 21:35:17 651

原创 UVa 116 Unidirectional TSP

这道题是非常基础的动态规划,类似于分阶段决策。题意是:一个M*N的数组,要求从第1列走到第N列且下一步的位置都只能是当前位置的相邻右侧,相邻右上,相邻右下三个位置。要求路径上的格子内的数字和最小。若有和相同的路径,则输出字典序最小的那一条路径。解法其实就是设置一个记忆数组,分阶段决策即可。        但是决策有从左往右和从右往左两种方式。开始我使用的从左往右的方式,这稍微麻烦一点,因为这需

2015-02-06 14:44:13 808

原创 UVA 103--- Stacking Boxes

这道题在小白书中的分类是动态规划,把题AC了之后在网上看解题报告后,多数解法也是DAG上的动态规划。但其实一个简单的深度优先就能解决问题了。首先将每数从大到小排序,再将各组按照排序后的第一个数字的大小进行从大到小排序。需要注意的是,记录各组数据的编号也要和数进行同步的排序。#include #include #include #include #include using names

2015-02-05 10:11:05 702

翻译 谷歌C++编程规范(一)----头文件

今天晚上在网上发现了谷歌的C++编程规范这个东西,大家貌似都非常推崇的样子。然后又在网上搜了一下,好像并没有中文版的。所以,我就打算把它们全都翻译一遍啦,既能提高自己的英语水平,还有助于养成良好的编程风格,何乐而不为呢?哈哈~        整个编程规范包括九个部分,所以就分成九篇文章来写啦。本篇文章主要是背景介绍以及C++头文件的编程规范,下面直接进入正题。背景:       C++

2015-02-04 14:04:12 942

原创 大三上------期末总结

今天终于把万恶的期末考试给考完了!想想考的都是专业课,原本以为肯定会复习地很开心。因为不用像以前一样只是考试前一周什么都不会,然后考前疯狂地看书刷题,考完之后瞬间遗忘。不过事实证明...为了考试看书还是非常痛苦...即使是喜欢的算法,C++,操作系统....不过幸好已经考完啦!接下来为期四周的寒假又不用为考试而学习了!大三上这一个学期接触的主要的东西依旧还是底层的系统和算法吧。在开学的第一个月

2015-01-30 21:31:02 1103 2

原创 C++构造函数的几个难点(基于C++ 11)

快要有一个月没有更新博客了,是时候再动一动笔啦!因为最近在学习C++,在学习过程中看了好多书,也在实际训练中遇到了一些问题。所以在接下来的时间里,应该会对C++里自己遇到的一些难点写几篇专题,就当是为自己梳理巩固知识啦!我们都知道所谓构造函数就是类用来初始化各个数据成员的(非静态),如果成员都没初始化好,那么在对类的后续操作中肯定会遇到各种莫名其妙的错误。所以,我们有必要对构造函数做一个全面的

2015-01-12 16:59:57 1744

原创 并查集间单个节点的转移(UVa 11987 Almost Union-Find)

从来没有这么艰难地完成一道算法题过!经过8次失败之后总算提交成功了!所以决定写一篇博文,对并查集的相关内容做一些总结。普通并查集的操作无非是两种,find_set(x)即找到节点x所在的集合的代表节点,或者是union_set(x,y),即将x和y所在的两个集合合并起来。如下图所示,有左右两个并集通常,我们会选用并查集中父节点为自己的元素作为这个并查集的代表,例如图中的节点a和节点e。那么

2014-12-24 21:17:24 809

原创 一个简单的动态规划问题

题目来源于POJ,是一道非常基础的动态规划题目。但是却耗费了我非常多的时间,时间复杂度也从N的三次方,降到N的平方,最后优化到0(n)才最终得以通过。题目如下:要求其实非常简单,已知给你a1,a2....an,总共n个数,要求你从中抽取出两个连续的子序列,当然,如题意所示,两个序列连续在一起也是OK的,然后将其中最大的序列和输出即可。看到题目,第一想法非常简单,从n个数中选择一个数

2014-12-17 15:16:54 1092

原创 C++ 中的 const 类型变量

之前总感觉C/C++中有const 限定的变量是个非常头痛的问题,一会儿可以变,一会儿不可以变,一会儿把const赋给nonconst,一会儿又把nonconst赋给const,头都被它搞大了。今天刚好把《C++ primer》中的相关部分又读了一遍,所以就把相关的内容写出来总结一下啦!         首先,我们可以想想为什么要设计const变量这种东西,不过就是想有个常量嘛!所以对cons

2014-10-23 20:38:07 1050

原创 Linux是怎样启动的

今天早上在上操作系统课的时候,老师有提到计算机从按下开关键到最后由操作系统完全接管的整个过程。不过讲课毕竟是十分抽象的,因为之前自己也看过这方面的内容,但是老是记不住,所以今天晚上就花了点时间,把《鸟哥的Linux私房菜》的相关部分又看了一遍。下面就把核心流程给过一遍吧!        我们都知道,操作系统对计算机的管理起到了决定性的作用。可是,操作系统在关机状态下存在磁盘中的,而运行又是在内

2014-10-21 20:32:23 861

原创 从一段代码看fork()函数及其引发的竞争

首先来看一段从《UNIX环境高级编程》中摘录的一段非常有意思的代码。借此我们再来谈谈fork()函数的一些问题。#include "apue.h"static void charatatime(char*);intmain(void){ pid_t pid; if((pid=fork())<0){ err_sys("fork error"); }else

2014-10-12 20:51:01 1183

原创 Linux 文件系统初步

在Linux系统中,如果我们想要知道一个文件的具体信息,那么最简便的方法自然就是ls命令了。如下图所示:当在shell输入命令"ls -l old"时,在下方就会显示出关于文件old的一些信息.下面就从左到右逐步分析每部分输出所代表的具体含义。其中输出的第一部分包含十个字符,其中第一个字符用于表示文件的类型。那么我们就先来说说在UNIX/Linux系统中的文件类型好了。文件

2014-10-07 20:03:35 1044

原创 模拟shell ( 进程函数:fork(),execvp(),wait() )

shell是一个管理进程和运行进程的程序,下面我们就通过模拟一个shell程序这个实例来更好地认识认识在Linux/Unix系统中,进程的创建和结束,以及父子进程之间的一些关系。接下来先贴上源代码的中命令的读取部分: numargs=0; while(numargs<MAXARGS){ printf("Arg[%d]?",numargs); if(fgets(argbuf,A

2014-09-11 21:28:18 8723

原创 写给自己----大学过半之后(三)

其实早就想写这篇文章了,不过暑假的时候一直懒得动笔。现在都已经做了一个星期的大三狗了,想想也是时候把这第三篇文章给写了。     首先来说说这个刚刚过去的暑假吧。本来这个暑假应该是取校ACM队参加集训的,但是最终还是选择去实验室实习了一个月。其实ACM一直是我非常喜欢的,博文的绝大部分也都是UVA的题解。不过为什么最终还是没有去ACM队集训呢,我想可能我有点害怕了。因为ACM队暑期训练的强度还

2014-09-07 15:42:47 1320 5

原创 Linux------进程的创建和终结

进程的创建:Linux通过两个步骤创建新的进程:fork()和exec().其中fork可以创建当前进程(父进程)的一个副本,即子进程。父进程和子进程只有PID不同。在这之后,系统中有两个进程,执行同样的操作。父进程的内容将被复制,但是在Linux中运用了一种写时复写(copy on write)技术,使进程的创建更为高效。接下来exec将读取可执行文件载入地址空间中运行。这样一个进程就创建好

2014-08-04 21:18:32 1192

原创 Linux内核------进程的基本知识

进程:传统上,Linux操作系统下运行的应用程序,服务器和其他程序都称为进程。当然进程不仅仅表示一段处于执行期的可执行代码,还包括其他资源,例如打开的文件,挂起的信号和内核内部数据等。其实还有个概念叫,线程或者说轻量级进程,不过在Linux中线程和进程其实是类似的。可以把线程看做和其他进程共享某些数据和资源的进程。进程的表示:通常进程是由一个叫task_struct的结构表示的,或者叫

2014-08-01 20:34:12 780

原创 写给自己----大学过半之后(二)

新奇的大一过去之后,我也就进入了不能再犯二的大二了

2014-07-29 14:03:07 807

原创 写给自己----大学过半之后(一)

在昨天晚上睡觉的时候,突然想到自己大学都读了一半了,是不是应该写篇文章总结一下?虽然平时自己都一直有思考,但我想写在纸上的东西毕竟和脑海中的思绪是不一样的,以后也可以让自己看看这一路上是怎么走过来的。哈哈,不过在受到高中三年的应试作文的折磨以及大学两年基本不写文章的情况下,现在对自己的表达能力真的是一点自信都没有啦不过正是因为这样才要多写博客,毕竟曾经看到过这样一句话:有思想而不会表达,等于没有思

2014-07-29 10:15:45 1105

翻译 乔布斯斯坦福毕业演讲

纽约:我非常荣幸能够

2014-05-01 20:19:03 1008

原创 树的先序,中序,后序遍历(非递归算法)

树的各序遍历的非递归算法

2014-04-21 16:43:08 3866

原创 Fibonacci引申的一个问题

先来看看题目吧~

2014-04-16 13:36:47 730

原创 Fibonacci求解

想想刚刚学C语言的时候,一开始接触递归的时候,感觉这东西实在是太不可

2014-04-13 17:06:39 980

深入理解Linux内核英文版

为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样CPU不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。 《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有的重要性质。相关的代码片段被逐行剖析。然而,本书涵盖的不仅仅是代码的功能,它解释了Linux以自己的方式工作的理论基础。

2017-10-03

Linux内核设计与实现 英文

《Linux内核设计与实现(原书第3版)》详细描述了Linux内核的设计与实现。内核代码的编写者、开发者以及程序开发人员都可以通过阅读本书受益,他们可以更好理解操作系统原理,并将其应用在自己的编码中以提高效率和生产率。 《Linux内核设计与实现(原书第3版)》详细描述了Linux内核的主要子系统和特点,包括Linux内核的设计、实现和接口。从理论到实践涵盖了Linux内核的方方面面,可以满足读者的各种兴趣和需求。 作者Robert Love是一位Linux内核核心开发人员,他分享了在开发Linux 2.6内核过程中颇具价值的知识和经验。本书的主题包括进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步、移植性相关的问题以及调试技术。同时本书也涵盖了Linux 2.6内核中颇具特色的内容,包括CFS调度程序

2017-10-03

Linux内核源码剖析上册

《Linux内核源码剖析:TCP/IP实现(套装上下册)》详细论述了Linux内核2.6.20版本中TCP/IP的实现。书中给出了大量的源代码,通过对源代码的详细注释,帮助读者掌握TCP/IP的实现。《Linux内核源码剖析:TCP/IP实现(套装上下册)》根据协议栈层次,从驱动层逐步论述到传输层,包括驱动的实现、接口层的输入输出、IP层的输入输出以及IP选项的处理、邻居子系统、路由、套接口及传输层等内容,全书基本涵盖了网络体系架构全部的知识点。特别是TCP,包括TCP连接的建立和终止、输入与输出,以.及拥塞控制的实现。

2017-10-03

网络是怎样连接的pdf下载高清完整版

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣

2017-10-02

计算机网络:自顶向下方法 第六版 英文

个人感觉最好的计算机网络教材

2017-10-02

No Scratch TCP IP Guide

优质的计算机网络基础入门书籍

2017-10-02

空空如也

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

TA关注的人

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