自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 动态规划的理论总结--数据结构与算法之美--CH41

文章目录1. 引言2. 动态规划可以解决什么问题2.1 一个模型2.2 三个特征2.2.1 最优子结构2.2.2 无后效性2.2.3 重复子问题3. 动态规划常规解题思路3.1 状态转移表法3.2 状态转移方程法1. 引言  在CH40中以0-1背包问题,从回溯算法到备忘录再到引入动态规划,可以从实践角度看到动态规划是如何解决问题的。 &emsp知其然,更要知其所以然,那么本节将站在...

2019-11-20 21:59:28 526

原创 动态规划的引入--数据结构与算法之美--CH40

文章目录1. 什么是动态规划2. 再看0-1背包问题2.1 递归回溯算法2.2 递归回溯+备忘录2.3 动态规划算法3. 升级版 0-1背包问题3.1 递归回溯算法3.2 动态规划求解4. 动态规划空间复杂度再优化4.1 普通 0-1 背包问题优化4.2 升级版 0-1 背包问题优化4.3 哨兵优化1. 什么是动态规划  在CH39讲回溯算法谈到回溯算法本质是枚举所有可能的路径,然后求取可行解...

2019-11-20 17:32:15 276

原创 回溯算法--数据结构与算法之美--CH39

文章目录1. 什么是回溯算法2. 回溯算法解决什么问题3. 回溯算法应用实例3.1 8皇后问题3.2 0-1背包问题3.3 正则表达式问题1. 什么是回溯算法  在CH37贪心算法一节讲到贪心算法的本质:“问题求解分K个步骤,每一步都选择当前最优的选择,最终得到一个方案”。但是这个方案并不一定是最优解,那怎么才能得到全局最优解呢?这就需要回溯算法来帮忙。  回溯算法的思想类似深度优先搜索,K...

2019-11-04 15:50:03 250

原创 分治算法--数据结构与算法之美--CH38

文章目录1. 什么是分治算法2. 分治算法解决什么问题3. 分治算法案例分析3.1 逆序对求解3.2 MapReduce实现4. 思考心得1. 什么是分治算法  学了之前的课程,分治算法其实已经不陌生了。分治算法顾名思义“分而治之”,前边学过的快速排序,归并排序,二分查找,都是这种思想的应用。  分治算法是一种思想,一般适合用递归实现,递归是一种编程技巧。2. 分治算法解决什么问题适合分...

2019-10-30 21:54:47 314

原创 贪心算法--数据结构与算法之美--CH37

文章目录1. 引言2. 什么贪心算法3. 什么情况下可以用贪心算法3.1 贪心算法有效3.2 贪心算法失效4. 贪心算法实战分析4.1 分糖果4.2 钱币找零4.3 区间覆盖4.4 霍夫曼编码5. 贪心算法的思考1. 引言  数据结构与算法之美的前述总结,已经基本将所有常用的数据结构和算法学习完了。  本节以及后边几个总结,将就4个算法思想进行学习:贪心算法,分治算法,回溯算法,动态规划。这...

2019-10-28 21:50:30 811

原创 字符串匹配算法--数据结构与算法之美--CH32

文章目录1. 什么是字符串匹配2. 如何实现字符串匹配2.1 BF算法2.2.1 BF算法常用原因2.2 RK算法2.2.1 hash 算法的设计2.2.2 散列冲突处理3. 其他算法简介4. 思考总结1. 什么是字符串匹配  “字符串匹配”就是在一个长字符串A中搜索一个短的字符串B,此时A称为主串,B称为模式串。  把主串A的长度记作 n,模式串B的长度记作 m,因为在主串中查找模式串,所...

2019-10-27 13:03:01 341

原创 图和图的遍历--数据结构与算法之美--CH30、CH31

