hello-algo Documentation

《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy hello-algo on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name hello-algo -p 8000:8000 --restart always hello-algo
Configured Services & Ports
⚙️ hello-algo
image: hello-algo
🔌 Ports: 8000:8000
docker-compose.yml
yaml (docker-compose.yml)
version: '3'
services:
  hello-algo:
    build: .
    image: hello-algo
    container_name: hello-algo
    ports:
      - "8000:8000"

Technical Documentation: krahets/hello-algo

ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference

Overview (README.md)

关于本书

本项目旨在打造一本开源免费、新手友好的数据结构与算法入门教程。

  • 全书采用动画图解,内容清晰易懂、学习曲线平滑,引导初学者探索数据结构与算法的知识地图。
  • 源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。
  • 提倡读者互助学习,欢迎大家在评论区提出问题与分享见解,在交流讨论中共同进步。

若本书对您有所帮助,请在页面右上角点个 Star :star: 支持一下,谢谢!

推荐语

“一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。”

—— 邓俊辉,清华大学计算机系教授

“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!”

—— 李沐,亚马逊资深首席科学家

贡献

本开源书仍在持续更新之中,欢迎您参与本项目,一同为读者提供更优质的学习内容。

  • 内容修正:请您协助修正或在评论区指出语法错误、内容缺失、文字歧义、无效链接或代码 bug 等问题。
  • 代码转译:期待您贡献各种语言代码,已支持 Python、Java、C++、Go、JavaScript 等 12 门编程语言。
  • 翻译审阅:欢迎您参与本项目的多语言翻译与校对工作,帮助更多读者用母语学习数据结构与算法。

欢迎您提出宝贵意见和建议,如有任何问题请提交 Issues 或微信联系 krahets-jyd 。

感谢本开源书的每一位撰稿人,是他们的无私奉献让这本书变得更好,他们是:

text
<a href="https://github.com/krahets/hello-algo/graphs/contributors">
    
</a>

License

The texts, code, images, photos, and videos in this repository are licensed under CC BY-NC-SA 4.0.


Chapter Array And Linkedlist Index (`docs/chapter_array_and_linkedlist/index.md`)

数组与链表

!!! abstract

text
数据结构的世界如同一堵厚实的砖墙。

数组的砖块整齐排列,逐个紧贴。链表的砖块分散各处,连接的藤蔓自由地穿梭于砖缝之间。

Chapter Backtracking Index (`docs/chapter_backtracking/index.md`)

回溯

!!! abstract

text
我们如同迷宫中的探索者,在前进的道路上可能会遇到困难。

回溯的力量让我们能够重新开始,不断尝试,最终找到通往光明的出口。

Chapter Computational Complexity Index (`docs/chapter_computational_complexity/index.md`)

复杂度分析

!!! abstract

text
复杂度分析犹如浩瀚的算法宇宙中的时空向导。

它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。

Chapter Data Structure Index (`docs/chapter_data_structure/index.md`)

数据结构

!!! abstract

text
数据结构如同一副稳固而多样的框架。

它为数据的有序组织提供了蓝图,算法得以在此基础上生动起来。

Chapter Divide And Conquer Index (`docs/chapter_divide_and_conquer/index.md`)

分治

!!! abstract

text
难题被逐层拆解,每一次的拆解都使它变得更为简单。

分而治之揭示了一个重要的事实:从简单做起,一切都不再复杂。

Chapter Dynamic Programming Index (`docs/chapter_dynamic_programming/index.md`)

动态规划

!!! abstract

text
小溪汇入河流,江河汇入大海。

动态规划将小问题的解汇集成大问题的答案,一步步引领我们走向解决问题的彼岸。

Chapter Graph Index (`docs/chapter_graph/index.md`)

图

!!! abstract

text
在生命旅途中,我们就像是一个个节点,被无数看不见的边相连。

每一次的相识与相离,都在这张巨大的网络图中留下独特的印记。

Chapter Greedy Index (`docs/chapter_greedy/index.md`)

贪心

!!! abstract

text
向日葵朝着太阳转动,时刻追求自身成长的最大可能。

贪心策略在一轮轮的简单选择中,逐步导向最佳答案。

Chapter Hashing Index (`docs/chapter_hashing/index.md`)

哈希表

!!! abstract

text
在计算机世界中,哈希表如同一位聪慧的图书管理员。

他知道如何计算索书号,从而可以快速找到目标图书。

Chapter Heap Index (`docs/chapter_heap/index.md`)

堆

!!! abstract

text
堆就像是山岳峰峦,层叠起伏、形态各异。

座座山峰高低错落,而最高的山峰总是最先映入眼帘。

Chapter Hello Algo Index (`docs/chapter_hello_algo/index.md`)


comments: true icon: material/rocket-launch-outline

序

几年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。

两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精力,啃厚重的书往往变成了一项艰巨的挑战。

如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的“知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。

我深深赞同费曼教授所言:“Knowledge isn't free. You have to pay attention.”从这个意义上看,这本书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力”来完成本书的创作。

本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评指正。

{ class="cover-image" }

text
<h2 style="margin-top: 0.8em; margin-bottom: 0.8em;">Hello,算法!</h2>

计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。

事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精妙的算法思想。

同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下;羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。

本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书能够帮助到你!


Chapter Introduction Index (`docs/chapter_introduction/index.md`)

初识算法

!!! abstract

text
一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。

她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。

Chapter Paperbook Index (`docs/chapter_paperbook/index.md`)


comments: true icon: material/book-open-page-variant status: new

纸质书

经过长时间的打磨,《Hello 算法》纸质书终于发布了!此时的心情可以用一句诗来形容:

{ class="animation-figure" }

以下视频展示了纸质书,并且包含我的一些思考:

  • 学习数据结构与算法的重要性。
  • 为什么在纸质书中选择 Python。
  • 对知识分享的理解。

新人 UP 主,请多多关照、一键三连~谢谢!

附纸质书快照:

{ class="animation-figure" }

{ class="animation-figure" }

