![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux应用程序之--数据结构和算法
bingqingsuimeng
这个作者很懒,什么都没留下…
展开
-
红黑树(一)
满足下面几个条件的二叉搜索树,称为红黑树:1. 任何一个节点都被着色――红色或是黑色。2. 根节点是黑色的。3. 所有的NIL节点都看成黑色(NIL节点是就是一个假想的或是无实在意义的节点,所有应该指向NULL的指针,都看成指向了NIL节点。包括叶节点的子节点指针或是根节点的父指针)。4. 如果一个节点是红色的,那么它的子节点转载 2013-07-02 14:26:23 · 961 阅读 · 0 评论 -
最大子矩阵和
前言:今天花了很长时间,看了无数人写的帖子,但是几乎没有人把这个问题一下子说得很清楚,所以,我把这个问题按照自己的思路写出来,希望能够把这个问题讲清楚。问题:求一个M*N的矩阵的最大子矩阵和。比如在如下这个矩阵中: 0 -2 -7 0 9 2 -6 2-4 1 -4 1-1 8 0 -2 拥有最大和的子矩阵为: 9 2-4 1-1 8转载 2017-11-28 14:12:44 · 290 阅读 · 0 评论 -
分治法——棋盘覆盖问题
void ChessBoard(int tr, int tc, int dr, int dc, int size){ if (size { return; } int s = size / 2; if (dr { //在左上角 board[tr + s - 1][tc原创 2017-11-22 11:07:13 · 335 阅读 · 0 评论 -
归并排序递归与非递归实现
递归实现:void MergeArray(int *a, int s, int mid, int e, int *p){ int i = s, j = mid+1; int m = 0; while (i { if (a[i] { p[m++] = a[i++]; }原创 2017-11-23 09:30:51 · 251 阅读 · 0 评论 -
循环赛制日程表问题
void CycleTable(int x, int y, int s, int n, int b[][MAX]){ if (n return; if (2 == n) { b[x][y] = s + 1; b[x][y+1] = s + n; b[x+1][y] = s + n;原创 2017-11-23 16:03:15 · 427 阅读 · 0 评论 -
最大子段和(分治与动态规划典例)
最大子段和 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2转载 2017-11-28 09:37:14 · 594 阅读 · 0 评论 -
理解矩阵乘法
大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。矩阵减法也类似。矩阵乘以一个常数,就是所有位置都乘以这个数。但是,等到矩阵乘以矩阵的时候,一切就不一样了。这个结果是怎么算出来的?教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位转载 2017-11-27 14:30:53 · 199 阅读 · 0 评论 -
动态规划入门教程
今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下~~~(说明一下,本人非常痛恨教材公式定理漫天飞,实际的讲解却讲得非常枯涩难懂,这种中国式的教育已经延绵了几千年了,现在中国的教材还是这个样子,讲清楚些明白些就那么难么?高中有个老师讲的一句话一直觉得很有道理:“教得会天才不是真本事,能把博士生的东西讲到小学生都会用那才是真水平。”转载 2017-11-24 15:37:47 · 194 阅读 · 1 评论 -
动态规划之--图像压缩
问题描述:图像压缩的问题我们是这样理解的:大家都知道计算机的图像是用灰度值序列来表示的{P1,P2......Pn},其中Pi表示像素点i的灰度值。而通常灰度值的范围是0~255,因此需要8位二进制数来表示一个像素。这个时候大家应该有了一些小的疑问:我能不能用更少的位数来表示灰度值?(因为有的灰度值并没有达到255这么大)所以我们引入了图像压缩算法来解决这个问题。 不过在引入问题之前,转载 2017-11-30 14:28:44 · 13785 阅读 · 17 评论 -
堆排序
堆的概念在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri 且Ri 小根堆)(2) Ri转载 2017-11-17 14:25:17 · 260 阅读 · 0 评论 -
AVL树->图解1
Balance Binary Tree 是一种二叉排序树,其中每个节点的左子树跟右子树的高度至多为1;因为发现解决平衡二叉树算法的两个人名字命名为AVL树;我们将二叉树节点的左子树深度减去右子树深度的值(Hleft-Hright)=>平衡因子BF(Balance Factor) -1,0,1; 平衡的引入就是为了最大化实现查找为O(logN) 距离插入节点距离最近,且平衡因子转载 2017-11-17 14:24:41 · 223 阅读 · 0 评论 -
关键路径的概念和算法
AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。AOE网的性质:⑴ 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。关键路径转载 2017-11-13 11:15:26 · 1232 阅读 · 0 评论 -
数据结构之图一----相关概念总结
1.图 定义:G(V,E) G:Graph V:vertex 非空集合 E:edge 边的集合 顶点(非空) 顶点之间的关系:边2.1各种图的定义 按照边的反向性 ①无向图 无向边(Vi, Vj) 任意两个边之间无向 G1=(V1,{E1}) V1 = {A,B,C, D} E1 = {(A原创 2017-11-09 17:14:05 · 254 阅读 · 0 评论 -
从数组中查找出最大最小两数的log(n)算法
从一个数组中选择出最大和最小两个数的一般实现方法是从数组第一个元素到最后一个挨个比较,用两个数分别记录max、min,时间复杂性为O(n).其实还有效率更高的方法,下面将介绍的方法时间复杂性为O(log(n)) [cpp] view plaincopy#include void maxmin(int a[],int i, in转载 2013-07-05 13:46:54 · 3761 阅读 · 0 评论 -
最大堆/最小堆
堆的定义是:n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆 (1)Ki 2i 且 ki 2i-1 或 (2) Ki >= k2i 且 ki >= k2i-1 (i = 1,2,…[n/2])当满足(1)时,为最小堆,当满足(2)时,为最大堆。 若将此序列对应的一维数组堪称是一个完全二叉树,则2i和2i+转载 2013-07-05 14:23:54 · 1213 阅读 · 0 评论 -
红黑树二
红黑树的节点删除 从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的后继节点(其实前趋也是一样的),而Z的后继节点绝对不转载 2013-07-02 15:27:14 · 719 阅读 · 0 评论 -
[LeetCode] Kth Smallest Element in a BST 二叉搜索树中的第K小的元素
Given a binary search tree, write a function kthSmallest to find thekth smallest element in it.Note: You may assume k is always valid, 1 ≤ k ≤ BST's total elements.Follow up:What if the BST转载 2018-01-05 10:46:54 · 234 阅读 · 0 评论