摘要:
编程之美3.7队列的常用操作只有两个入队列EnQueue(v)和出队列DeQueue(v),这里需要增加一个取最大值的操作,而且使时间复杂度尽可能的小考虑到之前遇到过的,为栈设计取最大值问题,只需要用另外一个栈来记录当前栈中的最大值,当入栈时,如果入栈元素大于栈中最大元素则更新最大值,出栈时,如果出栈元素等于栈中最大元素则同时将记录最值的栈出栈而队列想要实现此功能则要复杂的多,想到可以借用栈来实现队列的最值问题。用两个栈A,B来模拟队列的出队和入队操作,入队列时,将元素直接放入A栈中,出队时,首先判断栈B是否为空,如果为空则将A栈中的元素依次出栈在压入B栈中,然后再从B栈中去掉一个元素分别用一 阅读全文
摘要:
内容源自: http://blog.csdn.net/v_JULY_v/article/details/6530142 动态查找树主要有:二叉查找树、平衡二叉查找树、红黑树、B树/B树的变形。前三者是典型的二叉查找树结构,其查找的时间复杂度O(logn)与树的深度相关,降低树的深度自然会提高查找效率 在大规模数据存储方面,大量数据存储在外存磁盘中,而在外存磁盘中读取/写入块(block)中某数据... 阅读全文
摘要:
转自:http://cpp.ezbty.org/content/science_doc/linux%E4%B8%8B%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%EF%BC%9A%E5%91%BD%E5%90%8D%E7%AE%A1%E9%81%93_mkfifo摘要:进程间通信的方法有很多,FIFO与管道是最古老,也是相对来说更简单的一个通信机制。FIFO相对管道有一个优势,就是FIFO只要求两个进程是同一主机的,而不要求进程之间存在亲缘关系。FIFO是存在于文件系统的文件,可以使用诸如open、read、write等函数来操作。本文总结网络和A 阅读全文
摘要:
有这样一块土地,可以被划分为M*N块正方形小块,每块面积是一平方英寸,第i行第j列的小块可以表示成P(i,j),这块土地高低不平,每一小块地P(i,j)都有自己的高度H(i,j),一场倾盆大雨后,由于这块地地势高低不同,许多低洼的地方都积存了不少降水,如果已经知道了这块土地的详细信息,求出它最多能积存多少立方英寸的降水分析:先分析一些比较容易求出的格子,例如边界,边界上积水上一定为0,从边界上最低的格子x开始,它就像是一个有洞的水桶,桶的容量取决于最低的那个洞,假设这个格子的高度为h,那么它相邻格子y的水位不会超过h,如果y的高度小于h,那么y的水位将是h,可以继续对y周围的格子进行灌水,直到 阅读全文
摘要:
在一棵树中,每个节点都有0个或者多个孩子节点,除了根节点以外每个节点都有一个双亲节点,从根节点到当前节点的路径上的节点都是当前节点的祖先节点, 现任意给定两个节点,要求它们的公共祖先,并且这个公共祖先离它们最近这里有两种算法:在线法和离线法.在线法:指每提出一次请求,便给出一次应答离线法:收集所有的请求,然后统一进行处理在线法 dfs+RMQ在线法主要借助了RMQ的思想,先对树进行深度优先遍历,对于含有n个节点的树,深度优先遍历产生的序列长度为2n-1, 遍历的过程中,记录每个节点第一次出现的位置,并记录序列中每个节点的层次。当询问节点a和节点b之间的最近公共祖先时,首先找到节点a和节点b第一 阅读全文
摘要:
求区间最值问题最简单的方法是遍历区间,时间复杂度O(n), 但是当查询次数很多的时候,时间效率并不高。可以用线段树把算法优化到O(logn) (在线段树中保存线段的最值),不过sparse_table算法是较好的,用O(nlogn)的时间进行预处理,然后用O(1)时间进行查询。预处理:预处理使用DP的思想,f(i, j)表示[i, i+2^j - 1]区间中的最小值,我们可以开辟一个数组专门来保存f(i, j)的值。例如,f(0, 0)表示[0,0]之间的最小值,就是num[0], f(0, 2)表示[0, 3]之间的最小值, f(2, 4)表示[2, 17]之间的最小值注意, 因为f(i, 阅读全文
摘要:
实现语言无关性的基础仍然是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要他符合Class文件应用的结构就可以在Java虚拟机中运行。 Class文件是一组以八位字节为基础的单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class... 阅读全文
摘要:
http://www.cnblogs.com/java-my-life/archive/2012/08/01/2615221.htmlJAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。 Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是共有的(public)、静态的(st.. 阅读全文
摘要:
虚拟机是如何判断一个对象已经死去呢?大部分人都回答是引用计数算法。1. 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1,任何时刻计数器值为0的对象就是不可能再被使用的。引用计数法的实现简单,判定效率比较高,但是java中并没有选择引用计数法来管理内存,其中主要的原因是它很难解决对象之间的相互循环引用问题。objA.instance=objB;objB.instance=objA;除此之外,这两个对象再无任何引用,实际上这两个对象已经不可能再被访问,但是它们相互引用,引用计数器无法通知GC收集器回收它们。2. 根搜索算法java c#以 阅读全文
摘要:
java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 主要包括方法区、堆区、虚拟机栈、本地方法栈、程序计数器 其中方法区和堆区为进程的所有子线程共享,其它的为线程独有 程序计数器 程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,是线程私有内存 Java... 阅读全文
摘要:
http://www.cnblogs.com/wanglikai91/archive/2011/10/11/2207688.htmlhttp://blog.csdn.net/v_july_v/article/details/6897097Trie数据结构Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基 阅读全文
摘要:
C程序由以下几部分组成:正文段 初始化数据段 非初始化数据段 栈 堆正文段: 这是由cpu执行段机器指令部分,正文段是可共享的,正文段通常是只读的初始化数据段: 通常称为数据段,它包含了程序中需要明确赋初值的变量,例如,C程序中出现在任何函数之外的声明:int maxcount = 99; 此变量带有初值存放在初始化数据段中非初始化数据段:通常称为bss段,在程序开始执行前,内核将此段中段数据初始化为0或空指针。出现在任何函数外段C声明long sum[1000];此变量存放在非初始化数据段中栈: 自动变量以及每次函数调用时所需要保存的信息都存放在此段中。每次调用函数时,其返回值地址以及调用者 阅读全文
摘要:
找中位数最容易想到的方法就是,先对序列进行排序,取中位数,然而5亿个数要想全部读入内存需要将近2GB空间。 一种想法是采用外部排序的方法,在排序的过程中记录数据个数,找到中位数。首先采用hash() % 100,把数据分到100个文件中,然后对每个文件分别在内存中进行快速排序,再将100个小文件进行合并,并在合并过程中寻找中位数,时间复杂度是O(nlogn) 另外一种方法是,将数据按照数据空间分... 阅读全文
摘要:
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? http://blog.csdn.net/v_JULY_v/article/details/6279498 看到这个题的第一反应就是使用位图,使用内存空间为2^32bit = 512MB,遍历序列,把对应的bit位置一,查找的时间复杂度为O(1) 用位图来操作效率很高,这里... 阅读全文
摘要:
位图在随机数的排序中用途广泛,并且耗时较少,最常用的是一位位图,即用一个bit的0/1来表示一个数,如果这个数存在就把响应的bit位置为1,否则就是0。在真正使用的时候,首先遍历数列,把表示每个数的相应bit位置1,第二次遍历位图,判断相应bit位对应数字是否存在,存在就打印输出,这样的序列自动有序。但是单bit位有一个缺点就是,可以检测元素是否存在,但是对于含有重复元素的序列排序就无能为力了。题目:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数这道题用2-bitmap可以很容易解决,每一个数用2-bit来表示,共可以表示4种状态,00表示不存在,01表示出现一次,10 阅读全文
摘要:
进程是一个动态的实体,从创建到消亡,是一个进程的整个生命周期。进程可能会经历各种不同的状态,一般来说有三种状态。+ 就绪态: 进程已经获得了除cpu以外的所有其它资源,在就绪队列中等待cpu调度+ 执行状态: 已经获得cpu以及所有需要的资源正在运行+ 阻塞状态(等待状态): 进程因等待所需要的资源而放弃处理器,或者进程本 来就不拥有处理器,且其它资源也没有满足状态转换: 就绪态的进程得到cpu调度就会变为执行状态,执行态的进程如果因为休眠或等待某种资源就会变为等待状态,执行态的进程如果时间片到了就会重新变为就绪状态放入就绪队列末尾,等待状态的进程如果得到除cpu以外的资源就会变为就绪状态注. 阅读全文
摘要:
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。第一范式1NF所谓第一范式是指数据库表中的每一列都是不可分割的基本数据项第二范式2NF如果关系模式为第一范式,并且每一个非主属性完全函数依赖于某个候选键,则称为第二范式第三范式3NF如果关系模式是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称为第三范式 消除了传递依赖BCNF若关系模式R是第一范式,并且每个属性都不. 阅读全文
摘要:
下面的问题描述及相关文字参考于CSDN中JULY的博客,在此对JULY表示感谢。JULY的博客地址如下:http://blog.csdn.net/v_JULY_v/article/details/64519901. 问题描述输入:一个最多最多含有n个正整数的大文件,并且不含重复元素,每个数都小于等于n,且n=10^7输出:得到按从小到大升序排列的输出序列条件:最多含有约1MB的内存空间,但磁盘空间足够2. 算法描述由于本题的特殊性,不含重复的正整数,因此可以考虑位图排序基本思路是:用一个bit的0/1来标志一个数据, 如果数据存在就置为1,最后遍历所有位,检查是否存在该数据,如果存在直接输出, 阅读全文
摘要:
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。 胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。一、胜者树 胜者树的一个优点是,如果一个选手的值改变了,可以很容易地修改这棵胜者树。只需要沿着从该结点到根结点的路径修改这棵二叉树,而不必改变其他比赛的结果。Fig. 1Fig.1是一个胜者树的示例。规定数值小者胜。b3 PK... 阅读全文
摘要:
夜里,就着一盏橘黄光晕的台灯,浅浅的茶香在屋里弥漫,一直重复听着一曲音乐,在旋律中寻找着属于自己的心境和共鸣。思绪在跃动的音符里飘飞,驿动散乱的心,被丝丝缕缕的音律润沁,渐趋渐稳。唯愿做个闲适恬然的人,安静地行走在文字和音乐之间,看云卷云舒,不问流年,不言寂寞。一座城市,一种心情,一种奢望。清清爽爽的风,尽情洒脱,让脚步随心的方向漂泊;寻寻觅觅的心,尽情落寞,让思念随碾碎的时光徜徉;真真切切的情,尽情渲染,一方明净,一方温情,一方空寂,任其纷飞,任其远去,任其消失;惶然中,看尽繁华,看尽风景,却看不透自己。岁月,是一行铅笔字,擦得再干净,也会留下痕迹。一首伤感的歌,一行浅浅的文字,瞬间能让人心 阅读全文