03 2018 档案
摘要:首先从一个问题引出下面的内容:如何确定增序的数组x[0...n-1]中整数t第一次出现的位置 1、之前博客中的设计简单并且易于维护的二分搜索效率已经很高,一般情况下不需要改变,但是对其进行调优可以获得不错的加速 2、之前的二分搜索寻找t的位置是随机的,并不一定是t出现的第一个位置 第一种算法(原理查
阅读全文
摘要:1、最简单的算法借助于一个n元的中间向量在n步时间内完成 时间复杂度:O(n) 空间复杂度O(n) 2、使用翻转的思路完成一个不需要额外空间、编写简单并且实际运行很快的算法 时间复杂度:O(n) 3、在O(n)时间内完成、不需要额外空间的杂技算法 原理是:将x[0]移动到t,将x[i]移动到x[0]
阅读全文
摘要:问题:在以空间换时间的编程策略中,随着空间的增大,可能初始化空间本身需要消耗的时间越来越多。 可以通过设计如下的方案,在第一次访问向量的项时将其初始化为0,可以使用常量时间进行向量的初始化和向量访问,使用的额外空间正比于向量的大小,即进一步增加空间消耗来减少初始化的时间。 假设保存数据的向量的长度为
阅读全文
摘要:商店允许顾客通过电话订购商品,并在几天后上门自取。商店的数据库使用客户的电话号码作为其检索的关键字(客户知道自己的电话号码,而且这些电话关键字几乎是唯一的)。如何组织商店的数据库,以允许更加高效的进行插入和检索操作呢? 将纸质订单表格放在10x10的箱数组中,使用客户电话号码的后两位作为散列索引(为
阅读全文
摘要:问题定义: 输入:两个整数m和n,其中m<n。 输出:[0,n-1]范围内m个整数的有序列表,不允许重复。 1、假如我们拥有一个能返回很大的(远大于m和n)的随机整数的函数bigrand() 顺序考虑整数0...n-1,并通过bigrand()的测试对每个整数进行选择,这样保证输出的数为有序的。 考
阅读全文
摘要:(1)插入排序 (2)简单的快速排序 原理:利用分治的思想,将数组排序范围最左端的元素作为参照,将比其小的元素移到其左边,将比其大的元素移动到其右边,在分别对两边的进行递归排序即可。 (3)更好的几种快速排序 1、双向划分 2、随机选取参照元素 将sp出的元素与[sp, ep]中随机的某个元素进行交
阅读全文
摘要:对磁盘文件进行排序,文件包含最多一千万条记录,每条记录都是7位的整数,无其他相关数据,每个整数只出现一次,由于某种系统需要,只能提供1MB左右内存。由于是实时系统,最多运行几分钟就能给出回应,十秒钟是比较理想的运行时间。 准确的问题描述: 输入:一个包含n个正整数的文件,每个数都小于n,其中n=10
阅读全文
摘要:问题:输入具有n个整数的向量arr,输出向量的任意连续子向量和的最大值 特殊情况(1、当向量都为正数时,为整个向量 2、当向量都为负数时,为0,即空子串 ) 1、O(n2)的算法 (循环对所有情况进行遍历) 其中有个小细节就是 注意sum(i, j-1) 和 sum(i, j)的关系,不要每次在求和
阅读全文

浙公网安备 33010602011771号