06 2012 档案

算法导论-9.3-7
摘要:题目:给出一个O(n)时间的算法,在给定一个有n个不同数字的集合S以及一个正整数k<=n后,它能确定出S中最接近其中位数的k个数思考:step1:求出数组的中位数的值O(n)step2:计算数组每个数与中位数差的绝对值,存于另一个数组B中O(n)step3:求出数组B中第k小的数ret O(n)step4:计算数组S中与ret差的绝对值小于ret的数并输出O(n)其中,step4也可以通过划分的方法找出数组S中与ret差的绝对值小于ret的数代码: 1 #include <iostream> 2 using namespace std; 3 4 int length_A; 5 阅读全文

posted @ 2012-06-25 15:06 windmissing 阅读(386) 评论(0) 推荐(0) 编辑

算法导论-9.3-6算法导论-9.3-6 .
摘要:题目:对一个含有n个元素的集合来说,所谓k分位数(the kth quantile),就是能把已排序的集合分成k个大小相等的集合的k-1个顺序统计量。给出一个能列出某一集合的k分位数的O(nlgk)时间的算法思考:令每个子集合的元素个数为t = n / k,A[j]是数组A中下标为j的元素,A(j)是数组是第j大的元素则所求的k分位数是指A(t),A(2t),A(3t),……,A((k-1)t)按顺序依次求这k-1个数的运行时(k-1)*n要使运行时间为O(nlgk),改进方法是不要依次寻找这k-1个数,而是借用二分的方法来找。先找第k/2个分位数,再以这个分位数为主元把数组分为两段,分别对这 阅读全文

posted @ 2012-06-25 14:00 windmissing 阅读(1079) 评论(0) 推荐(0) 编辑

算法导论-9.3-3
摘要:题目:假定元素的值不同,说明如何才能使快速排序在最坏情况下以O(nlgn)时间运行思考:要改善最坏情况的下运行时间,就要从划分入手,保证即使是最坏情况,也要尽量均衡地划分。因此,使用SELECT找到中值,再以这个中值为主元进行划分代码:1.以RANDOMIZED-SELECT作为选择中值的算法 1 //9.3-3-使用RANDOMIZED-SELECT作为选择中值算法 2 #include <iostream> 3 using namespace std; 4 5 //已经出现很多次了,不解释 6 int Partition(int *A, int p, int r) 7 { 8 阅读全文

posted @ 2012-06-24 20:07 windmissing 阅读(460) 评论(0) 推荐(0) 编辑

算法导论-8-3-排序不同长度的数据项
摘要:题目:a)给定一个整数数组,其中不同的整数中包含的数字个数可能不同,但是该数组中,所有整数中总的数字数为n。说明如何在O(n)时间内对该数组进行排序b)给定一个字符串数组,其中不同的串包含的字符个数可能不同,但所有串中总的字符个数为n。说明如何在O(n)时间内对该数组进行排序(注意此处的顺序是指标准的字母顺序,例如,a < ab < b)思路:a)先用桶排序方法按数字位数排序O(n),再用基数排序的方法分别对每个桶中的元素排序O(n)b)递归使用计数排序,先依据第一个字母进行排序,首字相同的放在同一组,再对每一组分别使用计数排序的方法比较第二个字母见到有人用字典树,也是可以的代码: 阅读全文

posted @ 2012-06-23 15:14 windmissing 阅读(274) 评论(0) 推荐(0) 编辑

算法导论8.3-4
摘要:题目:如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序思路:把整数转换为n进制再排序代码:#include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A, int start, int end){ int i; for(i = start; i <= end; i++) { if(i == start)cout<<'{'; else cout<<' ' 阅读全文

posted @ 2012-06-23 11:27 windmissing 阅读(246) 评论(0) 推荐(0) 编辑

