上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: 1. 简述 螺旋队列也是常考题目之一,被程序员面试宝典收录了。这里写一写我对螺旋队列的理解,两种螺旋队列,两种操作。 两种队列的不同点是:一个从左上角开始扩展,一个从中间开始扩展。相同点是:初始点的数值都是1,数值逐渐增加,而且都是沿着右下左上的顺序进行扩展的。螺旋队列举例,如下所示: 第一种螺旋队列: 第二种螺旋队列: 1 2 3 4 7 8 9 10 12 13 14 56 1 2 11 1116 15 6 5 4 3 12 10 9 8 716 15 14 13 两种操作,打印和查找。打印:指定矩阵长度N,将矩阵打印出来,例如指定N=4,就要输出上面的矩阵。查找:螺旋队列中数值为... 阅读全文
posted @ 2011-09-02 20:14 xiaodongrush 阅读(1564) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 给定一个n*n(0<n<=100)的矩阵,请找到此矩阵的一个子矩阵,并且此子矩阵的各个元素的和最大,输出这个最大的值。 Example: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 最大子矩阵为:9 2 -4 1 -1 8 2. 原理 最大子矩阵和是最大子序列和的二维扩展。 穷举所有子矩阵的话,有C(n,2)*C(n*2)/2个子矩阵,就是n^4个子矩阵,这还不算每个子矩阵求和的时间,就到了O(n^4)。 转化为最大子序列求解的思路是:固定第i列到第j列的范围,寻找在这个范围内的最大子矩阵,这个寻找过程,把每行第i列上的元素到第j列.. 阅读全文
posted @ 2011-09-02 12:17 xiaodongrush 阅读(10549) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 内存泄漏属于资源泄漏的一种,百度百科将内存泄漏分为四种:常发性内存泄漏、偶发性内存泄漏、一次性内存泄漏和隐式内存泄漏。 常发性指:内存泄漏的代码会被多次执行到。偶发性指:内存泄漏的代码只有在特定的条件下才会执行到。一次性指:内存泄漏的代码只会被执行到一次。隐式指:程序在运行中不断的开辟内存,知道程序结束时才释放内存,本质上虽然没有内存泄漏,但是如果这个程序在连续运行很长时间,会耗尽所有内存,导致系统崩溃。 下面首先介绍内存检测的基本原理,然后给出代码样例,最后说明针对四种内存泄漏进行检测的想法。2. 基本原理 内存泄漏就是new出来的内存没有通过delete合理的释放掉。new和d 阅读全文
posted @ 2011-08-29 14:54 xiaodongrush 阅读(5900) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 今天主要复习一下红黑树的性质和插入操作。 红黑树的结点与BST和AVL不同的是,还包含了父节点指针。2. 性质 第一,根结点和叶子结点(叶子是NIL结点)是黑色的,其他的中间结点是红色或者黑色的。 第二,从根到每个叶子的路径上的黑色结点个数相同。 第三,红色结点的孩子都是黑色的(不能连续出现两个红色的结点)。 注意:红黑树的性质中所说的叶子结点是指外部结点,在没有外部结点的二叉搜索树中,对应的是叶子结点下面的空结点,即NULL。以下图为例: 图中的叶子结点为NIL,实际上,如果不算空结点,那么6号结点是叶子结点。3. 查找 在只读操作上,红黑树、AVL树和普通的二叉搜索树都是一样. 阅读全文
posted @ 2011-08-27 22:17 xiaodongrush 阅读(2036) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 AVL树要求每个结点的左右子树高度相差绝对值小于2。查找、插入和删除在平均和最坏情况下都是O(log n)。2. 查找 查找比较简单与普通二叉搜索树的查找是一样的。从根开始,要么向左,要么向右,要么找到,如果到达了NULL,则表示查找失败。 AVLNode*avl_search(AVLNode*node,intvalue){while(node!=NULL){if(value<node->value)//向左node=node->left;elseif(value>node->value)//向右node=node->right;else//找到 阅读全文
posted @ 2011-08-25 12:55 xiaodongrush 阅读(1728) 评论(1) 推荐(0) 编辑
摘要: 1. 简述 SVM涉及的东西很多,如果要理解全面的话,要理解经验风险与置信风险,VC维理论,推导出最优化公式,最优化求解的拉格朗日解法,核函数,等等方面的内容,当前对SVM理解太少,平时主要使用其工具包,这里记录一下推导出SVM最优化公式的部分,主要参考是维基百科,感觉维基百科在这部分的说明比较清楚简单。2. 推导· 已知信息样本数据:xi是特征向量,yi是标注,p是特征向量的维数,n是样本数量。目标:是寻找最大间隔超平面,一方面保证将所有的样本分开,另一方面超平面两侧的没有样本的间隔最大。·推导假设超平面为w·x + b = 0(一般使用w的转置,这里输入不方便 阅读全文
posted @ 2011-08-24 17:15 xiaodongrush 阅读(3652) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 最近打算复习一下,几个经典的树结构,本文主要关注二叉搜索树,英文名称为Binary Search Tree (简称BST)。 本文主要总结二叉搜索树的查找算法、插入算法和删除算法。2. 查找算法 这个比较简单,要么找到了,要么向左,要么向右。BSTNode*bst_search(BSTNode*node,intvalue){while(node!=NULL){if(value<node->value)//向左node=node->left;elseif(value>node->value)//向右node=node->right;else//找到 阅读全文
posted @ 2011-08-24 00:02 xiaodongrush 阅读(7458) 评论(5) 推荐(1) 编辑
摘要: 1. 简述 杨氏矩阵中,每行元素是递增的,每列元素也是递增的。即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1]。要在这样的矩阵中查找某个数值元素的位置,复杂度可以达到O(M+N),其中M为矩阵行长度,N为矩阵列长度。2. 原理 从矩阵的左下角或者矩阵的右上角处开始递归运行,以左下角为例,value为要查找的值,(i,j)为当前矩阵中的位置,初始为(M-1, 0)。 如果超过了矩阵范围则说明不存在这样的元素,返回-1,-1。 否则的话,如果当前位置的值大于value,说明要移动位置,使得数值减小,即递归使得i=i-1;如果当前位置的值小于value,说明要移动 阅读全文
posted @ 2011-08-23 13:31 xiaodongrush 阅读(2152) 评论(1) 推荐(0) 编辑
摘要: 1.算法流程 输入:聚类个数k,以及包含 n个数据对象的数据库。 输出:满足方差最小标准的k个聚类。 (1)从n个数据对象任意选择k个对象作为初始聚类中心 (2)计算每个对象与聚类中心的距离;并根据最小距离重新对相应对象进行划分 (3)重新计算每个聚类的均值作为新的聚类中心 (4)循环(2)到(3)直到每个聚类不再发生变化为止2. 算法分析 K-Means的优化目标可以表示为: 其中,x_n表示数据对象,μ_k表示中心点,r_nk在数据点n分配到类别k的时候为1,没有分配到类别k的时候为0。 整个算法通过迭代计算,找到合适的r_nk和μ_k来,使得J最小。 算法流程的第二步,固定μ_k,更.. 阅读全文
posted @ 2011-08-23 11:14 xiaodongrush 阅读(6980) 评论(1) 推荐(0) 编辑
摘要: 1. 简述 前序,根->左子树->右子树,中序,左子树->根->右子树,后序,左子树->右子树->根。 本文主要关注三种遍历方式的非递归实现。其中,中序和后序的实现来自参考中的“二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现”一文及其评论,前序比较简单,单独写了个实现与参考的文中实现不同。另外,对于中序和后序,实现是一样的,也没什么意思,加了几行注释,就这样了,实现主要是核心代码,完整代码在参考的文章中很详细。2. 前序非递归首先,栈顶元素入栈,然后进入循环,每次把栈顶元素输出,元素出栈,将该元素的右孩子(如果存在)和左孩子(如果存在)依次入栈 阅读全文
posted @ 2011-08-22 15:42 xiaodongrush 阅读(2578) 评论(1) 推荐(1) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页