返回介绍

第1章 面试的流程

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

第6章 面试中的各项能力

第7章 两个面试案例

5.3 时间效率与空间效率的平衡

发布于 2024-08-21 20:57:09 字数 812 浏览 0 评论 0 收藏 0

硬件的发展一直遵循着摩尔定律,内存的容量基本上每隔18个月就会翻一番。由于内存的容量增加迅速,在软件开发的过程中我们允许以牺牲一定的空间为代码来优化时间性能,以尽可能地缩短软件的响应时间。这就是我们通常所说的以空间换时间。

在面试的时候,如果我们分配少量的辅助空间来保存计算的中间结果以提高时间效率,这样的思路通常是可以接受的。本书中收集的面试题中有不少这种类型的题目,比如在面试题34丑数中用一个数组按照从小到大的顺序保存已经求出的丑数;在面试题43n个骰子的点数中交替使用两个数组求骰子每个点数出现的次数。

值得注意的是,以时间换空间的策略并不一定都是可行的,在面试的时候要具体问题具体分析。我们都知道在n个无序的元素里做查找操作,需要O(n)的时间。但如果我们把这些元素放进一个哈希表,那么在哈希表内就能实现O(1)的查找。但同时实现一个哈希表是有空间消耗的,是不是值得以多消耗空间为前提来换取时间性能的提升,我们需要根据实际情况仔细权衡。在面试题35第一个只出现一次的字符中,我们用数组实现了一个简易哈希表,有了这个哈希表就能实现O(1)查找任意字符。对于ASCII码的字符而言,总共只有256个字符,因此只需要1K的辅助内存。这点内存消耗对于绝大多数硬件来说是完全可以接受的。但如果是16位的Unicode的字符,创建这样一个长度为216的整型数组需要4×216也就是256K的内存。这对于个人电脑来说也是可以接受的,但对于一些嵌入式的开发就要慎重了。

很多时候时间效率和空间效率存在类似于鱼与熊掌的关系,我们需要在它们之间有所取舍。在面试的时候究竟是以时间换空间还是以空间换时间,我们可以和面试官进行探讨。多和面试官进行这方面的讨论是很有必要的,这既能显示我们的沟通能力,又能展示我们对软件性能全方位的把握能力。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文