摘要:排序是日常生活中最常见的操作,也是算法中最有趣的问题之一,排序问题可以描述为: 输入:n个数 输出:输入序列的一个排列(即重新排序),使得a1’A[j])14 15 {16 17 swap(A[j-1],A[j]); 18 19 } 20 21 } 22 23 } 24 25 }View Code 复杂度: 不难看出,排序的基本运算是比较操作,当... 阅读全文
[基础数据结构]二叉树完全总结
2013-09-04 11:40 by 庸男勿扰, 1011 阅读, 0 推荐, 收藏, 编辑
摘要:树形结构是数据结构中一种非常常用的非线性结构。通常用来表示具备分支关系的层次结构。其中二叉树又是树形结构中最简单最常见的一种。一、定义 二叉树,顾名思义,只有两个分叉的树,他的特点就是每个节点至多只有两颗子树(即二叉树中不存在度大于2的节点),通常情况下,我们称二叉树的两颗子树为左子树和右子树。二叉树又可递归定义为:①一个空树;②左子树和右子树均为二叉树。换句话说,二叉树有三个部分组成,根节点和同为二叉树的左右子树。这种递归定义非常有趣,它将帮助我们解决很多二叉树的操作问题。 二叉树中有两种特殊的形态,分别是完全二叉树和满二叉树。 满二叉树是指,除叶子节点外,每个节点都有两个子节点... 阅读全文
[数字技巧]重复数字统计算法的空间优化
2013-08-29 15:54 by 庸男勿扰, 792 阅读, 1 推荐, 收藏, 编辑
摘要:今天在微博上看到的一道面试题,觉得非常有意思,特记录下来。 原题是这样的: 给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。能够在O(n)的时间复杂度,O(1)的空间复杂度要求下完成么? 这道题目最大的难点就在于时空限制,确切的说是空间限制,如果没有空间复杂度为O(1)的要求,我们很容易想出用一个hash表来记录元素的出现次数。实现的代码如下: 1 #include 2 #include 3 #include 4 5 int a[1001]; 6 int b[1001] 7 ... 阅读全文
[综述]领域特定语言(Domain-Specific Language)的概念和意义
2013-07-18 19:57 by 庸男勿扰, 3190 阅读, 0 推荐, 收藏, 编辑
摘要:领域特定语言(Domain Specific Language, DSL)是一种为解决特定领域问题而对某个特定领域操作和概念进行抽象的语言。领域特定语言只是针对某个特定的领域,这点与通用编程语言(General purpose Language)不同,如Java既可以适用于网站开发,也可以适用于手机开发。一旦领域特定语言离开了相关领域,它就会变得不适用。但针对某个特定的领域,领域特定语言能很自然地方便地表述问题,也常常比通用编程语言更快地解决问题。 Martin Fowler 在《领域特定语言》一书中认为: “Domain-Specific Language: a computer p... 阅读全文