优势与不足

总结一下纸质书可能会给大家带来惊喜的地方:

  • 采用全彩印刷,能够原汁原味地发挥出本书“动画图解”的优势。
  • 考究纸张材质,既保证色彩高度还原,也保留纸质书特有的质感。
  • 纸质版比网页版的格式更加规范,例如图中的公式使用斜体。
  • 在不提升定价的前提下,附赠思维导图折页、书签。
  • 纸质书、网页版、PDF 版内容同步,随意切换阅读。

!!! tip

text
由于纸质书和网页版的同步难度较大,因此可能会有一些细节上的不同,请您见谅!

当然,纸质书也有一些值得大家入手前考虑的地方:

  • 使用 Python 语言,可能不匹配你的主语言(可以把 Python 看作伪代码,重在理解思路)。
  • 全彩印刷虽然大幅提升了图解和代码的阅读体验,但价格会比黑白印刷高一些。

!!! tip

text
“印刷质量”和“价格”就像算法中的“时间效率”和“空间效率”,难以两全。而我认为,“印刷质量”对应的是“时间效率”,更应该被注重。

购买链接

如果你对纸质书感兴趣,可以考虑入手一本。我们为大家争取到了新书 5 折优惠,请见此链接或扫描以下二维码:

{ class="animation-figure" }

尾记

起初,我低估了纸质书出版的工作量,以为只要维护好了开源项目,纸质版就可以通过某些自动化手段生成出来。实践证明,纸质书的生产流程与开源项目的更新机制存在很大的不同,两者之间的转化需要做许多额外工作。

一本书的初稿与达到出版标准的定稿之间仍有较长距离,需要出版社(策划、编辑、设计、市场等)与作者的通力合作、长期雕琢。在此感谢图灵策划编辑王军花、以及人民邮电出版社和图灵社区每位参与本书出版流程的工作人员!

希望这本书能够帮助到你!


Chapter Preface Index (`docs/chapter_preface/index.md`)

前言

!!! abstract

text
算法犹如美妙的交响乐,每一行代码都像韵律般流淌。

愿这本书在你的脑海中轻轻响起,留下独特而深刻的旋律。

Chapter Reference Index (`docs/chapter_reference/index.md`)


icon: material/bookshelf

参考文献

