Skip to content

microwind/algorithms

Repository files navigation

AI编程:算法思想与数据结构知识库大全 | English

AI时代,我们更需要理解算法思想与数据结构,学习不同编程语言特性。

License Last Updated Build Status GitHub stars GitHub forks

本仓库旨在帮助大学生和程序员用不同编程语言来学习数据结构和经典算法思想,包括 CC++JavaPythonJavaScriptTypeScriptGo、`Rust等多种语言,提供充分注释说明。由简入深,让你充分理解算法与数据结构的原理,同时又能掌握不同编程语言的特点,助你从"编码执行者"转型为"AI驱动者"。

AI可以替代人工编码工作,但难以替代人的认知与思考。深入理解编程核心(算法+数据结构、设计模式+系统架构)将有助于我们更好地驾驭AI,让AI发挥更高的效率与价值。

表层的API、框架与应用方案日新月异,而数据结构、算法以及底层逻辑思维则历久弥新。表层技术需要快速学习、持续迭代;底层原理与思想则需要反复钻研与沉淀,从而持续提升认知。

🚀 本项目特点

  1. 多语言实现:涵盖 C、Java、Python、JavaScript、TypeScript、Go、Rust 等 多种编程语言
  2. 全面覆盖:包含排序、搜索、字符串处理、树、图、动态规划、贪心算法、回溯算法、位操作、网络流等各种经典算法
  3. 数据结构完整:涵盖数组、链表、栈、队列、树、堆、图、哈希表、集合、映射等核心数据结构
  4. 循序渐进:从入门指南到算法思想,再到具体实现和项目实践,逐一递进,形成完整学习路径
  5. 实践导向:提供丰富的实践项目和问题集,帮助理论联系实际

适合大学生与程序员学习

本项目将“概念理解 → 代码实现 → 对比语言 → 练习进阶”串成一条清晰路径,适合作为课程补充、自学路线或面试与工程能力提升的长期仓库。你可以获得:

  • 体系化学习路径:从入门到经典算法,再到题库与项目,循序渐进不走弯路。
  • 多语言对照:同一算法多语言实现,帮助理解语言差异与工程习惯。
  • 可实践与可复用:多数目录提供可运行代码与说明,方便作业、面试与项目中直接参考。
  • 强化基础与思维:重视复杂度分析与算法思想,提升解决问题的效率与正确性。

新手入门指南

如果你是编程新手算法初学者,建议从这里开始:

快速开始:完全新手建议按顺序阅读,有编程基础可直接看算法思想部分。

算法概览

常见的算法有哪些?

  • 文本查找:包括线性搜索、二分搜索、树形搜索、最大公共子序列、回文计算等,主要针对字符串查找。
  • 数学计算:包括进制转换、开平方、斐波那契数列、质因数分解、数字三角形等,主要进行数值计算。
  • 排序算法:包括冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数等,用于按顺序排列数据。
  • 其他算法:包括动态规划、贪心算法、分治算法、回溯算法、图算法(如广度优先搜索、深度优先搜索、Dijkstra算法、Kruskal算法等),此外还包括机器学习和人工智能算法,如分类算法、聚类算法、深度学习、强化学习等。

算法概览

常见算法思想

  • 贪心算法:一种通过每次选择局部最优解来期望得到全局最优解的方法。
  • 分治算法:将问题分解为较小的子问题,独立解决后再合并结果。
  • 动态规划:通过将复杂问题分解为更简单的重叠子问题来求解。
  • 回溯算法:通过逐步构建候选解并放弃那些无法满足条件的方案来解决问题。
  • 图算法:包括广度优先搜索、深度优先搜索、Dijkstra算法、Kruskal算法等,用于解决图相关问题。
  • 分支限界法:一种组合优化问题的求解方法,通过系统地探索搜索树的分支来解决问题。

详细请见:程序员需要掌握的算法思想大全

10大经典排序算法

排序算法 C C++ Java Py JS TS Go Rust Swift 适用场景
冒泡排序 bubble sort C C++ Java Py JS TS Go Rust Swift 适用于小规模数据排序,教学用途
插入排序 insert sort C C++ Java Py JS TS Go Rust Swift 适用于小规模数据,少量元素已基本有序的情况
选择排序 selection sort C C++ Java Py JS TS Go Rust Swift 适用于小规模数据,数据交换次数较少
堆排序 heap sort C C++ Java Py JS TS Go Rust Swift 适用于优先队列、TOP K问题
快速排序 quick sort C C++ Java Py JS TS Go Rust Swift 适用于一般排序场景,性能优异但不稳定
归并排序 merge sort C C++ Java Py JS TS Go Rust Swift 适用于大数据量排序,适合外部排序
计数排序 counting sort C C++ Java Py JS TS Go Rust Swift 适用于数据范围有限的整数排序
基数排序 radix sort C C++ Java Py JS TS Go Rust Swift 适用于大规模整数排序,如身份证号、手机号排序
桶排序 bucket sort C C++ Java Py JS TS Go Rust Swift 适用于数据范围均匀分布的排序
希尔排序 shell sort C C++ Java Py JS TS Go Rust Swift 适用于中等规模数据排序,适合半有序数据

📖 详细指南十大排序算法全解:多语言源码仓库

字符串搜索与查找

算法 C Java Py JS TS Go Rust Swift 适用场景
朴素搜索 C Java Python JS TS Go Rust 适用于小规模文本搜索
二分查找 C Java Python JS TS Go Rust Swift 适用于已排序数组的查找
KMP搜索 C Java Python JS TS Go Rust 适用于大规模文本搜索

树搜索与遍历

算法 C Java Py JS TS Go Rust 适用场景
二叉树遍历 C Java Python JS TS Go Rust 适用于树结构数据的遍历,如 XML 解析、文件系统遍历
C Java Python JS TS Go Rust 适用于优先队列、TOP K 问题
树遍历 C Java Python JS TS Go Rust 前序、中序、后序、层序遍历
树搜索 C Java Python JS TS Go Rust DFS、BFS、A* 搜索

图算法

算法 C Java Py JS TS Go Rust 适用场景
BFS 广度优先搜索 C Java Python JS TS Go Rust 最短路径、连通性检测
DFS 深度优先搜索 C Java Python JS TS Go Rust 拓扑排序、路径查找
Dijkstra 最短路径 C Java Python JS TS Go Rust 单源最短路径
拓扑排序 C Java Python JS TS Go Rust 任务调度、依赖关系

位操作

算法 C Java Py JS TS Go Rust 适用场景
位计数 C Java Python JS TS Go Rust 统计二进制中 1 的个数
最大异或对 C Java Python JS TS Go Rust 寻找最大异或值
2 的幂判断 C Java Python JS TS Go Rust 判断是否为 2 的幂
反转位 C Java Python JS TS Go Rust 反转二进制位

压缩算法详解

算法 C Java Py JS TS Go Rust 适用场景
Huffman编码 C Java Python JS TS Go Rust 适用于无损数据压缩、文件压缩
Run-Length Encoding C Java Python JS TS Go Rust 适用于简单重复数据压缩
LZ77算法 C Java Python JS TS Go Rust 适用于文本压缩、ZIP格式基础
LZW算法 C Java Python JS TS Go Rust 适用于GIF格式、文本压缩

加密算法详解

算法 C Java Py JS TS Go Rust 适用场景
AES加密 C Java Python JS TS Go Rust 适用于对称加密、数据保护
RSA加密 C Java Python JS TS Go Rust 适用于非对称加密、数字签名
SHA哈希 C Java Python JS TS Go Rust 适用于数据完整性校验、密码存储
凯撒密码 C Java Python JS TS Go Rust 适用于古典加密、教学演示

网络流算法

算法 C Java Py JS TS Go Rust 适用场景
Ford-Fulkerson C Java Python JS TS Go Rust 最大流问题
Edmonds-Karp C Java Python JS TS Go Rust Ford-Fulkerson 的 BFS 实现
最大流 C Java Python JS TS Go Rust 网络最大流问题
最小割 C Java Python JS TS Go Rust 网络最小割问题

质因数分解

语言 代码链接 复杂度 适用场景
C factor.c O(√n) 计算大整数的质因数分解
C++ factor.cpp O(√n) 适用于高效数学计算
JavaScript PrimeFactor.js O(√n) Web 端数论计算
TypeScript PrimeFactor.ts O(√n) 适用于前端或 Node.js 计算
Go factor.go O(√n) 适用于后端服务计算
Python factor.py O(√n) 适用于科学计算、数据分析
Java Factor.java O(√n) 适用于企业级应用计算
Kotlin factor.kt O(√n) 适用于 Android 和后端计算
Swift factor.swift O(√n) 适用于 iOS/macOS 开发
Objective-C factor.m O(√n) 适用于老版本 iOS/macOS
Rust factor.rs O(√n) 适用于高性能计算

数组列表去重复项

语言 代码链接 时间复杂度 适用场景
C unique.c O(n log n) 适用于嵌入式开发
Go unique.go O(n log n) 适用于高并发场景
JS unique.js O(n) 适用于前端数据处理
Python unique.py O(n) 适用于数据清洗、分析
Java UniqueArray.java O(n log n) 适用于企业级应用
TypeScript UniqueArray.ts O(n) 适用于前端 TypeScript 项目
Rust unique.rs O(n) 适用于高性能计算

递归

算法 代码链接 时间复杂度 空间复杂度 适用场景
简单递归 多语言实现 O(2^n) O(n) 适用于分治算法、树和图的遍历、回溯问题

数学计算

算法 代码链接 时间复杂度 空间复杂度 适用场景
数学计算 多语言实现 O(n) O(1) 适用于数论、加法、乘法、大整数计算、质因数分解、GCD、斐波那契等

日期与日历

算法 代码链接 时间复杂度 空间复杂度 适用场景
日期与日历 多语言实现 O(1) O(1) 适用于日期计算、闰年判断、星期计算、日期间隔、时间戳转换等

数据结构

数据结构是数据的组织和存储的方式,通过选择合适的数据结构,可以高效地处理数据。详见:数据结构概述

数据结构 描述 访问效率 插入/删除效率
Array (数组) 具有相同数据类型的元素集合,支持按索引随机访问 O(1) O(n)
Linked List (链表) 数据以链式结构存储,通过指针连接,分为单向链表、双向链表和循环链表 O(n) O(1) (头部) / O(n) (中间)
Tree (树) 树状数据集合,节点按层级关系组织,常见类型包括二叉树、二叉搜索树、平衡树等 O(log n) O(log n)
Heap (堆) 一种特殊的完全二叉树,满足堆序性(最大堆或最小堆),常用于优先队列 O(1) (取堆顶) O(log n)
Stack (栈) 后进先出 (LIFO) 的数据集合 O(1) O(1)
Queue (队列) 先进先出 (FIFO) 的数据集合 O(1) O(1)
Graph (图) 由节点(顶点)和边组成的图形数据结构,常见存储方式为邻接表或邻接矩阵 O(1) (邻接矩阵) / O(n) (邻接表) O(1) (邻接矩阵) / O(n) (邻接表)
Hash (散列) 通过哈希函数将键映射到存储位置的数据结构,支持快速查找、插入和删除 O(1) (均摊) O(1) (均摊)
Struct (结构体) 组合多种类型的数据,形成一个整体,常用于表示复杂对象 O(1) O(1)
List (列表) 有序集合,允许重复元素,支持索引访问 O(1) (末尾插入),O(n) (中间插入/删除) O(1) (索引访问),O(n) (查找)
Set (集合) 无序集合,不允许重复元素,支持高效查找 O(1) (哈希实现),O(log n) (树实现) O(1) (哈希实现),O(log n) (树实现)
Map (映射) 存储键值对的数据结构,支持快速查找、插入和删除 O(1) (哈希实现),O(log n) (树实现) O(1) (哈希实现),O(log n) (树实现)

实践项目

本项目提供丰富的实践项目,帮助将理论知识应用到实际场景中:

问题集

按难度分类的练习题,帮助巩固知识:


学习文档

AI时代程序员成长体系

AI时代,我们要从编码程序员转变成驱动AI的指挥官,告诉AI该怎么做,什么是好、什么是坏。

欢迎加入共建

仓库: https://github.com/microwind/algorithms 站点: https://microwind.github.io/algorithms

如果您对本项目感兴趣请加我,欢迎一起共建! If you are interested in this project, please add me on WeChat. Let’s build it together!

我是Jarry 李春平, 工作20多年的互联网程序员。

  • 📧 mail: jarryli@gmail.com or lichunping@buaa.edu.cn
  • 💬 wechat: springbuild
  • 🌟 如果这个项目对你有帮助,请给个 Star 支持一下!

About

🚀AI时代,人人都是算法思想工程师。本项目含各种数据结构与经典算法,充分举例说明,用C/Java/Python/JS/Go/Rust等不同语言实现,一边学算法一边学语言。助您打牢基础,彻底理解编程的本质,以便驾驭和用好AI。

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors