开头废话 这个问题是Donald.E.Knuth在他发表的论文Mathematical Analysis of Algorithms中提到的,这里对他的算法分析过程给出了更详细的解释. 问题描述: 给定一个数组a[1,2,...,n],用尽量少的比较次数找出数组中第t大的数.(假定这n个数两两不同). 算法描述: 对于这个问题,可以很容易想到对应的算法.一个 \(O(n\log n)\) 的排序算法总能解决问题(然鹅今天我们并不对数组进行完全的排序). 参照快速排序中的Partition操作,将…
"Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms"是著名计算机界大神Knuth在1971年发表的论文.以前只是听说Knuth非常神,看了这篇论文才体会到Knuth到底有多神-Orz 此外,特别感谢 @solaaaaa 聚聚,没有他的指导我可能根本看不懂这篇论文-... 这篇文章要解决什么问题? 作为算法分析这一领域的早期论文,这篇文章回答了以下两个问题: 算…
问题描述 把数列\((x_1,x_2,\cdots,x_n)\)变换顺序为\((x_{p(1)},x_{p(2)},\cdots,x_{p(n)})\),其中\(p\)是\(A=\{1,2,3,\cdots,n\}\)的一个排列,要求只使用\(O(1)\)的额外空间.例如,当数列为\((10,20,30,40)\),\(p\)为\((3,1,2,4)\)时得到的数列是\((30,10,20,40)\). 算法描述 对于映射\(p:A\rightarrow A\),它的含义是"排列后的数组每个元素…
个人心得:在买的书上看到的一个经典分治题,题目意思就是给定一个数组,求第k小的数. 第一反应就是排序,然后返回第k-1位置的数就可以了,这样算法的复杂度是nlongn,在快速排序的基础下还是挺不错的. 不过为了学习分治法还是换种思路,这也是建立在快速排序的方法,因为快排是以第一个作为标准,比他小的数在左边,大的数在右边. 所以此时就有nleft表示左边的个数 1:如果nleft=k-1,那么此时flag必然是第k小的数 2:如果大于,那么就在左边找就好了,问题规模变小了 3:如果小于,去右边,不…
利用改进的快排方法 public class QuickFindMaxKValue { public static void main(String[] args) { int[] a = {8, 3, 4, 1, 9, 7, 6, 10, 2, 5}; System.out.println(findMaxValue(a, 0, a.length - 1, 2)); } private static int findMaxValue(int[] a, int lo, int hi, int ma…
算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性,可维护性 等等.但是为什么要关心性能呢? 原因很简单,如果有了很好的性能,我们就可以实现以上那些.所以性能相当于货币,有了货币我们就可以购买其他的东西.另外一个原因是研究proformance 非常有趣. 两个算法,到底哪一个好呢?Given two algorithms for a task,…
今天我们开始简单的介绍数学分析这门课程,参考教材是Walter Rudin著的<Principles of Mathematical Analysis> 对于一门新课你最开始可能会问的是:这门课讲述了一个什么故事?简单的翻阅了一下这本书的目录,数学分析这一块,里边有微积分里的东西:微分法.级数.多元函数这类东西,当然也有离散数学中一些集合.关系的东西,因此,我们不能妄下论断说,数学分析就是带证明的微积分,但是,数学分析到底是讲述了一个怎样的故事呢?让我们怀揣着这个问题走进这门课. 数学作为工具…
Visual Studio工具栏中无法选择调试设备 在Visual Studio工具栏中,默认显示已经识别的设备.用户可以从中选择对应的设备,进行调试和部署App.但是由于误操作,可能导致该选项丢失.这时,用户需要重新设置,以恢复该选项.操作方式如下: (1)右击菜单右侧的空白处,从弹出的菜单中,勾选"标准"选项,以显示"标准"工具栏. (2)在标准工具栏的右侧,单击向下的三角形按钮,在弹出的菜单中,单击"添加和移除按钮"命令,再勾选"…
VIM 中鼠标选择不选中行号 在Vim中,我们一般会使用 :set nu 打开行号开关. 但是打开行号后,有个弊端,那就是在用鼠标进行选择的时候,会将前面的行号也一起进行拷贝了.但是在gVim中进行选择不会选中行号. 所以一直使用gVim进行编辑. 发现可以使用下面的方法使得在Vim中选择时不包括行号: :set mouse=a 其实就是在vim中启用鼠标,鼠标操作可以用来定位,拷贝等等. VIM 手册中关于mouse选项的说明 'mouse' 字符串 (缺省为 ”“,GUI.MS-DOS 和…
1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的FeatureSelection可不是IFeatureSelection,而是ISelection. .使用ISelectionSet,IEnumIDs,FeatureClass.GetFeature()方法获取某个图层中的选择要素 在map中获取要素时,这样是可以的,不过不能得到要素的完整属性信息,貌似只能拿到ID值. ISelection pSelection =…