文章目录1. 图的概念1.1 无向图1.2 有向图1.3 加权图2. 图的存储2.1 邻接矩阵2.2 邻接表2.3 逆邻接表3. 图的搜索3.1 图的表示3.2 广度优先搜索3.2.1 代码实现3.2.2 复杂度分析3.3 深度优先搜索3.3.1 代码实现3.3.2 复杂度分析4. 心得体会1. 图的概念  图是一种特殊的非线性数据结构,由顶点和边组成。如下图所示:  顶点的度,就是与该顶...

2019-10-22 21:15:55 501

原创 堆和堆的应用--数据结构与算法之美--CH28、CH29

文章目录1. 什么是堆2. 堆的操作2.1 堆的插入2.2 删除堆顶元素3. 堆排序3.1 原地建堆3.2 排序3.3 对比快速排序4. 堆的实际应用4.1 优先级队列4.1.1 合并有序文件4.1.2 高性能定时器4.2 求TOP K4.3 求中位数1. 什么是堆  堆是一种特殊的树,需要满足两点要求:堆是一种完全二叉树每个节点的值都大于等于(或小于等于)其子树节点的值,因此,堆被分成...

2019-10-17 21:56:01 721

原创 平衡二叉树、红黑树--数据结构与算法之美--CH25、C26

文章目录1. 平衡二叉树引入2. 平衡二叉树定义3. 红黑树4. 红黑树的操作技巧1. 平衡二叉树引入  二叉查找树支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是 O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2nlog_2nlog2​n 的情况,极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n...

2019-10-14 15:33:48 449

原创 二叉树--数据结构与算法之美--CH23、CH24

文章目录1. 什么是树2. 树的基本概念3. 二叉树3.1 满二叉树3.2 完全二叉树3.3 二叉树存储3.4 二叉树遍历4. 二叉查找树4.1 操作分析4.1.1 查找4.1.2 插入4.1.3 删除4.1.4 其他4.2 支持重复数据存储4.3 时间复杂度分析5. 思考解答1. 什么是树  树是n(n>=0)个结点的非线性表结构,n=0时称为空树。在任意一棵非空树中:有且仅有一个...

2019-10-10 15:31:31 694

原创 哈希算法--数据结构与算法之美--CH21、CH22

文章目录1. 概述1.1 什么是哈希算法1.2 如何设计优秀的哈希算法2. 安全加密3. 唯一标识4. 数据校验5. 散列函数6. 负载均衡7. 数据分片8. 分布式存储9. 思考解答1. 概述1.1 什么是哈希算法  一句话:将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。1.2 如何设计优秀的哈希算法单...

2019-10-09 16:17:24 596

原创 散列表--数据结构与算法之美--CH18、CH19、CH20

文章目录1 散列表概述1.1 散列表的由来1.2 散列函数1.3 散列冲突及解决1.3.1 开放寻址法1.3.2 链表法2 工业级散列表2.1 散列函数的设计2.2 装载因子及动态扩容2.3 选择合适的散列冲突解决办法3 散列表和链表的组合使用3.1 再看LRU缓存淘汰算法3.1.1 链表实现3.2.1 链表+散列表实现3.2 Redis有序集合的实现3.3 java LinkedHashMap分...

2019-10-09 11:38:39 748

原创 跳表--数据结构与算法之美--CH17

文章目录1. 什么是跳表2. 跳表的复杂度分析2.1 查找的时间复杂度2.2 插入、删除的时间复杂度2.3 空间复杂度2.4 空间复杂度优化3. 跳表的动态更新4. 跳表小结5. 问题思考5.1 为什么Redias用跳表来实现有序集合而不是红黑树?5.2 如果3个节点抽取,5个几点抽取一个,则时间复杂度为多少?1. 什么是跳表  跳表是为了解决"二分查找无法应用到链表"的问题而产生的。  跳...

2019-10-08 17:39:53 539

原创 二分查找(下)变体问题--数据结构和算法之美--CH16