[1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick, et al. Algorithms (4th Edition).

[4] 严蔚敏. 数据结构(C 语言版).

[5] 邓俊辉. 数据结构(C++ 语言版,第三版).

[6] 马克 艾伦 维斯著,陈越译. 数据结构与算法分析:Java语言描述(第三版).

[7] 程杰. 大话数据结构.

[8] 王争. 数据结构与算法之美.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang, et al. Dive into Deep Learning.


Chapter Searching Index (`docs/chapter_searching/index.md`)

搜索

!!! abstract

text
搜索是一场未知的冒险,我们或许需要走遍神秘空间的每个角落,又或许可以快速锁定目标。

在这场寻觅之旅中,每一次探索都可能得到一个未曾料想的答案。

Chapter Sorting Index (`docs/chapter_sorting/index.md`)

排序

!!! abstract

text
排序犹如一把将混乱变为秩序的魔法钥匙,使我们能以更高效的方式理解与处理数据。

无论是简单的升序,还是复杂的分类排列,排序都向我们展示了数据的和谐美感。

Chapter Stack And Queue Index (`docs/chapter_stack_and_queue/index.md`)

栈与队列

!!! abstract

text
栈如同叠猫猫,而队列就像猫猫排队。

两者分别代表先入后出和先入先出的逻辑关系。

Chapter Tree Index (`docs/chapter_tree/index.md`)

树

!!! abstract

text
参天大树充满生命力,根深叶茂,分枝扶疏。

它为我们展现了数据分治的生动形态。

En Docs Index (`en/docs/index.md`)

Hello Algo

Data structures and algorithms tutorial with animated illustrations and ready-to-run code.

Hello Algo


Ja Docs Index (`ja/docs/index.md`)

Hello アルゴリズム

アニメーション図解、ワンクリックで実行できるデータ構造とアルゴリズムのチュートリアル。

読み始める


Ru Docs Index (`ru/docs/index.md`)

Hello Алго

Учебник по структурам данных и алгоритмам с анимированными иллюстрациями и готовыми к запуску примерами кода.

Начать чтение


En Docs Chapter Array And Linkedlist Index (`en/docs/chapter_array_and_linkedlist/index.md`)

Arrays and Linked Lists

!!! abstract

text
The world of data structures is like a solid brick wall.

The bricks of an array are neatly aligned, each pressed tightly against the next. The bricks of a linked list are scattered about, with connecting vines weaving freely through the gaps between them.

En Docs Chapter Backtracking Index (`en/docs/chapter_backtracking/index.md`)

Backtracking

!!! abstract

text
We are like explorers in a maze, and may encounter difficulties on the path forward.

The power of backtracking allows us to start over, keep trying, and eventually find the exit leading to light.

En Docs Chapter Computational Complexity Index (`en/docs/chapter_computational_complexity/index.md`)

Complexity Analysis

!!! abstract

text
Complexity analysis is like a space-time guide in the vast universe of algorithms.

It leads us to explore deeply within the two dimensions of time and space, seeking more elegant solutions.

En Docs Chapter Data Structure Index (`en/docs/chapter_data_structure/index.md`)

Data Structures

!!! abstract

text
Data structures are like a sturdy and diverse framework.

It provides a blueprint for the orderly organization of data, upon which algorithms come to life.

En Docs Chapter Divide And Conquer Index (`en/docs/chapter_divide_and_conquer/index.md`)

Divide and Conquer

!!! abstract

text
Difficult problems are decomposed layer by layer, with each decomposition making them simpler.

Divide and conquer reveals an important truth: start with what is simple, and nothing remains complex.

En Docs Chapter Dynamic Programming Index (`en/docs/chapter_dynamic_programming/index.md`)

Dynamic Programming

!!! abstract

text
Streams flow into rivers, rivers flow into the sea.

Dynamic programming combines solutions to small problems into the answer to a large problem, leading us step by step to the other shore of problem-solving.

En Docs Chapter Graph Index (`en/docs/chapter_graph/index.md`)

Graph

!!! abstract

text
In the journey of life, we are like nodes, connected by countless invisible edges.

Each encounter and parting leaves a unique mark on this vast network graph.

En Docs Chapter Greedy Index (`en/docs/chapter_greedy/index.md`)

Greedy

!!! abstract

text
Sunflowers turn toward the sun, always seeking the fullest growth possible.

Through successive simple choices, greedy strategies gradually lead to the optimal solution.

En Docs Chapter Hashing Index (`en/docs/chapter_hashing/index.md`)

Hashing

!!! abstract

text
In the world of computing, a hash table is like a clever librarian.

It knows how to compute call numbers, allowing it to quickly locate the desired book.

En Docs Chapter Heap Index (`en/docs/chapter_heap/index.md`)

Heap

!!! abstract

text
Heaps are like mountain peaks, rising layer upon layer, each with a distinct shape.

The peaks rise and fall at varying heights, yet the tallest peak always catches the eye first.

En Docs Chapter Hello Algo Index (`en/docs/chapter_hello_algo/index.md`)


comments: true icon: material/rocket-launch-outline

Preface

A few years ago, I shared the "Sword for Offer" problem solutions on LeetCode, receiving encouragement and support from many readers. During interactions with readers, the most frequently asked question I encountered was "how to get started with algorithms." Gradually, I developed a keen interest in this question.

Diving straight into problem-solving seems to be the most popular approach—it's simple, direct, and effective. However, problem-solving is like playing Minesweeper: those with strong self-learning abilities can successfully defuse the mines one by one, while those with insufficient foundations may end up bruised and battered, retreating step by step in frustration. Reading through textbooks is also a common practice, but for job seekers, graduation theses, resume submissions, and preparations for written tests and interviews have already consumed most of their energy, making working through thick books an arduous challenge.

If you're facing similar struggles, then it's fortunate that this book has "found" you. This book is my answer to this question—even if it may not be the optimal solution, it is at least a positive attempt. While this book alone won't directly land you a job offer, it will guide you through the "landscape" of data structures and algorithms, help you understand the shapes, sizes, and distributions of different "mines," and enable you to master various "mine-clearing methods." With these skills, I believe you can tackle problems and read technical literature more confidently, gradually building a complete knowledge system.

I deeply agree with Professor Feynman's words: "Knowledge isn't free. You have to pay attention." In this sense, this book is not entirely "free." In order to live up to the precious "attention" you invest in this book, I will do my utmost and devote my greatest "attention" to completing this work.

I'm keenly aware of the limits of my knowledge and experience. Although the content of this book has been refined over a period of time, there are certainly still many errors, and I sincerely welcome critiques and corrections from teachers and fellow students.

{ class="cover-image" }

text
<h2 style="margin-top: 0.8em; margin-bottom: 0.8em;">Hello, Algorithms!</h2>

The advent of computers has brought tremendous changes to the world. With their high-speed computing capabilities and excellent programmability, they have become the ideal medium for executing algorithms and processing data. Whether it's the realistic graphics in video games, the intelligent decision-making in autonomous driving, AlphaGo's brilliant Go matches, or ChatGPT's natural interactions, these applications are all striking demonstrations of algorithms at work on computers.

In fact, before the advent of computers, algorithms and data structures already existed in every corner of the world. Early algorithms were relatively simple, such as ancient counting methods and tool-making procedures. As civilization progressed, algorithms gradually became more refined and complex. From the ingenious craftsmanship of master artisans, to industrial products that liberate productive forces, to the scientific laws governing the operation of the universe, behind almost every ordinary or astonishing thing lies ingenious algorithmic thinking.

Similarly, data structures are everywhere: from large-scale social networks to small subway systems, many systems can be modeled as "graphs"; from a nation to a family, the primary organizational forms of society exhibit characteristics of "trees"; winter clothing is like a "stack," where the first item put on is the last to be taken off; a badminton tube is like a "queue," with items inserted at one end and retrieved from the other; a dictionary is like a "hash table," enabling quick lookup of target entries.

This book aims to help readers understand the core concepts of algorithms and data structures through clear and accessible animated illustrations and runnable code examples, and to implement them in code. Building on this foundation, the book endeavors to reveal the vivid manifestations of algorithms in the complex world and showcase the beauty of algorithms. I hope this book can be of help to you!


En Docs Chapter Introduction Index (`en/docs/chapter_introduction/index.md`)

Encounter with Algorithms

!!! abstract

text
A young girl dances gracefully, intertwined with data, her skirt flowing with the melody of algorithms.

She invites you to dance with her. Follow her steps closely and enter the world of algorithms, full of logic and beauty.

En Docs Chapter Preface Index (`en/docs/chapter_preface/index.md`)

Preface

!!! abstract

text
Algorithms are like a beautiful symphony, each line of code flows like a melody.

May this book gently resonate in your mind, leaving a unique and profound melody.

En Docs Chapter Reference Index (`en/docs/chapter_reference/index.md`)


icon: material/bookshelf

References

[1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick, et al. Algorithms (4th Edition).

[4] Yan Weimin. Data Structures (C Language Version).

[5] Deng Junhui. Data Structures (C++ Language Version, Third Edition).

[6] Mark Allen Weiss, translated by Chen Yue. Data Structures and Algorithm Analysis in Java (Third Edition).

[7] Cheng Jie. Data Structures in Plain Language.

[8] Wang Zheng. The Beauty of Data Structures and Algorithms.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang, et al. Dive into Deep Learning.


En Docs Chapter Searching Index (`en/docs/chapter_searching/index.md`)

Searching

!!! abstract

text
Searching is an adventure into the unknown, where we may need to traverse every corner of the mysterious space, or we may be able to quickly lock onto the target.

In this journey of discovery, each exploration may yield an unexpected answer.

En Docs Chapter Sorting Index (`en/docs/chapter_sorting/index.md`)

Sorting

!!! abstract

text
Sorting is like a magic key that transforms chaos into order, enabling us to understand and process data more efficiently.

From simple ascending order to more complex classification schemes, sorting reveals the harmonious beauty of data.

En Docs Chapter Stack And Queue Index (`en/docs/chapter_stack_and_queue/index.md`)

Stacks and Queues

!!! abstract

text
A stack is like cats piled on top of one another, while a queue is like cats lining up.

They represent the logical relationships of LIFO (Last In, First Out) and FIFO (First In, First Out), respectively.

En Docs Chapter Tree Index (`en/docs/chapter_tree/index.md`)

Tree

!!! abstract

text
Towering trees are full of vitality, with deep roots, lush foliage, and sprawling branches.

They offer a vivid illustration of divide-and-conquer in data structures.

Ja Docs Chapter Array And Linkedlist Index (`ja/docs/chapter_array_and_linkedlist/index.md`)

配列と連結リスト

!!! abstract

text
データ構造の世界は、まるで重厚なれんがの壁のようです。

配列のれんがは整然と並び、一つひとつがぴったりと接しています。連結リストのれんがはあちこちに分散し、それらをつなぐつるがれんがのすき間を自由に行き交います。

Ja Docs Chapter Backtracking Index (`ja/docs/chapter_backtracking/index.md`)

バックトラッキング

!!! abstract

text
私たちは迷宮の探検者のように、前へ進む道で困難に出会うことがあります。

バックトラッキングの力によってやり直しができ、試行を重ね、最後には光へ通じる出口を見つけられます。

Ja Docs Chapter Computational Complexity Index (`ja/docs/chapter_computational_complexity/index.md`)

計算量解析

!!! abstract

text
計算量解析は、広大なアルゴリズム宇宙における時空の案内人のようなものです。

それは、時間と空間という二つの次元で私たちをより深く探求へ導き、より洗練された解決策を見つけ出します。

Ja Docs Chapter Data Structure Index (`ja/docs/chapter_data_structure/index.md`)

データ構造

!!! abstract

text
データ構造は、堅固で多様な枠組みのようなものである。

それはデータを秩序立てて組織するための青写真を示し、アルゴリズムはその上で生き生きと動き出す。

Ja Docs Chapter Divide And Conquer Index (`ja/docs/chapter_divide_and_conquer/index.md`)

分割統治

!!! abstract

text
難題は段階的に分解され、そのたびにより単純になっていく。

分割統治は一つの重要な事実を示している。単純なことから始めれば、すべてはもはや複雑ではない。

Ja Docs Chapter Dynamic Programming Index (`ja/docs/chapter_dynamic_programming/index.md`)

動的計画法

!!! abstract

text
小川は川へと注ぎ、河川は大海へと注ぐ。

動的計画法は小さな問題の解を集めて大きな問題の答えとし、一歩ずつ私たちを問題解決の彼岸へと導く。

Ja Docs Chapter Graph Index (`ja/docs/chapter_graph/index.md`)

グラフ

!!! abstract

text
人生の旅路において、私たちはそれぞれ一つひとつのノードのようなものであり、無数の見えない辺によって結ばれています。

出会いと別れのたびに、この巨大なネットワークグラフの中に固有の足跡が刻まれます。

Ja Docs Chapter Greedy Index (`ja/docs/chapter_greedy/index.md`)

貪欲法

!!! abstract

text
ヒマワリは太陽に向かって回り、自らが最も大きく成長できる可能性を常に追い求める。

貪欲戦略は、一回ごとの単純な選択を通じて、徐々に最適な答えへと導く。

Ja Docs Chapter Hashing Index (`ja/docs/chapter_hashing/index.md`)

ハッシュテーブル

!!! abstract

text
コンピュータの世界では、ハッシュテーブルは聡明な図書館員のような存在です。

彼は請求記号の計算方法を知っており、そのため目的の本を素早く見つけられます。

Ja Docs Chapter Heap Index (`ja/docs/chapter_heap/index.md`)

ヒープ

!!! abstract

text
ヒープは連なる山々の峰のように、幾重にも重なり、さまざまな形をしている。

いくつもの山の高さはまちまちだが、最も高い峰がいつも最初に目に入る。

Ja Docs Chapter Hello Algo Index (`ja/docs/chapter_hello_algo/index.md`)


comments: true icon: material/rocket-launch-outline

はじめに

数年前、私は LeetCode 中国版で「剣指 Offer」シリーズの解説を共有し、多くの読者から励ましと支持をいただきました。読者との交流の中で、最もよく聞かれた質問の一つが「アルゴリズムをどう学び始めればよいか」でした。次第に、私はこの問題に強い関心を抱くようになりました。

手探りでひたすら問題を解くことは、最も人気のある方法のようです。単純で、直接的で、しかも効果的です。しかし問題演習は「マインスイーパー」を遊ぶことに似ており、独学力の高い人は地雷を一つずつうまく取り除ける一方で、基礎が十分でない人は大きな痛手を受け、挫折の中で少しずつ後退してしまいがちです。教材を通読するのもよくある方法ですが、就職を目指す人にとっては、卒業論文、履歴書の提出、筆記試験や面接の準備ですでに大半の力を使い果たしており、分厚い本を読み込むことはしばしば困難な挑戦になってしまいます。

もしあなたも同じような悩みを抱えているなら、この本があなたのもとに“たどり着いた”のは幸運なことです。本書は、この問いに対して私が示す答えです。たとえ最良の解ではなくても、少なくとも前向きな試みではあります。本書だけで直接内定を得られるわけではありませんが、データ構造とアルゴリズムの「知識地図」を探る手助けをし、さまざまな「地雷」の形や大きさ、分布を理解し、いろいろな「地雷除去の方法」を身につけられるよう導きます。こうした力があれば、問題演習や文献読解をより自在に進め、やがて完整な知識体系を築いていけると信じています。

私はファインマン教授の言葉に深く賛同しています。「Knowledge isn't free. You have to pay attention.」この意味において、本書は完全に「無料」ではありません。本書のためにあなたが払ってくれる貴重な「注意」に応えるため、私はできる限りの力を尽くし、最大限の「注意」を注いで本書を書き上げます。

私は自らの学識と力量の浅さをよく承知しています。本書の内容はある程度磨きをかけてきたものの、なお多くの誤りが残っているはずです。先生方、そして学習者の皆さまからのご批判とご指摘を心よりお願いいたします。

{ class="cover-image" }

text
<h2 style="margin-top: 0.8em; margin-bottom: 0.8em;">Hello、アルゴリズム!</h2>

コンピュータの登場は世界に大きな変革をもたらしました。高速な計算能力と優れたプログラム可能性によって、アルゴリズムの実行とデータ処理の理想的な媒体となったのです。ビデオゲームのリアルな映像、自動運転の知的な意思決定、AlphaGo の見事な対局、ChatGPT の自然な対話に至るまで、これらの応用はいずれもコンピュータ上でアルゴリズムが巧みに表現されたものです。

実際には、コンピュータが誕生する以前から、アルゴリズムとデータ構造は世界のいたるところに存在していました。初期のアルゴリズムは比較的単純で、たとえば古代の数え方や道具作りの手順などがそれに当たります。文明の進歩とともに、アルゴリズムは次第により精緻で複雑なものになっていきました。匠の巧みな技から、生産力を解放する工業製品、さらには宇宙の運行を支配する科学法則に至るまで、ほとんどあらゆる平凡なもの、あるいは驚嘆すべきものの背後には、精妙なアルゴリズムの思想が潜んでいます。

同様に、データ構造も至るところに存在します。社会ネットワークのような大きなものから地下鉄路線のような小さなものまで、多くのシステムは「グラフ」としてモデル化できます。国家のような大きな単位から家庭のような小さな単位まで、社会の主な組織形態には「木」の特徴があります。冬服は「スタック」のように、最初に着たものが最後に脱がれます。バドミントンシャトルの筒は「キュー」のように、一方から入れて他方から取り出します。辞書は「ハッシュテーブル」のようなもので、目的の見出し語を素早く探せます。

本書は、わかりやすいアニメーション図解と実行可能なコード例を通じて、読者がアルゴリズムとデータ構造の核心概念を理解し、さらにプログラミングによってそれらを実装できるようになることを目指しています。そのうえで、本書は複雑な世界の中にあるアルゴリズムの生き生きとした現れを明らかにし、アルゴリズムの美しさを示そうとしています。本書があなたの助けになれば幸いです。


Ja Docs Chapter Introduction Index (`ja/docs/chapter_introduction/index.md`)

アルゴリズム入門

!!! abstract

text
一人の少女が軽やかに舞い、データと織り重なり合いながら、スカートの裾にはアルゴリズムの旋律がたなびいています。

彼女はあなたをこの舞いへと誘います。その足取りに続いて、論理と美しさに満ちたアルゴリズムの世界へ踏み入りましょう。

Ja Docs Chapter Preface Index (`ja/docs/chapter_preface/index.md`)

はじめに

!!! abstract

text
アルゴリズムは美しい交響曲のようであり、コードの一行一行が旋律のように流れていきます。

この本があなたの心の中でそっと響き、独自で深い旋律を残してくれることを願っています。

Ja Docs Chapter Reference Index (`ja/docs/chapter_reference/index.md`)


icon: material/bookshelf

参考文献

[1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick, et al. Algorithms (4th Edition).

[4] 严蔚敏. データ構造(C 言語版).

[5] 邓俊辉. データ構造(C++ 言語版、第3版).

[6] マーク・アレン・ワイス著,陈越訳. データ構造とアルゴリズム解析:Java言語による記述(第3版).

[7] 程杰. データ構造の話.

[8] 王争. データ構造とアルゴリズムの美.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang, et al. Dive into Deep Learning.


Ja Docs Chapter Searching Index (`ja/docs/chapter_searching/index.md`)

探索

!!! abstract

text
探索は未知の冒険であり、私たちは神秘的な空間の隅々まで歩き回る必要があるかもしれず、あるいは素早く目標を特定できるかもしれません。

この探索の旅において、すべての探求が思いもよらなかった答えをもたらすかもしれません。

Ja Docs Chapter Sorting Index (`ja/docs/chapter_sorting/index.md`)

ソート

!!! abstract

text
ソートは、混沌を秩序へと変える魔法の鍵のようなものであり、データをより効率的に理解し処理することを可能にします。

単純な昇順であれ、複雑な分類配列であれ、ソートはデータの調和のとれた美しさを私たちに示してくれます。

Ja Docs Chapter Stack And Queue Index (`ja/docs/chapter_stack_and_queue/index.md`)

スタックとキュー

!!! abstract

text
スタックは猫を積み重ねるようなもので、キューは猫が列に並ぶようなものです。

両者はそれぞれ、後入れ先出しと先入れ先出しの論理関係を表します。

Ja Docs Chapter Tree Index (`ja/docs/chapter_tree/index.md`)

木

!!! abstract

text
大樹は生命力に満ち、根は深く葉は生い茂り、枝は豊かに広がる。

それはデータ分割統治の生き生きとした姿を私たちに示してくれる。

Ru Docs Chapter Array And Linkedlist Index (`ru/docs/chapter_array_and_linkedlist/index.md`)

Массивы и списки

!!! abstract

text
Мир структур данных напоминает прочную кирпичную стену.

Кирпичи массива уложены ровно и плотно прилегают друг к другу. Узлы связного списка, напротив, разбросаны в разных местах, а соединяющие их связи свободно тянутся между промежутками.

Ru Docs Chapter Backtracking Index (`ru/docs/chapter_backtracking/index.md`)

Поиск с возвратом

!!! abstract

text
Мы словно исследователи в лабиринте: на пути вперед могут встречаться тупики и трудности.

Сила возврата позволяет нам начать заново, пробовать снова и снова и в конце концов найти выход к свету.

Ru Docs Chapter Computational Complexity Index (`ru/docs/chapter_computational_complexity/index.md`)

Анализ сложности

!!! abstract

text
Анализ сложности подобен пространственно-временному проводнику в необъятной вселенной алгоритмов.

Он ведет нас в глубину двух измерений - времени и пространства, помогая искать более изящные решения.

Ru Docs Chapter Data Structure Index (`ru/docs/chapter_data_structure/index.md`)

Структуры данных

!!! abstract

text
Структуры данных подобны прочному и многообразному каркасу.

Они задают схему упорядоченной организации данных, на основе которой оживают алгоритмы.

Ru Docs Chapter Divide And Conquer Index (`ru/docs/chapter_divide_and_conquer/index.md`)

Разделяй и властвуй

!!! abstract

text
Сложная задача раскладывается слой за слоем, и каждое новое разбиение делает ее проще.

Принцип «разделяй и властвуй» показывает важный факт: если начать с простого, многое перестает быть сложным.

Ru Docs Chapter Dynamic Programming Index (`ru/docs/chapter_dynamic_programming/index.md`)

Динамическое программирование

!!! abstract

text
Ручьи впадают в реки, а реки вливаются в море.

Динамическое программирование собирает решения малых задач в ответ на большую задачу и шаг за шагом ведет нас к ее решению.

Ru Docs Chapter Graph Index (`ru/docs/chapter_graph/index.md`)

Графы

!!! abstract

text
В жизни мы похожи на вершины, соединенные множеством невидимых ребер.

Каждая встреча и каждое расставание оставляют в этой огромной сети свой след.

Ru Docs Chapter Greedy Index (`ru/docs/chapter_greedy/index.md`)

Жадность

!!! abstract

text
Подсолнух поворачивается к солнцу, постоянно стремясь к наилучшим условиям для роста.

Жадная стратегия через цепочку простых выборов постепенно приводит к наилучшему ответу.

Ru Docs Chapter Hashing Index (`ru/docs/chapter_hashing/index.md`)

Хеш-таблицы

!!! abstract

text
Хеш-таблица устанавливает соответствие между ключом и значением.

Благодаря этому она позволяет получать нужное значение по ключу за очень короткое время.

Ru Docs Chapter Heap Index (`ru/docs/chapter_heap/index.md`)

Куча

!!! abstract

text
Куча - это полное двоичное дерево, удовлетворяющее определенным условиям.

В максимальной и минимальной куче элемент на вершине всегда обладает самым выраженным приоритетом.

Ru Docs Chapter Hello Algo Index (`ru/docs/chapter_hello_algo/index.md`)


comments: true icon: material/rocket-launch-outline

Перед началом

Несколько лет назад я публиковал на LeetCode разборы серии задач «Sword for Offer» и получил поддержку и ободрение от многих читателей. Во время общения с ними мне чаще всего задавали один и тот же вопрос: «как начать изучать алгоритмы?» Постепенно этот вопрос начал меня по-настоящему занимать.

Слепо бросаться в решение задач кажется самым популярным способом: он прост, прямолинеен и действительно работает. Но решение задач похоже на игру в «Сапера»: люди с сильными навыками самообучения способны обезвредить мины одну за другой, а тем, у кого не хватает базы, легко набить себе шишки и шаг за шагом отступить под давлением неудач. Полностью проходить учебники тоже принято часто, но для тех, кто готовится к поиску работы, диплом, резюме, письменные тесты и собеседования уже отнимают большую часть сил, и потому толстые книги нередко превращаются в тяжелое испытание.

Если ты тоже сталкиваешься с такими трудностями, то можно сказать, что эта книга сама «нашла» тебя. Она стала моим ответом на этот вопрос: пусть и не идеальным, но как минимум честной и активной попыткой. Эта книга сама по себе не гарантирует предложения о работе, но поможет тебе увидеть «карту знаний» по структурам данных и алгоритмам, понять форму, размер и расположение разных «мин» и освоить разные «способы разминирования». Освоив это, ты сможешь увереннее решать задачи и читать технические материалы, шаг за шагом выстраивая целостную систему знаний.

Я глубоко согласен со словами профессора Фейнмана: «Knowledge isn't free. You have to pay attention.» В этом смысле книга не совсем «бесплатна». Чтобы не подвести то драгоценное «внимание», которое ты ей уделишь, я постараюсь вложить в ее создание максимум собственного «внимания».

Я хорошо понимаю пределы собственных знаний. Хотя материал этой книги уже довольно долго шлифовался, в нем наверняка все еще осталось немало ошибок, поэтому я искренне прошу преподавателей и читателей указывать на неточности и недоработки.

{ class=«cover-image» }

text
<h2 style="margin-top: 0.8em; margin-bottom: 0.8em;">Hello, алгоритмы!</h2>

Появление компьютеров радикально изменило мир. Благодаря высокой скорости вычислений и отличной программируемости они стали идеальной средой для исполнения алгоритмов и обработки данных. Реалистичная графика в играх, интеллектуальные решения в автономном вождении, впечатляющие партии AlphaGo и естественное взаимодействие ChatGPT: все это изящные проявления алгоритмов на компьютере.

На самом деле еще до появления компьютеров алгоритмы и структуры данных уже существовали во всех уголках мира. Ранние алгоритмы были сравнительно простыми: например, древние способы счета или последовательности действий при изготовлении инструментов. По мере развития цивилизации алгоритмы становились тоньше и сложнее. За мастерством ремесленников, промышленными продуктами, освобождающими производительные силы, и даже за научными законами движения Вселенной почти всегда стоит изобретательная алгоритмическая мысль.

Точно так же структуры данных встречаются повсюду: от социальных сетей до схем метро многие системы можно моделировать как «граф». От государства до семьи основные формы общественной организации обладают свойствами «дерева». Зимняя одежда похожа на «стек», где то, что надевают первым, снимают последним. Тубус для бадминтонных воланов похож на «очередь», где элементы добавляются с одного конца и извлекаются с другого. Словарь похож на «хеш-таблицу», позволяющую быстро находить нужную статью.

Эта книга стремится с помощью понятных анимированных иллюстраций и исполняемых примеров кода помочь читателю понять ключевые идеи алгоритмов и структур данных и научиться реализовывать их программно. На этой основе книга также пытается показать живые проявления алгоритмов в сложном мире и раскрыть их красоту. Надеюсь, она окажется для тебя полезной.


Ru Docs Chapter Introduction Index (`ru/docs/chapter_introduction/index.md`)

Введение в алгоритмы

!!! abstract

text
Юная девушка танцует, окруженная вихрем данных. С подола ее платья струится мелодия алгоритмов.

Она приглашает вас на танец. Следуйте за ней, чтобы войти в мир алгоритмов, полный логики и красоты.

Ru Docs Chapter Preface Index (`ru/docs/chapter_preface/index.md`)

Предисловие

!!! abstract

text
Алгоритмы подобны прекрасной симфонии, а каждая строка кода льется подобно мелодии.

Пусть эта книга тихо зазвучит в вашем сознании и оставит после себя особую и глубокую мелодию.

Ru Docs Chapter Reference Index (`ru/docs/chapter_reference/index.md`)


icon: material/bookshelf

Список литературы

[1] Thomas H. Cormen и др. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick и др. Algorithms (4th Edition).

[4] Yan Weimin. Data Structures (C Language Edition).

[5] Deng Junhui. Data Structures (C++ Language Edition, 3rd Edition).

[6] Mark Allen Weiss. Пер. Chen Yue. Data Structures and Algorithm Analysis: Java Description (3rd Edition).

[7] Cheng Jie. A Plainspoken Guide to Data Structures.

[8] Wang Zheng. The Beauty of Data Structures and Algorithms.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang и др. Dive into Deep Learning.


Ru Docs Chapter Searching Index (`ru/docs/chapter_searching/index.md`)

Поиск

!!! abstract

text
Поиск - это движение в неизвестность: иногда приходится пройти каждый уголок пространства, а иногда удается быстро найти цель.

В этом пути каждый новый шаг может привести к ответу, которого мы не ожидали.

Ru Docs Chapter Sorting Index (`ru/docs/chapter_sorting/index.md`)

Сортировка

!!! abstract

text
Сортировка упорядочивает хаотичные данные и позволяет быстрее находить закономерности.

За кажущейся простотой скрывается целая группа алгоритмов с разными достоинствами и ограничениями.

Ru Docs Chapter Stack And Queue Index (`ru/docs/chapter_stack_and_queue/index.md`)

Стек и очередь

!!! abstract

text
Стек и очередь - две базовые линейные структуры данных.

Они соответственно воплощают принципы «последним пришел - первым вышел» и «первым пришел - первым вышел».

Ru Docs Chapter Tree Index (`ru/docs/chapter_tree/index.md`)

Деревья

!!! abstract

text
Высокое дерево полно жизни: мощные корни, густая листва и раскидистые ветви.

Оно наглядно показывает нам живую форму данных, построенную на принципе «разделяй и властвуй».

Zh Hant Docs Chapter Array And Linkedlist Index (`zh-hant/docs/chapter_array_and_linkedlist/index.md`)

陣列與鏈結串列

!!! abstract

text
資料結構的世界如同一堵厚實的磚牆。

陣列的磚塊整齊排列,逐個緊貼。鏈結串列的磚塊分散各處,連線的藤蔓自由地穿梭於磚縫之間。

Zh Hant Docs Chapter Backtracking Index (`zh-hant/docs/chapter_backtracking/index.md`)

回溯

!!! abstract

text
我們如同迷宮中的探索者,在前進的道路上可能會遇到困難。

回溯的力量讓我們能夠重新開始,不斷嘗試,最終找到通往光明的出口。

Zh Hant Docs Chapter Computational Complexity Index (`zh-hant/docs/chapter_computational_complexity/index.md`)

複雜度分析

!!! abstract

text
複雜度分析猶如浩瀚的演算法宇宙中的時空嚮導。

它帶領我們在時間與空間這兩個維度上深入探索,尋找更優雅的解決方案。

Zh Hant Docs Chapter Data Structure Index (`zh-hant/docs/chapter_data_structure/index.md`)

資料結構

!!! abstract

text
資料結構如同一副穩固而多樣的框架。

它為資料的有序組織提供了藍圖,演算法得以在此基礎上生動起來。

Zh Hant Docs Chapter Divide And Conquer Index (`zh-hant/docs/chapter_divide_and_conquer/index.md`)

分治

!!! abstract

text
難題被逐層拆解,每一次的拆解都使它變得更為簡單。

分而治之揭示了一個重要的事實:從簡單做起,一切都不再複雜。

Zh Hant Docs Chapter Dynamic Programming Index (`zh-hant/docs/chapter_dynamic_programming/index.md`)

動態規劃

!!! abstract

text
小溪匯入河流,江河匯入大海。

動態規劃將小問題的解彙集成大問題的答案,一步步引領我們走向解決問題的彼岸。

Zh Hant Docs Chapter Graph Index (`zh-hant/docs/chapter_graph/index.md`)

圖

!!! abstract

text
在生命旅途中,我們就像是一個個節點,被無數看不見的邊相連。

每一次的相識與相離,都在這張巨大的網路圖中留下獨特的印記。

Zh Hant Docs Chapter Greedy Index (`zh-hant/docs/chapter_greedy/index.md`)

貪婪

!!! abstract

text
向日葵朝著太陽轉動,時刻追求自身成長的最大可能。

貪婪策略在一輪輪的簡單選擇中,逐步導向最佳答案。

Zh Hant Docs Chapter Hashing Index (`zh-hant/docs/chapter_hashing/index.md`)

雜湊表

!!! abstract

text
在計算機世界中,雜湊表如同一位聰慧的圖書管理員。

他知道如何計算索書號,從而可以快速找到目標圖書。

Zh Hant Docs Chapter Heap Index (`zh-hant/docs/chapter_heap/index.md`)

堆積

!!! abstract

text
堆積就像是山嶽峰巒,層疊起伏、形態各異。

座座山峰高低錯落,而最高的山峰總是最先映入眼簾。

Zh Hant Docs Chapter Hello Algo Index (`zh-hant/docs/chapter_hello_algo/index.md`)


comments: true icon: material/rocket-launch-outline

序

幾年前,我在力扣上分享了“劍指 Offer”系列題解,受到了許多讀者的鼓勵和支持。在與讀者交流期間,我最常被問的一個問題是“如何入門演算法”。逐漸地,我對這個問題產生了濃厚的興趣。

兩眼一抹黑地刷題似乎是最受歡迎的方法,簡單、直接且有效。然而刷題就如同玩“掃雷”遊戲,自學能力強的人能夠順利將地雷逐個排掉,而基礎不足的人很可能被炸得滿頭是包,並在挫折中步步退縮。通讀教材也是一種常見做法,但對於面向求職的人來說,畢業論文、投遞簡歷、準備筆試和面試已經消耗了大部分精力,啃厚重的書往往變成了一項艱鉅的挑戰。

如果你也面臨類似的困擾,那麼很幸運這本書“找”到了你。本書是我對這個問題給出的答案,即使不是最優解,也至少是一次積極的嘗試。本書雖然不足以讓你直接拿到 Offer,但會引導你探索資料結構與演算法的“知識地圖”,帶你瞭解不同“地雷”的形狀、大小和分佈位置,讓你掌握各種“排雷方法”。有了這些本領,相信你可以更加自如地刷題和閱讀文獻,逐步構建起完整的知識體系。

我深深贊同費曼教授所言:“Knowledge isn't free. You have to pay attention.”從這個意義上看,這本書並非完全“免費”。為了不辜負你為本書所付出的寶貴“注意力”,我會竭盡所能,投入最大的“注意力”來完成本書的創作。

本人自知學疏才淺,書中內容雖然已經過一段時間的打磨,但一定仍有許多錯誤,懇請各位老師和同學批評指正。

{ class="cover-image" }

text
<h2 style="margin-top: 0.8em; margin-bottom: 0.8em;">Hello,演算法!</h2>

計算機的出現給世界帶來了巨大變革,它憑藉高速的計算能力和出色的可程式設計性,成為了執行演算法與處理資料的理想媒介。無論是電子遊戲的逼真畫面、自動駕駛的智慧決策,還是 AlphaGo 的精彩棋局、ChatGPT 的自然互動,這些應用都是演算法在計算機上的精妙演繹。

事實上,在計算機問世之前,演算法和資料結構就已經存在於世界的各個角落。早期的演算法相對簡單,例如古代的計數方法和工具製作步驟等。隨著文明的進步,演算法逐漸變得更加精細和複雜。從巧奪天工的匠人技藝、到解放生產力的工業產品、再到宇宙執行的科學規律,幾乎每一件平凡或令人驚歎的事物背後,都隱藏著精妙的演算法思想。

同樣,資料結構無處不在:大到社會網路,小到地鐵線路,許多系統都可以建模為“圖”;大到一個國家,小到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下;羽毛球筒則如同“佇列”,一端放入、另一端取出;字典就像一個“雜湊表”,能夠快速查詢目標詞條。

本書旨在透過清晰易懂的動畫圖解和可執行的程式碼示例,使讀者理解演算法和資料結構的核心概念,並能夠透過程式設計來實現它們。在此基礎上,本書致力於揭示演算法在複雜世界中的生動體現,展現演算法之美。希望本書能夠幫助到你!


Zh Hant Docs Chapter Introduction Index (`zh-hant/docs/chapter_introduction/index.md`)

初識演算法

!!! abstract

text
一位少女翩翩起舞,與資料交織在一起,裙襬上飄揚著演算法的旋律。

她邀請你共舞,請緊跟她的步伐,踏入充滿邏輯與美感的演算法世界。

Zh Hant Docs Chapter Preface Index (`zh-hant/docs/chapter_preface/index.md`)

前言

!!! abstract

text
演算法猶如美妙的交響樂,每一行程式碼都像韻律般流淌。

願這本書在你的腦海中輕輕響起,留下獨特而深刻的旋律。

Zh Hant Docs Chapter Reference Index (`zh-hant/docs/chapter_reference/index.md`)


icon: material/bookshelf

參考文獻

[1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick, et al. Algorithms (4th Edition).

[4] 嚴蔚敏. 資料結構(C 語言版).

[5] 鄧俊輝. 資料結構(C++ 語言版,第三版).

[6] 馬克 艾倫 維斯著,陳越譯. 資料結構與演算法分析:Java語言描述(第三版).

[7] 程傑. 大話資料結構.

[8] 王爭. 資料結構與演算法之美.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang, et al. Dive into Deep Learning.


Zh Hant Docs Chapter Searching Index (`zh-hant/docs/chapter_searching/index.md`)

搜尋

!!! abstract

text
搜尋是一場未知的冒險,我們或許需要走遍神秘空間的每個角落,又或許可以快速鎖定目標。

在這場尋覓之旅中,每一次探索都可能得到一個未曾料想的答案。

Zh Hant Docs Chapter Sorting Index (`zh-hant/docs/chapter_sorting/index.md`)

排序

!!! abstract

text
排序猶如一把將混亂變為秩序的魔法鑰匙,使我們能以更高效的方式理解與處理資料。

無論是簡單的升序,還是複雜的分類排列,排序都向我們展示了資料的和諧美感。

Zh Hant Docs Chapter Stack And Queue Index (`zh-hant/docs/chapter_stack_and_queue/index.md`)

堆疊與佇列

!!! abstract

text
堆疊如同疊貓貓,而佇列就像貓貓排隊。

兩者分別代表先入後出和先入先出的邏輯關係。

--- METRICS ---