算法导论7-6对区间的模糊排序
摘要:题目:考虑这样一种排序问题,即无法准确的知道等排序的各个数字到底是多大.对于其中的每个数字,我们只知道它落在实轴上的某个区间内.亦即,给定的 n 个形如[ai, bi]的闭区间,其中ai,≤bi.算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排序<i1, i2, i3, i4,…in>,使得存在一个 cj∈[ai, bi],满足c1≤c2≤…≤cn.a)为n个区间的模糊排序设计一个算法,你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时间.(随着各区间重叠得越来越多,对各区间的排序的问题会变得越 阅读全文

posted @ 2012-06-21 09:19 windmissing 阅读(272) 评论(0) 推荐(0) 编辑

第8章 线性时间排序
摘要:一、概念任何比较排序在最坏情况下都要用O(lgn)次比较不进行排序计算排序、基数排序、桶排序都是稳定排序二、代码#include <iostream>#include <cmath>using namespace std;int length_A, digit;void Print(int *A, int start, int end){ int i; for(i = start; i <= end; i++) { if(i == start)cout<<'{'; else cout<<' '; cout&l 阅读全文

posted @ 2012-06-20 10:24 windmissing 阅读(166) 评论(0) 推荐(0) 编辑

第7章 快速排序
摘要:一、概念快速排序是基于分治模式的快排的运行时间与划分是否对称有关、最坏情况下,时间复杂度是O(n^2),最好情况下,时间是O(nlgn)二、程序#include <iostream> using namespace std; //输出过程 void Print(int *A, int len) { for(int i = 0; i < len; i++) { if(i)cout<<' '; else cout<<"==> A = {"; cout<<A[i]; } cout<<' 阅读全文

posted @ 2012-06-19 11:00 windmissing 阅读(203) 评论(0) 推荐(0) 编辑

第6章 堆排序
摘要:一、概念堆是一种数组对象,却被视频一棵完全二叉树二、程序#include <iostream> #include <stdio.h> using namespace std; #define PARENT(i) (i)>>1 #define LEFT(i) (i)<<1 #define RIGHT(i) ((i)<<1)+1 int length = 10;//数组中元素的个数 int heap_size = 10;//属于堆的元素个数,看到HeapSort就会明白 /******************其它************* 阅读全文

posted @ 2012-06-17 15:42 windmissing 阅读(337) 评论(0) 推荐(0) 编辑

在bochs上运行的第一个操作系统
摘要:一、制作img镜像文件方法一:1.使用bochs自带的工具bximage.exe生成一个.img文件,生成的是一个全0的空文件,需要往里面写入内容2.创建自己的引导程序boot.asm,这段程序从网上找来的,不知道出处 org 07c00h ; 告诉编译器程序加载到 7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $ ; 无限循环 DispStr: mov ax, BootMessage mov bp, ax ; es:bp = 串地址 ... 阅读全文

posted @ 2012-06-16 15:11 windmissing 阅读(10225) 评论(0) 推荐(0) 编辑

算法导论6.5-8堆排序-K路合并
摘要:一、题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合成一个排序链表算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)二、步骤:step1:取每个链表的第一个元素,构造成一个含有k个元素的堆step2:把根结点的值记入排序结果中。step3:判断根结点所在的链表,若该链表为空,则go to step4,否则go to step5step4:删除根结点,调整堆,go to step2step5:把根结点替换为原根结点所在链表中的第一个元素,调整堆,go to step 2三、代码://heap.h #include <iostream> #inclu 阅读全文

posted @ 2012-06-16 10:39 windmissing 阅读(273) 评论(0) 推荐(0) 编辑

虚拟机中的Linux安装VMware Tools
摘要:操作过程如下:[root@localhost~]#cd/[root@localhost/]#lsbindevhomelost+foundmiscnetprocsbinsrvtftpbootusrbootetclibmediamntoptrootselinuxsystmpvar[root@localhost/]#cd/media[root@localhostmedia]#lsVMwareTools[root@localhostmedia]#cdVMware\Tools/[root@localhostVMwareTools]#lsmanifest.txtVMwareTools-8.1.3-2037 阅读全文

