理解“递归” 递归是一种应用非常广泛的算法(或者编程技巧)。之后我们要讲的很多数据结构和算法的编码实现都要用到递归,比如DFS深度优先搜索、前中后序二叉树遍历等等。 不过,别看说了这么多,递归本身可是一点儿都不“高冷”,咱们生活中就有很多用 …
时间 57个相关结果 608次搜索
理解“队列” 队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的只能站末尾。先进者先出,这就是典型的“队列”。 我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本 …
理解“栈” 关于“栈”,有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个的放;取的时候,我们也是从上往下一个一个的依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操 …
想写好链表并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。如果能熟练掌握这几个技巧,加上主动和坚持,轻松拿下链表代码完全没有问题。 一:理解指针或引用的含义 事实上,看懂链表的结构并不困难,但 …
链表结构 相比数组,链表是一种稍微复杂一点的数据结构。数组和链表这两个非常基础、非常常用的数据结构,我们常常会放到一块儿来比较。 从底层的存储结构来看。下图中,数组需要一块连续的内存空间来存储,对内存的要求较高。如果我们申请一个 100MB …
在大部分编程语言中,数组都是从0开始编号的,那么为什么数组要从0开始而不是1呢?带着这个问题我们来看下面的内容。 如何实现随机访问? 数组(Array)是一种线性表数据结构。它是用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表, …
上一节中我们掌握了一些常见的复杂度,如O(1)、O(logn)、O(n)、O(nlogn)。下面我们继续四个复杂度分析方面的知识点:最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst c …
复杂度分析的必要性 通过跑代码得到算法执行的时间和占用空间局限性非常大,其测试结果非常依赖测试环境,测试结果也受数据规模的影响很大,所以我们需要一个不用具体的测试数据来测试,就可以粗略的估计算法的执行效率的方法。 大O复杂度表示法(时间复杂 …
概况 定义: 从大量的数据中,通过统计学、人工智能、机器学习等方法,挖掘出未知的、且有价值的信息和知识的过程 作用: 解决四类问题:分类、聚类、关联、预测 方法: 决策树、神经网络、关联规则、聚类分析等 结果: 输出模型或规则 常见的商业问 …
1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: selec …