
算法
文章平均质量分 91
蒙娜丽宁
华为HDE(HUAWEI Developer Experts),UnityMarvel创始人,开放原子基金会银牌讲师,51CTO学堂金牌讲师,IT畅销书作者。从事软件研究和开发超过20年,长期从事编译器、人工智能、Python、Go、JavaScript、Java及跨平台技术的研究和开发工作,曾出版超过40本IT图书。主要著作包括《Python从菜鸟到高手》、《Python爬虫从菜鸟到高手》、《奇妙的Python:神奇代码漫游之旅》。
展开
-
【C++算法】AVL树的平衡之美:从理论到C++高效实现
AVL树是一种自平衡二叉搜索树,解决了普通二叉搜索树在数据倾斜时的性能退化问题。本文深入探讨了AVL树的理论基础,包括平衡因子的定义、旋转操作的数学推导,并通过LaTeX公式分析其时间复杂度。接着,我们用C++实现了一个完整的AVL树,包括插入、删除和平衡调整的详细代码,附带中文注释以便理解。文章还探讨了性能优化策略,如减少递归开销和内存分配优化。此外,通过实验对比AVL树与普通二叉搜索树的性能,验证了其在动态数据插入和查询中的优势。本文适合对数据结构和C++编程感兴趣的读者,帮助他们掌握AVL树的实现细节原创 2025-03-08 20:55:33 · 857 阅读 · 0 评论 -
支持向量机的深度解析:从理论到C++实现
支持向量机(SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。本文详细探讨了SVM的理论基础,包括最大间隔分离超平面、软间隔和核技巧(Kernel Trick)的数学原理,并通过LaTeX公式推导其优化目标。接着,我们用C++实现了一个简单的线性SVM,包括梯度下降优化求解支持向量,并附带详细的中文注释。此外,文章介绍了核函数(如RBF核)的应用,以及如何通过软间隔处理非线性可分数据。实验部分对比了线性SVM与核SVM在不同数据集上的性能,分析了参数(如正则化系数C和核参数γ)对模型的影响。最后,原创 2025-03-08 20:50:50 · 792 阅读 · 0 评论 -
【算法】用C++实现A*算法
A*(A-Star)算法是一种广泛应用于路径规划和图搜索问题中的启发式搜索算法。它结合了Dijkstra算法的广度优先搜索和贪心最佳优先搜索的优点,通过引入启发式函数来估计从当前节点到目标节点的成本,从而有效地减少搜索空间。A*算法的核心思想是使用一个评估函数 `f(n) = g(n) + h(n)` 来选择下一个要扩展的节点。其中,`g(n)` 表示从起点到当前节点的实际代价,`h(n)` 是从当前节点到目标节点的估计代价(启发式函数),而 `f(n)` 则是总代价,表示从起点经过当前节点到达目标节点的估原创 2025-02-12 08:58:36 · 1615 阅读 · 0 评论 -
【算法】基于C语言的哈夫曼编码算法实现:原理、构建与代码详解
哈夫曼编码是一种高效的数据压缩算法,广泛应用于文本、图像和音频等数据的压缩。本文将深入讲解哈夫曼编码的工作原理,并使用C语言详细实现哈夫曼编码和解码算法。文章将从信息论的基础知识出发,逐步解释哈夫曼树的构建过程,并结合C语言代码,详细介绍如何通过树形结构来实现最优前缀编码,最终达到数据压缩的目的。原创 2025-02-12 08:50:03 · 1160 阅读 · 0 评论 -
【算法】Dijkstra算法的实现与优化:C语言实现最短路径算法
Dijkstra算法是计算图中某个顶点到其他所有顶点的最短路径的一种经典算法。该算法由计算机科学家Edsger Dijkstra于1956年提出,广泛应用于路由算法、网络优化、地图导航等领域。它的基本思想是,通过一个贪心策略,每次选择当前未处理的最短路径顶点,然后更新其邻居顶点的最短路径,直到处理所有顶点。原创 2025-02-09 13:45:41 · 1032 阅读 · 0 评论 -
【算法】快速排序算法的实现:C 和 C++ 版本
快速排序(Quick Sort)是由英国计算机科学家霍尔(C.A.R. Hoare)在1960年提出的一种高效的排序算法。它采用了分治法(Divide and Conquer)策略,通常具有很好的性能。在平均情况下,快速排序的时间复杂度为 O(n log n),但在最坏情况下可能退化为 O(n^2),不过可以通过优化策略(如随机化或三数取中法)来避免这种情况。原创 2025-02-09 13:37:13 · 612 阅读 · 0 评论 -
【C++】探索C++中的表达式模板:提高计算效率的高级技巧
本文深入探讨了C++中的表达式模板技术,展示了如何通过该技术优化数值计算,避免不必要的临时对象创建。表达式模板通过在编译时生成表达式树,延迟运算的执行,从而减少内存开销和计算时间。文章详细讲解了表达式模板的原理、递归模板的展开以及运算符重载的实现,并通过矩阵和向量运算示例展示了其在科学计算中的应用。尽管表达式模板带来了一定的代码复杂性和编译时间开销,但其在提升性能方面具有显著优势。原创 2024-10-24 10:15:00 · 943 阅读 · 0 评论 -
【C++语言】精妙的哈希算法:原理、实现与优化
哈希算法是一种将任意长度输入映射为固定长度输出的算法,广泛应用于数据检索、加密、缓存等领域。本文首先介绍了C++中常用的哈希函数,包括MD5和SHA-256,并讨论了哈希冲突的解决方法,如开放寻址法和链地址法。随后,本文探讨了哈希算法的优化策略,如选择合适的哈希函数、动态扩展哈希表、减少哈希冲突以及缓存优化等。最后,本文列举了哈希算法在数据库索引、缓存系统、密码学和文件校验等实际应用中的案例。本文旨在帮助读者深入理解并应用哈希算法,提高系统效率。原创 2024-10-22 10:00:00 · 2314 阅读 · 0 评论 -
【动画版】数据结构-B树【宁哥算法课堂】
【动画版】数据结构-B树【宁哥算法课堂】人物对白:李宁老师:小丽,很久没见了,最近在忙什么?小丽:最近学院的老师布置了一个大作业,让实现一个类似Oracle的关系数据库原型。李宁老师:Oracle可很复杂哦!小丽:当然不需要做整个Oracle数据库,只是做一个原型,可以对数据增删改,并且利用SQL查询出数据。小丽:关键是需要为字段添加索引。小丽:我现在正在犯愁,该如何为索引选择数据结构呢!李宁老师:如果只是实现,有很多数据结构都可以实现索引的功能。小丽:不行,麻省.原创 2020-05-18 10:16:59 · 1145 阅读 · 0 评论 -
算法君带你学算法:最长回文字符串
算法君带你学算法:最长回文字符串算法君:小白同学,给你出道算法题,看你小子算法能力有没有长进。算法小白:最近一直在研究算法,刷了很多算法题,正好活动活动大脑,来来来,赶快出题!算法君:听好了,题目是:求一个字符串中最长的回文字符串。算法小白:这个算法好像很简单,就是有一个概念不太明白,啥叫“回文字符串”。算法君:哈哈,你说的很简单,一定是题目的字数很少的意思。算法小白:哦,又被老大猜中...原创 2019-12-27 08:54:41 · 965 阅读 · 0 评论 -
Twitter算法面试题详解(Java实现)
近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案。原创 2013-11-01 19:37:23 · 8286 阅读 · 6 评论 -
世界上最早的算法:辗转相除法(求两个自然数最大公约数)
在数学界,辗转相除法,又称欧几里得算法,被认为是世界上最早的算法(公元前300年),该算法用于求两个最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题yⅠ和Ⅱ)中,而在中国则可以追溯至东汉出现的《九章算术》。 两个自然数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,12原创 2013-06-07 17:53:27 · 4766 阅读 · 1 评论 -
疯狂极客前传:用最快的速度设计一种新的编程语言
最近打算写一些列有趣、而且有一定难度的文章。这个系列的名字就叫《疯狂极客》,这一系列的文章大多数与计算机有密切的关系。包括制作编译器、制作OS、Android控制电路板、机器人的制作(通过Android、IOS等设备控制)等等。 源代码下载 在正式开始《疯狂极客》系列文章之前,先来热热身。用最短的时间设计一种简单,但好玩的编程语言CShell(不过不用担心,实现CShell解析器基原创 2013-03-13 07:52:30 · 2982 阅读 · 2 评论 -
百度面试题:求绝对值最小的数
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。算法实现的基本思路找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只原创 2013-01-29 14:54:06 · 3275 阅读 · 9 评论 -
创新工厂面试题详解:共打了多少鱼
最近看到一个创新工厂的面试题,很有意思,下面给出算法实现(Java代码)。如果哪位有更好的算法,请跟贴。 abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的分成5份,拿一份走了;然后cde都按上面的原创 2011-09-22 13:27:47 · 29919 阅读 · 125 评论 -
09考研数据结构试题的一种解法(Java版)
本文为原创,如需转载,请注明作者和出处,谢谢! 虽然研究生已毕业,但看到有一些难度的研究生考试题还是忍不住要做做,本文给出了09年研究生入学考试的一道数据结构题的Java实现。该题的描述如下图所示。 该题的两种实现一位朋友已经完成了,详见递归和非递归实现 。在本文将给出另外一种算法,该算法的空间复杂度为O(1),时间复杂度为O(n)。这在空间复杂度和时间复杂原创 2009-01-17 21:06:00 · 1907 阅读 · 1 评论