文章目录1. 概述2. 二分查找变体问题2.1 查找第一个值等于给定值的元素2.2 查找最后一个值等于给定值的元素2.3 查找第一个大于等于给定值的元素2.4 查找最后一个小于等于给定值的元素3. 适用性分析4. 问题解答1. 概述不知道你有没有听过这样一个说法:“十个二分九个错”。二分查找虽然原理极其简单,但是想要写出没有 Bug 的二分查找并不容易。 唐纳德·克努特(Donald E.Kn...

2019-09-17 17:16:47 459

原创 二分查找(上)--数据结构和算法之美--CH15

文章目录1. 什么是二分查找2. 二分查找的时间复杂度3. 二分查找实现3.1 非递归实现3.2 递归实现4.二分查找应用场景5. 问题解答1. 什么是二分查找  二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。  每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。2. 二分查找的时间复杂度  二分查找,每次执行完成...

2019-09-17 16:30:29 498

原创 如何实现工业级的排序函数--数据结构和算法之美--CH14

文章目录1. 概述2. 如何选择排序算法3. 如何优化快速排序4. 通用排序算法实现技巧5. 分析java中排序算法的实现6. 典型问题1. 概述  排序算法有很多种,每种排序算法都可以从时间复杂度,稳定性和是否是原地排序进行衡量。并不是时间复杂度低的算法就一定最好,不同的排序算法,应用场景不同,如何选择排序算法,如何实现一个通用的工业级排序算法,需要根据不同的情况,做出恰当的选择。2. 如...

2019-09-17 15:36:09 576

原创 桶排序、计数排序、基数排序--数据结构和算法之美--CH13

文章目录1. 概述2. 桶排序2.1 原理分析2.2 时间复杂度分析2.3 使用条件2.4 适用场景3. 计数排序3.1 原理分析3.2 思路步骤3.3 代码实现3.4 使用条件4. 基数排序4.1 原理分析4.2 时间复杂度4.3 使用条件5. 解开篇答6. 课后思考1. 概述  本节介绍三种时间复杂度为O(n)O(n)O(n)的排序算法,桶排序、计数排序和基数排序。这两种排序都是利用了分治...

2019-09-05 16:42:57 518

原创 归并和快速排序算法--数据结构和算法之美--CH12

文章目录1. 概述2. 归并排序2.1 原理分析2.2 递推公式和终止条件2.3 伪代码2.3 性能分析2.3.1 算法稳定性2.3.2 时间复杂度2.3.3 空间复杂度3. 快速排序3.1 原理分析3.2 递推公式和终止条件3.3 伪代码3.3 性能分析3.3.1 算法稳定性3.3.2 时间复杂度3.3.3 空间复杂度4. 归并排序与快速排序的区别5. 解开篇答5. 课后思考1. 概述  本...

2019-09-05 15:29:16 573 2

原创 冒泡、插入、选择排序算法--数据结构和算法之美--CH11

文章目录1. 排序算法概述2. 如何分析排序算法2.1 时间复杂度2.1.1 最好,最坏和平均时间复杂度2.1.2 时间复杂度的系数、常数、低阶2.1.3 比较次数和交换(或移动)次数2.2 空间复杂度2.3 稳定性3. 三种$O(n^2)$排序算法详解3.1 冒泡排序3.1.1 算法步骤3.1.2 时间复杂度3.1.2.1 有序度3.1.3 空间复杂度3.1.4 算法稳定性3.1.5 冒泡优化3...

2019-09-03 17:47:11 487

原创 递归-- 数据结构与算法之美--CH10

文章目录1. 什么是递归2. 为什么需要递归3. 怎么使用递归3.2 不要深入思考递归3.2 一个递归实例4. 递归需要注意的问题5. 递归代码使用非递归实现6. 解开篇答7. 课后思考1. 什么是递归  从程序语言上来看,“递归”就是指方法在其定义中直接或间接的调用自身的一种编程技巧。  从其英文“Recursion”上来看,该过程分为“re-(again)”+“curs-(come)”,...

2019-09-02 16:55:24 485 1

转载 Android adb使用总结记录

文章目录1. 基本用法1.1 命令语法1.2 为命令指定目标设备1.3 启动/停止1.4 查看 adb 版本1.5 以 root 权限运行 adbd1.6 指定 adb server 的网络端口2. 设备连接管理2.1 查询已连接设备/模拟器2.2 USB 连接2.3 无线连接2.4 无线连接(无需借助 USB 线)3. 应用管理3.1 查看应用列表3.1.1 所有应用3.1.2 系统应用3.1....

2019-07-17 11:32:53 1331

原创 数据结构与算法之美---CH09---队列

文章目录0. 开篇问题1. 什么是队列?2. 为什么需要队列?3. 如何实现一个队列?3.1 顺序队列3.2 链式队列4. 几种特殊的队列4.1 循环队列4.2 阻塞队列4.3 并发队列5. 解开篇答6. 课后思考0. 开篇问题  CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理...

2019-07-08 17:20:10 434

原创 数据结构与算法之美---CH08---栈

文章目录0. 开篇问题1. 什么是栈?2. 为什么需要栈?3. 如何实现一个栈?3.1 顺序栈3.2 链式栈3.3 支持动态扩容的栈4. 栈的应用4.1 函数调用栈4.2 表达式求值4.3 括号匹配中应用5. 解开篇答6. 课后思考6.1 函数调用栈6.2 JVM堆栈概念0. 开篇问题  假设你是 Chrome 浏览器的开发工程师,你会如何实现网页前进后退的功能?1. 什么是栈?  栈是一...

2019-07-05 14:57:53 419

原创 数据结构与算法之美---CH06+CH07---链表

文章目录0. 开篇问题1. 什么是链表2. 常见链表结构2.1 单链表2.2 循环链表2.3 双向链表2.4 双向循环链表3. 数组和链表的抉择3.1 优缺点对比3.2 如何选择5. 解开篇答5. 写出bug free的链表代码的技巧5.1 理解指针或引用的含义5.2 警惕指针丢失和内存泄漏5.3 利用“哨兵”简化实现难度5.3.1 特殊节点处理繁琐5.3.2 应用“哨兵”简化处理5.4 重点留...

2019-07-03 14:28:45 526

原创 数据结构与算法之美---CH05---数组

文章目录0. 开篇问题1. 什么是数组1.1 线性表1.2 连续内存空间和相同类型数据1.3 数组和链表的区别2. 低效的“插入”“删除”2.1 插入时间复杂度及优化2.2 删除时间复杂度及优化3. 警惕数组越界4. 容器是否能够替代数组4.1 容器的优势4.2 数组应用场景5.解开篇问题6. 课后思考0. 开篇问题为什么数组从0开始编号,而不是从1开始?1. 什么是数组  数组(Arra...

2019-07-02 12:34:29 464

原创 数据结构与算法之美---CH03+CH04---复杂度分析

文章目录0. 什么是复杂度分析1. 复杂度分析的重要性2. 为什么要进行复杂度分析3. 如何进行复杂分析(1) 大O表示法(2) 3种时间复杂度分析方法(3) 常见的时间复杂度(4) 空间复杂度(5) 如何熟练4 复杂度分析的4个概念4.1 最好,最坏,平均和均摊4.2 为什么引入4个概念4.3 平均和均摊复杂度计算5 课后思考0. 什么是复杂度分析  一段算法程序,需要从时间和空间两个维度评...

2019-07-01 21:57:58 489

原创 数据结构与算法之美---CH01+CH02---是什么为什么怎么做

文章目录0 什么是数据结构和算法1 为什么学习2 学习什么3 怎么学习0 什么是数据结构和算法1、数据结构是指一组数据的存储结构2、算法就是操作数据的方法3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上1 为什么学习(1) 大学时候没有认真学习,甚至像我这种没有计算机科班背景的人,对数据结构和算法总是陌生和恐惧。(2) 工作中比较少接触,做客户...

2019-06-21 14:19:17 957

原创 AndroidStudio 中文乱码导致编译失败问题解决

文章目录1. 问题背景2. 原因分析3. 解决办法1. 问题背景使用AndroidStudio4.1 Canary,调试github下载的QMUI Android](https://github.com/Tencent/QMUI_Android)。单独执行lintrule的jar包gradle assemble时候,出现中文乱码并编译失败。2. 原因分析由于中文注释默认是GBK,AndroidStudio能够正常显示,但是编译的时候GBK中文被gradle认为是不可映射的字符,所以会报错。3. 解

2020-05-21 12:06:35 1573

原创 深入理解Java反射机制(1)---应用篇

文章目录0. 引言1. 什么是Java反射2. 认识class对象2. java反射的典型使用2.1 根据类名创建对象0. 引言在实际的Android开发中,很少接触发射。最近使用MVVM重构MapTool app,view和viewModel通过泛型实现动态绑定并在base类中完成一些共有的初始化逻辑,由于base类在编译期并不确定泛型,所以无法按照常规的new对象的逻辑来获取viewMod...

2020-04-06 22:21:33 374

原创 泛型的深入理解和案例解析(4)---类型擦除

文章目录0. 引言1. 代码实际验证1.1 两个不同类型的集合1.2 泛型类的成员变量1.3 extends限制类型擦除0. 引言   通过前三节,我们基本上掌握了泛型的基本用法和一些特定的问题解决。但是对泛型的本质原理,还未曾了解。   我们都知道,泛型是作用在编译阶段的,让IDE帮忙检查代码。但是,到了JVM里头和普通类,普通方法,普通接口就没什么两样了。实现这种特性的专业术语叫做“类型...

2020-04-05 23:08:51 297

原创 泛型的深入理解和案例解析(3)--- T 和 ? 的区别

文章目录0. 引言1. 顾名而思义2. 代码验证T和?3. 一个典型的泛型嵌套问题0. 引言   在上一节《泛型的深入理解和案例解析(2)—上下界和通配符》我们提到了通配符“?”,他和T的语法貌似一样,也可以指定上下界,也可以用在集合类中,那么自然而言有个疑问,他们两个是什么关系,什么区别,各自用在什么情况下?   我先放个结论:T 本质上是参数类型的声明,相当于形参,作用在定义阶段。...

2020-04-05 22:31:05 648

原创 泛型的深入理解和案例解析(2)---上下界和通配符

文章目录0. 引言1. 一个问题引出上下界2. 一个问题引出通配符3. 上下界0. 引言在上一小节《泛型的深入理解和案例解析(1)—应用篇》我们知道了泛型的基本使用,并且也注意到泛型仅支持类类型,而不支持基本类型。那么问题出来了,类类型之间有继承关系,泛型是不是支持呢,本节就将对这个问题进行深入分析。1. 一个问题引出上下界问题1:比如一个ArrayList列表,要往里边放入数字,但是不...

2020-04-05 21:52:27 321

原创 泛型的深入理解和案例解析(1)---应用篇

文章目录0. 泛型的历史1. 一句话定义泛型2. 泛型的三种应用2.1 泛型方法2.2 泛型类2.3 泛型接口0. 泛型的历史凡事一件事情的发生,必然有其合理性。泛型是JDK 1.5 加入的一种语言特性,它主要是为了解决在集合类元素默认Object类型,添加元素没有类型限制,导致运行时出现异常的问题。在我看来泛型主要解决两个问题:编译期的类型检查。比如List指定类型,添加元素。动态...

2020-04-05 09:19:01 206

原创 Error: Activity class {} does not exist.Error while Launching activity 的原因

文章目录1. 问题描述2. 问题复现3. 问题原因及解决1. 问题描述如下图所示,在AndroidStudio直接运行安装app时,出现下图所示错误,导致安装失败。2. 问题复现我是在1加3t手机调试app遇到该问题的,操作步骤如下:AS正常运行,安装app;在手机上,手动卸载app;AS再次运行,安装app,则问题出现。3. 问题原因及解决复现步骤中,有一个关键点是手动卸...

2020-02-10 19:59:30 969

原创 linux实用命令统计集合

文章目录1. 统计文件夹下文件或目录个数1. 统计文件夹下文件或目录个数文件数目ls -l | grep "^-" | wc -l目录个数ls -l | grep "^d" | wc -l解释ls -l ###列出所有文件或目录grep "^-" ###正则表达式筛选出文件grep "^d" ###正则表达式筛选出目录wc -l ###按行统计数目...

2020-01-25 15:25:18 262 1

原创 Android Genymotion 安装

文章目录1. 注册官网账号2. 下载Genymotion,安装3. AndroidStudio下载插件4. 点击Genymotion创建虚拟设备5. 安装调试  Genymotion是Android模拟器,一般用作Android调试工具,Genymotion官网有两个版本,个人使用版是免费的。1. 注册官网账号  打开 Genymotion官网 https://www.genymotion....

2020-01-10 16:17:45 304

原创 回归和分类模型性能评估指标MSE,MAE,PR,ROC,AUC

文章目录0. 模型评估是什么,为什么1. 不同类型问题的评估指标0. 模型评估是什么,为什么模型评估其本质是为了解决模型的泛化问题,由于各种原因,训练完成的模型可能会产生过拟合和欠拟合问题,因此需要对模型评估其泛化能力,并进行合适的参数调整以求得模型最优。为什么要进行模型评估?除了考虑到模型泛化能力的问题,同时也要兼顾不同业务场景下的业务指标不同。对于不同的业务场景,选择对应的评估指标,可...

2020-01-07 15:04:13 6697

原创 熵和信息

文章目录0. 序言1. 熵(entropy)的定义1.1 描述1.2 定义2. 信息的定义2.1 描述2.2 定义3. 概率的定义4. 算一算4.1 对人计算4.2 对事计算5. 参考文献0. 序言  在学习决策树的时候,决策树的分裂特征选择使用的启发函数,用到了熵这个概念。单纯的记忆公式只能知其然,而为了进一步探究决策树为什么用熵这个概念去评估选择分裂特征,则需要从熵的根本定义开始。1. ...

2020-01-01 23:19:43 586

原创 APK 反编译工具集和实战

文章目录0. 概述1. apk包含什么内容1.1 META_INF文件夹1.2 res文件夹1.3 AndroidManifest.xml1.4 classes.dex1.5 resources.arsc2. 我想看java代码实现2.1 工具2.2 操作步骤3. 我想获取布局文件3.1 工具3.2 操作步骤4. 查看apkTool生成的smali文件4.1 工具4.2 操作步骤5. 修改和重新打...

2019-12-31 15:58:22 718

原创 机器学习模型---判别VS生成,概率VS非概率,参数VS非参数

文章目录1. 判别模型VS生成模型1.1 判别模型1.2 生成模型监督学习是机器学习中发展最为成熟的分支,不仅由于监督学习框架下有各种学习模型,更因为监督学习框架有着坚实的理论支撑。这套理论包括VC理论、PAC理论和PAC-Bayes理论,它们以概率的方式回答了哪些问题可以学习以及学习成功的概率多大的问题。下边从几个视角来对监督学习模型进行分类。1. 判别模型VS生成模型假设一组数据X和标...

2019-12-17 21:40:16 1392

反编译工具集.rar

包含反编译通用工具 dex2jar apkTool smali2java jd-gui auto-sign

2019-12-31

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

TA关注的人

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