自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MaoMao-go

Walk The Talk.

  • 博客(26)
  • 收藏
  • 关注

原创 如何使用CMake构建工程

目录工程内容目录结构总CMake动态库CMake可执行文件CMake有问题请留言,Thanks本文举一个简单的使用CMake构建C++工程的例子。通过这个例子来看下如何使用CMake构建一个C++工程。工程内容产生一个动态库aaa,以及对外的头文件产生一个可执行文件bbb,这个可执行文件依赖动态库aaa目录结构CMakeLists.txt # 总CMakeaaa-dir # 动态库目录 CMakeLists.txt # 动态库aaa的CMake

2020-09-02 11:28:52 1165

原创 视频编解码简介 - 编码流程详解

视频编解码简介文章目录视频编解码简介为什么需要编码?编码方式典型的编解码码流程预测性编码转换编码(有损压缩)熵编码(无损压缩)解码为什么需要编码?原始视频数据很庞大,比如一个150分钟,30FPS,分辨率为720✖480的彩色电影需要占用280GB。无论是物理存储还是网络传输,这都是难以负担的。所以需要编码进行压缩。编码方式一般有两种编码方式:熵编码(entropy coding,以无损...

2020-02-03 14:23:13 3013

原创 一图浅析electron架构

一图浅析electron架构废话不多说,electron既然基于chromium,我们先简单看下chromium架构: chromium运行时有一个Browser Process,以及一个或者多个Renderer Process。Renderer Process 顾名思义负责渲染Web页面。Browser Process则负责管理各个Renderer Process以及其他部分(比如菜单...

2018-03-06 11:20:18 7867

原创 《算法导论》学习分享——总览

Introduction-to-Algorithms注:所有内容都是拷贝自我的github仓库Introduction-of-Algorithms ,欢迎关注!Learning <<Introduction of Algorithms>>, and push Algorithms and Practices to server for management a...

2018-03-02 12:00:07 3799

原创 CMake使用pkg-config

# 添加pkg依赖xxx yyy zzzINCLUDE(FindPkgConfig) pkg_check_modules(PKGS_DEP REQUIRED xxx yyy zzz)# 上面的指令会生成 PKGS_DEP_CFLAGS 和 PKGS_DEP_LDFLAGS# 设置依赖pkg的CGLAGSFOREACH(flag ${PKGS_DEP_CFLAGS}) SET(EXTRA_CFLGAS "${EXTRA_CFLGAS} ${flag}") ENDFOREACH

2020-09-02 11:50:31 2975

原创 《算法导论》学习分享——23. 最小生成树

23. 最小生成树文章目录23. 最小生成树生成最小生成树如何找出一个**安全的边**Kruskal算法Prim算法引:在设计电子电路时,我们常常需要将多个组件的针脚连起。若要连接n个针脚,可以用n-1根连线,我们希望使用的最短的连线来连接针脚。最小生成树问题:一个连通无向图G=(V,E)G = (V, E)G=(V,E)中,对于每条边(u,v)∈E(u, v) \in E(u,v)∈E,...

2019-07-04 10:57:13 346

原创 《算法导论》学习分享——14. 数据结构的扩张

14. 数据结构的扩张文章目录14. 数据结构的扩张动态顺序统计量查看给定秩的元素查看一个元素的秩维护size如何扩张数据结构区间树一些工程应用需要的只是教科书中的标准数据结构,也有许多其他的应用需要对现有数据结构进行少许的创新和改造,但只有很少的情况需要创造全新类型的数据结构。更经常的是,通过存储额外信息的方法来扩张标准的数据结构,然后对这种数据结构编写新的操作来支持所需要的应用。比如:...

2019-07-04 10:53:48 189

原创 《算法导论》学习分享——13. 红黑树

13. 红黑树文章目录13. 红黑树AVL树RotateAVL树平衡调整(ADJUST_FROM(x))AVL树 InsertAVL树 Delete红黑树NULL -> T.nil红黑树 Insert红黑树 Delete性质维护:插入过程中维护性质的分析:删除过程中维护性质的分析:涉及数据结构二叉搜索树的各种操作时间复杂度为O(h)\Omicron(h)O(h),但是树的高度h不可控,最...

2019-07-04 10:47:37 290

原创 《算法导论》学习分享——12. 二叉搜索树

12. 二叉搜索树文章目录12. 二叉搜索树二叉搜索树SearchMinimumMaximumSuccessor & PredecessorInsertDelete涉及数据结构二叉搜索树支持许多动态集合的操作,包括Search,Insert,Delete,Minimum,Maximum,Successor,Predecessor。所有操作的时间复杂度为O(h)\Omicron(h)O(...

2019-07-04 10:42:05 176

原创 《算法导论》学习分享——11. 散列表(哈希表)

11. 散列表(哈希表)文章目录11. 散列表(哈希表)直接寻址表散列表链接法散列分析散列函数除法散列乘法散列全域散列开放寻址法线性探查双重探查开放寻址法分析完全散列涉及数据结构许多应用都需要一种动态集合,至少支持Insert,Search和Delete的字典操作。散列表(Hash Table)是实现字典操作的一种有效数据结构。尽管最坏情况下散列表查询一个元素的时间和链表的查询时间相同,为Θ...

2019-07-04 10:39:45 373

原创 《算法导论》学习分享——10. 基本数据结构

10. 基本数据结构文章目录10. 基本数据结构栈队列链表数组存储链表二叉树涉及数据结构动态集合的基本数据结构。栈栈,后进先出,用数组存储,并用top保存栈顶位置。支持压入(Push)和弹出(Pop)操作。a->b产生了两次Push操作,压入了17和3。b->c产生了一次Pop操作,弹出了3。队列队列,先进先出,用数组存储,用head和tail保存队列的头和尾的位置。...

2019-07-04 10:35:56 220

原创 《算法导论》学习分享——9. 中位数和顺序统计量

9. 中位数和顺序统计量文章目录9. 中位数和顺序统计量期望为线性时间的选择算法最坏情况为线性时间的选择算法涉及算法习题答案练习顺序统计量,第i个顺序统计量指n个元素集合中第i小的元素。最小值,第1个顺序统计量。最大值,第n个顺序统计量。中位数,第n/2个顺序统计量。(若n为偶数,取n/2-1)我们可以通过一次遍历数组,取得最大值或者最小值。但是若要取得中位数或者其他顺序统计量,则没...

2019-07-04 10:33:28 300

原创 算法导论》学习分享——8. 线性时间排序

8. 线性时间排序前边介绍了很多排序算法,他们有一个共同点:元素的排序依赖于对他们之间的比较,这类排序我们称其为比较排序。本章节讨论比较排序的下界以及一些线性时间的排序方法。比较排序的下界将比较排序抽象为一颗决策树。下图为三个元素排序的一颗决策树,叶子节点表示比较结果,其他节点表示某两个元素(a,b)(a,b)(a,b)作比较,节点的左子节点表示a<=ba<=b...

2019-07-04 10:30:39 145

原创 《算法导论》学习分享——7. 快速排序

7. 快速排序文章目录7. 快速排序快速排序性能最坏情况最好情况平衡的划分平均情况随机快速排序涉及算法快速排序是一种最坏情况时间复杂度为Θ(n2)\Theta(n^2)Θ(n2)的排序算法,虽然最坏情况的时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好,它的期望时间复杂度是Θ(nlg⁡n)\Theta(n\lg n)Θ(nlgn),而且Θ(nlg⁡n)\The...

2019-07-03 13:52:44 214

原创 《算法导论》学习分享——6. 堆排序

6. 堆排序堆排序也是一种时间复杂度为Ο(nlgn)**的排序算法,但是与归并排序不同的是堆排序是一种原址排序,也就是说排序过程只是交换数据的位置。最大堆堆是一个数组,存储一个近似完全二叉树,树上的每个结点对应数组中的一个元素,数组第一个元素存储根节点,第i个元素的左孩子在数组的2i位置,右孩子在数组的2i+1位置,父结点在数组的i/2位置。最大堆指一种父节点必然大于等于子节点的堆。下图...

2019-03-10 14:59:19 246

原创 《算法导论》学习分享——5. 概率分析和随机算法

5. 概率分析和随机算法当算法的时间和输入的数据有关时,往往我们需要使用概率分析得到算法运行时间的期望值(平均值)。雇用问题这种答案不唯一的问题,也需要概率分析来分析算法的期望值,从而评估算法的有效性。随机算法也有很广的应用,比如随机快速排序可以避免特定输入(已排序的队列或逆序列)时运行时间较长的情况。Github Source: https://github.com/maomao9003...

2019-03-10 14:35:35 414

原创 《算法导论》学习分享——4. 分治策略

4. 分治策略本着涉及更多的分治法相关的算法,以及分治法运行时间的分析方法。递归式递归式可以很自然的刻画分支算法的运行时间。递归式通过更小的输入上的函数值来藐视一个函数。下图为归并排序的递归式:T(n)={Θ(1)ifn=1,2T(n/2)+Θ(n)ifn>1, T(n)=\left\{\begin{aligned}& \Theta(1) &a...

2019-03-10 14:30:28 409

原创 《算法导论》学习分享——3. 函数的增长

3. 函数的增长本章给出集中标准方法来简化算法的渐进分析。渐进符号Θ 渐进紧确界   f(n)=Θ(g(n))f(n)=\Theta(g(n))f(n)=Θ(g(n)) 类似于 a = b   当n>n0时,存在常数c1和c2使得c1·g(n) <= f(n) <= c2·g(n)Ο 渐进上界   f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(...

2019-03-10 14:24:28 391

原创 《算法导论》学习分享——2. 算法基础

2. 算法基础本章介绍了一个证明算法正确性的方法——循环不变式,对算法运行时间的简单分析,以及分治法。循环不变式类似于数学归纳法的一种证明算法正确性的方法。需要证明以下三步:初始化循环的第一次迭代前,它为真。保持如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。终止再循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。分治法将原问题分解为几个...

2019-03-10 14:20:40 487

原创 《算法导论》学习分享——1. 算法在计算中的作用

1. 算法在计算中的作用算法应用广泛,包括解决一些问题,以及让解决一个问题更快速,更省空间。硬件(CPU,内存)总是有限的,所以算法是非常有必要的。不论是当今流行的互联网还是人工智能都和算法息息相关。算法解决哪些问题基因工程DNA中有十万个基因,30亿个化学基对,数据量很大互联网管理和处理海量数据(路由,搜索引擎)电子商务加密(公钥密码和数字签名)资源分配...

2019-03-10 14:16:34 602

原创 《算法导论》学习分享——22. 基本的图算法(BFS,DFS,拓扑排序,强连通分量)

22. 基本的图算法本章介绍图的表示和搜索。 许多的图算法在一开始都会先通过搜索来获得图的结构,其他一些图算法则是对基本的搜索加以优化。 可以说,图的搜索技巧是整个图算法领域的核心。图的表示G=(V,E)G=(V,E)G = (V, E) 图G由结点的集合V 和 边的集合E 组成可以用两种方法表示,一种是邻接链表(下图b),一种是邻接矩阵(下图c)。 邻接链表一...

2018-06-30 14:26:01 1860

转载 提交gerrit缺失changeId

使用Git提交代码时,遇到missing Change-Id in commit message footer会在提交失败信息中提示如何操作,缺失change-Id 会出现如下提示信息,Hint: To automatically insert Change-Id, install the hook:gitdir=$(git rev-parse --git-dir); scp -p -...

2018-04-28 15:53:04 3298 1

原创 《算法导论》学习分享——17. 摊还分析

17. 摊还分析在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价。这样,我们就可以说明一个操作的平均代价是很低的,即使序列中某个单一操作的代价很高。摊还分析不同于平均情况分析,它并不涉及概率,它可以保证最坏情况下每个操作的平均性能。 本章介绍三种摊还分析方法: * 聚合分析 * 核算法 * 势能法首先我们先看两个小问题栈操作对...

2018-03-22 13:51:21 1381 1

原创 《算法导论》学习分享——16. 贪心算法

16. 贪心算法求解最优化问题的算法通常需要经过一系列的步骤,在每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法来求最优解有些杀鸡用牛刀了,可以使用更简单、更高效的算法.贪心算法就是这样的算法,它在每一步都做出当时看起来最佳的选择。也就是说,它总是做出局部最优的选择,寄希望这样的选择能导致全局最优解。活动选择问题我们的第一个例子是一个调度竞争共享资源的多个活动的问题,目...

2018-03-20 17:48:37 664

原创 算法整理——插入排序

插入排序问题: 排序——输入数组{a1,a2,...,an}{a1,a2,...,an}\{a_1, a_2, ... , a_n\},排序后数组为{a′1,a′2,...,a′n}{a1′,a2′,...,an′}\{a_1^\prime , a_2^\prime, ... , a_n^\prime\},使得a′1≤a′2≤...≤a′na1′≤a2′≤...≤an′a_1^\prime ...

2018-03-15 21:28:00 133

原创 《算法导论》学习分享——15. 动态规划

15. 动态规划动态规划和分治法相似,都是通过组合子问题的解来求解原问题的解。但不同的是分治法将问题划分为不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。相反,动态规划应用于子问题相互重叠的情况,即不同的子问题具有公共的子子问题。这种情况下,用分治法会反复的求解相同的子问题,造成时间浪费。动态规划对每个子问题只求解一次,并且保存在表格中,从而避免重复计算。 动态规...

2018-03-13 10:08:22 653

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除