技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了( 二 )



技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了
本文插图

递归
递归是一种方法(函数)调用自己的编程技术 。 这听起来似乎有点奇怪 , 或者甚至像是一个灾难性的错误 。 但是 , 递归在编程中却是最有趣 , 又有惊人高效的技术之一 。 就像拽着自己的鞋带拔高一样(你确实有鞋带 , 是吗? ) , 在第一次遇到递归时 , 它似乎让人觉得难以置信 。 然而 , 递归不仅可以解决特定的问题 , 而且它也为解决很多问题提供了一个独特的概念上的框架 。

技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了
本文插图


为什么要用到树呢?因为它通常结合了另外两种数据结构的优点:
有序数组 ,
链表 。
在树中查找数据项的速度和在有序数组中查找一样快 , 并且插入数据项和删除数据项的速度也和链表- -样 。 下面 , 我们先来稍微思考一下这些话题 , 然后再深入地研究树的细节 。

技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了
本文插图


哈希表是一种数据结构 , 它可以提供快速的插入操作和查找操作 。 第一次接触哈希表时 , 它的优点多得让人难以置信 。 不论哈希表中有多少数据 , 插入和删除(有时包括删除)只需要接近常量的时间:即0(1)的时间级 。 实际上 , 这只需要几条机器指令 。
对哈希表的使用者一人来说 , 这是一瞬间的事 。 哈希表运算得非常快 , 在计算机程序中 , 如果需要在一秒种内查找上千条记录 , 通常使用哈希表( 例如拼写检查器) 。 哈希表的速度明显比树快 , 正如前面几章看到的 , 树的操作通常需要O(N)的时间级 。 哈希表不仅速度快 , 编程实现也相对容易 。
哈希表也有一些缺点:它是基于数组的 , 数组创建后难于扩展 。 某些哈希表被基本填满时 , 性能下降得非常严重 , 所以程序员必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中 , 这是个费时的过程) 。

技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了
本文插图


在计算机程序设计中 , 图是最常用的结构之一 。 一般来说 , 用图来帮助解决的问题类型与本书中已经讨论过的问题类型有很大差别 。 如果处理一般的数据存储问题 , 可能用不到图 , 但对某些问题(经常是一些有趣的问题) , 图是必不可少的

技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了
本文插图
【技术编程|三面腾讯、头条拿到offer后才知道,数据结构和算法太TM重要了】


推荐阅读