mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-24 02:03:10 +08:00
build
This commit is contained in:
@ -17,6 +17,14 @@ icon: material/calculator-variant-outline
|
||||
|
||||
她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。
|
||||
|
||||
计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。
|
||||
|
||||
事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精妙的算法思想。
|
||||
|
||||
同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下;羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。
|
||||
|
||||
那么,什么是算法,它在我们日常生活中扮演着怎样的角色?接下来,我们将就这些问题展开探讨。
|
||||
|
||||
## 本章内容
|
||||
|
||||
- [1.1 算法无处不在](https://www.hello-algo.com/chapter_introduction/algorithms_are_everywhere/)
|
||||
|
@ -17,6 +17,14 @@ icon: material/book-open-outline
|
||||
|
||||
愿这本书在你的脑海中轻轻响起,留下独特而深刻的旋律。
|
||||
|
||||
两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。
|
||||
|
||||
两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被得的满头是包,并在挫折中步步退缩。通读教材也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精力,啃厚重的书往往变成了一项艰巨的挑战。
|
||||
|
||||
如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的“知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。
|
||||
|
||||
我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力”来完成本书的创作。
|
||||
|
||||
## 本章内容
|
||||
|
||||
- [0.1 关于本书](https://www.hello-algo.com/chapter_preface/about_the_book/)
|
||||
|
@ -265,7 +265,7 @@ comments: true
|
||||
|
||||
插入排序的时间复杂度为 $O(n^2)$ ,而我们即将学习的快速排序的时间复杂度为 $O(n \log n)$ 。尽管插入排序的时间复杂度更高,**但在数据量较小的情况下,插入排序通常更快**。
|
||||
|
||||
这个结论与线性查找和二分查找的适用情况的结论类似。快速排序这类 $O(n \log n)$ 的算法属于基于分治策略的排序算法,往往包含更多单元计算操作。而在数据量较小时,$n^2$ 和 $n \log n$ 的数值比较接近,复杂度不占主导地位;每轮中的单元操作数量起到决定性作用。
|
||||
这个结论与线性查找和二分查找的适用情况的结论类似。快速排序这类 $O(n \log n)$ 的算法属于基于分治策略的排序算法,往往包含更多单元计算操作。而在数据量较小时,$n^2$ 和 $n \log n$ 的数值比较接近,复杂度不占主导地位,每轮中的单元操作数量起到决定性作用。
|
||||
|
||||
实际上,许多编程语言(例如 Java)的内置排序函数采用了插入排序,大致思路为:对于长数组,采用基于分治策略的排序算法,例如快速排序;对于短数组,直接使用插入排序。
|
||||
|
||||
|
@ -577,8 +577,8 @@ comments: true
|
||||
if (fNext != nullptr) {
|
||||
fNext->prev = nullptr;
|
||||
front->next = nullptr;
|
||||
delete front;
|
||||
}
|
||||
delete front;
|
||||
front = fNext; // 更新头节点
|
||||
// 队尾出队操作
|
||||
} else {
|
||||
@ -588,8 +588,8 @@ comments: true
|
||||
if (rPrev != nullptr) {
|
||||
rPrev->next = nullptr;
|
||||
rear->prev = nullptr;
|
||||
delete rear;
|
||||
}
|
||||
delete rear;
|
||||
rear = rPrev; // 更新尾节点
|
||||
}
|
||||
queSize--; // 更新队列长度
|
||||
|
@ -250,7 +250,7 @@ hide:
|
||||
<h3 style="margin-left: 0.5em;">互助学习</h3>
|
||||
</div>
|
||||
<p style="margin: 0;">欢迎讨论与提问,读者间携手共进</p>
|
||||
<p class="intro-quote">"Knowledge increases by sharing."</br>“知识在分享中得以增长”</p>
|
||||
<p class="intro-quote">"Learning by teaching."</br>“教学相长”</p>
|
||||
</div>
|
||||
</div>
|
||||
<img class="intro-image" src="index.assets/comment.gif">
|
||||
|
Reference in New Issue
Block a user