posted @ 2012-06-13 13:39 windmissing 阅读(342) 评论(0) 推荐(0) 编辑

Linux2.6块设备驱动程序
摘要:一、块设备的操作的处理体系结构1.VFS(虚拟文件系统)VFS位于块设备的处理体系结构的上层,提供一个通用的文件模型。VFS和块设备的关系见Linux2.6设备管理系统调用的服务例程调用一个合适的VFS函数,将文件描述符和文件内的偏移量传递给它。2.磁盘高速缓存VFS函数确定所请求的数据是否已经存在磁盘高速缓存中,若存在,就没有必须访问磁盘上的数据了。3.映射层(块设备文件系统)(1)把文件拆分成大小相同的块,每一个块都有一个逻辑号(2)访问文件的磁盘节点,根据每一块的逻辑块号,确定这块数据的在磁盘上的位置4.通用块层(1)内核利用通用块层启动I/O操作来传送所请求的数据。每个I/O操作只针对 阅读全文

posted @ 2012-06-09 16:21 windmissing 阅读(267) 评论(0) 推荐(0) 编辑

Linux2.6设备管理
摘要:一、设备管理与文件管理的关系1.文件操作是对设备操作的组织与抽象设备操作是对文件操作的最终实现二、设备驱动程序模型1./sys -----> 总线-----> PCI-----> 驱动程序-----> 串口-----> 设备2.设备驱动程序模型中的几个主要的层次:(1)总线,见Linux2.6 I/O体系结构(2)PCI总线,见三(3)驱动程序,见四(4)设备,见五三、PCI总线1.地址分配策略I/O地址空间与内存空间相分离,将I/O寄存器的地址映射成内存地址,通过内存指令来操作这些寄存器2.总线竞争策略(1)配备一个分时仲裁器,遇到冲突时,仲裁器选择一个设备暂时 阅读全文

posted @ 2012-06-05 14:30 windmissing 阅读(274) 评论(0) 推荐(0) 编辑

Linux2.6 I/O体系结构
摘要:一、I/O体系结构二、I/O总线1.总线计算机内部大部分硬件设备通过总线连接一台计算机可以有几条总线,可以是不同类型总线与总线之间用桥连接2.I/O总线CPU与I/O设备之间的数据通路通常称为I/O总线其中,地址总线16位,数据总线8位、16位或32位三、I/O端口1.概念每个连接到I/O总线上的调和都有自己的I/O地址集,称为I/O端口CPU使用地址总线选择所请求的I/O端口,使用数据总线在CPU寄存器和端口之间传送数据I/O端口可以被映射到物理地址空间,使用对内存操作的汇编指令来对I/O端口进行操作2.应用每个设备的I/O端口被组织成一组专用的寄存器,如图:CPU通过控制寄存器向设备发送命 阅读全文

posted @ 2012-06-04 11:15 windmissing 阅读(271) 评论(0) 推荐(0) 编辑

Linux2.6虚拟文件系统VFS
摘要:一、什么是虚拟文件系统1.VFS是用户的应用程序与文件系统实现之间的抽象层2.VFS支持以下三种类型的文件系统(1)磁盘文件系统(2)网络文件系统(3)特殊文件系统二、通用文件系统模型1.VFS的主要思想是引入一个文件系统模型,这个模式能够表示所有支持的文件系统2.通用文件模型的构成(1)超级块super_block:存放已安装文件系统的有关信息,所有的超级块对象以双向链表的形式链接在一起(2)索引结点块inode:存放具体文件的一般信息,对文件是唯一的,并且随着文件的存在而存在(3)文件对象file:存放打开文件与进程之间进行交互的有关信息,仅在文件被打开时创建,它在磁盘上没有对应的映像(4 阅读全文

posted @ 2012-06-01 22:13 windmissing 阅读(298) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示