
数据结构与算法
文章平均质量分 94
大厂实用算法总结
shinelord明
北方待了10多年,北京六年多工作时间。先后在北京大唐电信,爱奇艺,京东等企业从事java开发、软件开发、与大数据开发、设计等相关工作。18年回重庆,在一家互联网金融公司,从事后端开发与大数据相关工作。
展开
-
【软件设计】23 种设计模式解析与实践指南
掌握多种设计模式,能够让开发者在面对不同的项目需求时,灵活地选择合适的模式,从而提高软件的质量和开发效率。设计模式(Design Pattern)是软件开发中反复出现的问题的解决方案,由 Erich Gamma 等四人组(GoF)在 1994 年系统化提出。文档编辑器(树形结构管理 + 格式装饰 + 保存策略 + 实时预览)。原创 2025-03-10 09:52:33 · 1687 阅读 · 27 评论 -
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。原创 2025-03-06 00:27:37 · 880 阅读 · 13 评论 -
【再谈设计模式】备忘录模式~对象状态的守护者
备忘录模式属于行为型设计模式。它的主要目的是在不破坏对象封装性的前提下,捕获并外部化一个对象的内部状态,以便之后可以将该对象恢复到这个状态。原发器(Originator):创建一个备忘录,用于记录当前时刻它的内部状态。原发器还可以使用备忘录来恢复其内部状态。备忘录(Memento):存储原发器对象的内部状态。备忘录应该防止原发器以外的其他对象访问其内部状态。负责人(Caretaker):负责保存备忘录,但不能对备忘录的内容进行操作或检查。原创 2025-03-02 23:06:15 · 969 阅读 · 6 评论 -
【再谈设计模式】迭代器模式~遍历集合元素的利器
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。简单来说,就是将遍历的逻辑从被遍历的对象中分离出来,放入一个专门的迭代器对象中。这样,不同的集合对象可以复用相同的迭代器逻辑,而集合对象本身只需要关注自身的数据存储和管理。原创 2025-02-19 11:19:59 · 1320 阅读 · 41 评论 -
【再谈设计模式】中介者模式 - 协调对象间交互的枢纽
中介者模式定义了一个中介对象来封装一组对象之间的交互方式。中介者使得各对象之间不需要显式地相互引用,从而降低了它们之间的耦合度。它通过将对象之间的交互逻辑集中到中介者对象中,使得系统的结构更加清晰,易于维护和扩展。原创 2025-02-10 16:37:20 · 1112 阅读 · 33 评论 -
【再谈设计模式】状态模式~对象行为的状态驱动者
状态模式属于行为型设计模式。它将对象的行为封装在不同的状态类中,使得对象在不同的状态下表现出不同的行为。上下文(Context):这是一个包含状态对象的类,它定义了客户感兴趣的接口,并维护一个具体状态对象的引用。上下文将操作委托给当前的状态对象来处理。抽象状态(State):这是一个抽象类或者接口,它定义了一个特定状态下的行为接口。所有具体的状态类都实现这个接口。具体状态(Concrete State):这些是实现抽象状态接口的类,每个具体状态类实现了与该状态相关的行为。原创 2025-02-08 17:47:00 · 950 阅读 · 26 评论 -
【再谈设计模式】命令模式~封装请求的指挥者
命令模式是一种行为设计模式,它将请求封装成独立的对象,使得可以使用不同的请求、队列请求、记录请求历史以及支持可撤销的操作。这种模式在软件工程中被广泛应用,特别是在需要对行为进行记录、撤销/重做或事务处理等场景。原创 2025-02-06 13:17:55 · 1281 阅读 · 7 评论 -
【再谈设计模式】职责链模式~串联请求处理者的链条
职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。在职责链模式中,通常会创建一个由多个处理对象组成的链,每个处理对象都包含对下一个处理对象的引用。当一个请求被发送到链中的第一个处理对象时,这个对象会先检查自己是否能够处理该请求,如果可以则处理,否则将请求转发给链中的下一个处理对象,依此类推,直到请求被处理或者到达链的末尾。原创 2025-01-25 17:49:45 · 1548 阅读 · 17 评论 -
【再谈设计模式】观察者模式~对象间依赖关系的信使
观察者模式定义了对象之间的一种一对多依赖关系。其中有一个被观察的对象(称为主题Subject)和多个观察该对象的观察者(Observer)。主题对象负责维护一组观察者对象,并在自身状态发生改变时通知所有观察者。这种模式使得对象之间的耦合度降低,主题和观察者可以独立地进行扩展和修改。原创 2025-01-06 18:26:46 · 1349 阅读 · 18 评论 -
【再谈设计模式】组合模式~层次构建的多面手
组合模式是一种结构型设计模式,它允许将对象组合成树形结构来表示“部分 - 整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。在组合模式中,有两种基本类型的对象:叶节点(Leaf)和组合节点(Composite)。叶节点是没有子节点的对象,而组合节点可以包含叶节点和其他组合节点。原创 2024-12-09 06:00:00 · 1799 阅读 · 61 评论 -
【再谈设计模式】装配器模式~复杂结构构建的巧匠
装配器设计模式是一种创建复杂对象的设计模式,它将对象的构建过程从对象本身分离出来,通过一个装配器(Builder)来逐步构建复杂对象的各个部分,最终组装成完整的对象。这种模式允许我们按照特定的步骤和顺序构建对象,并且可以在构建过程中对各个部分进行定制化操作。例如,在构建一个复杂的汽车对象时,我们可以先构建引擎部分,然后是车身部分,接着是内饰部分,最后将这些部分组装在一起形成完整的汽车。原创 2024-11-28 19:00:00 · 2707 阅读 · 0 评论 -
【再谈设计模式】代理模式~对象访问的幕后管家
代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在代理模式中,存在一个代理对象和一个真实对象,代理对象和真实对象实现相同的接口,客户端与代理对象进行交互,代理对象在适当的时候调用真实对象的方法。原创 2024-11-25 18:03:31 · 650 阅读 · 0 评论 -
【再谈设计模式】适配器模式~接口兼容的桥梁
适配器设计模式属于结构型设计模式。它的主要作用是将一个类的接口转换为另一个接口,使原本由于接口不兼容而不能一起工作的类能够协同工作。可以把适配器想象成一个中间件,它包裹着一个已有的类,对外提供一个符合目标需求的新接口。原创 2024-11-20 23:22:22 · 1708 阅读 · 0 评论 -
【再谈设计模式】抽象工厂模式~对象创建的统筹者
抽象工厂设计模式是一种创建对象的设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。简单来说,抽象工厂模式就像是一个工厂的抽象层,这个抽象层定义了创建多种不同类型产品的方法,但不涉及具体产品的创建细节。原创 2024-11-13 21:50:23 · 1002 阅读 · 25 评论 -
【再谈设计模式】建造者模式~对象构建的指挥家
建造者设计模式在处理复杂对象创建方面有着独特的优势,通过合理的运用可以提高代码的质量和可维护性,并且在需要定制化创建对象的场景下非常实用。原创 2024-11-10 22:19:29 · 1044 阅读 · 31 评论 -
【再谈设计模式】原型模式~复制的魔法师
原型模式是一个强大的设计模式,适用于需要频繁创建相似对象的场景。通过理解原型模式的基本概念、适用场景、优缺点以及实现方式,开发者可以在实际项目中灵活运用这一模式,提高代码的可维护性和性能。原创 2024-11-02 14:52:20 · 1293 阅读 · 23 评论 -
【再谈设计模式】单例模式~唯一性的守护者
单例模式的核心思想是限制一个类仅能实例化一次,并提供一个全局访问点。这样可以避免重复实例化导致的资源浪费和状态不一致的问题。原创 2024-10-27 18:52:28 · 1342 阅读 · 4 评论 -
【C++】C++语言知识总结浅析
C++是一种广泛使用的编程语言,因其灵活性和强大的功能而受到开发者的青睐。C++的编程思想、发展历史、版本管理工具、运行原理、数据类型、应用场景、桌面程序开发框架、语言优势、具体工具与框架、应用示例、嵌入式与算法场景以及在大厂中的应用。原创 2024-10-21 00:28:26 · 1391 阅读 · 15 评论 -
【算法】JAVA算法库
java算法库总结,以及代码示例。原创 2023-06-09 11:48:53 · 321 阅读 · 0 评论 -
【算法】机器学习几大算法总结
机器学习十大算法总结:一、朴素贝叶斯二、决策树三、随机森林四、梯度提升树五、逻辑回归六、多层感知机七、因子分解机八、卷积神经网络九、循环神经网络十、变形金刚 等。原创 2023-12-11 00:46:08 · 1386 阅读 · 0 评论 -
【算法】一种算法分类方式及其应用
在计算机科学领域,算法是解决问题的有效方法,而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法,包括按设计思想、问题类型、数据结构和应用领域等,每一类算法会对应有其典型和实际应用。算法的出现是为了解决问题和简化复杂的任务。它们提供了一种系统的方法来执行特定的计算或操作,可以应用于各种领域,包括计算机科学、数学、工程、经济学等。原创 2024-05-04 23:57:39 · 2181 阅读 · 1 评论 -
【算法】动态规划
动态规划是一种强大的算法设计技术,适用于解决许多复杂的最优化问题。通过合理地设计状态转移方程和存储子问题的结果,动态规划能够显著提高算法的效率。在实际应用中,动态规划可以帮助我们解决背包问题、最短路径问题等多种场景,具有广泛的应用前景。原创 2024-07-30 17:33:58 · 1864 阅读 · 0 评论 -
【算法】蚁群算法
蚁群算法是一种强大的优化工具,广泛应用于多个领域。通过模拟蚂蚁觅食的机制,蚁群算法能够有效地解决组合优化问题。开发者可以根据具体问题需要,灵活调整算法参数,并选择合适的编程语言实现。原创 2024-08-16 17:41:32 · 7076 阅读 · 17 评论 -
【算法】一致性哈希
一致性哈希算法(Consistent Hashing)是一种分布式算法,因其出色的分布式数据存储特性,被广泛应用于缓存、负载均衡、数据库分片等场景。一致性哈希算法的核心思想是将数据映射到一个固定范围的哈希环上,服务器节点也映射到这个哈希环上。每个物理节点对应多个虚拟节点,数据映射到虚拟节点上,从而实现数据的均匀分布。哈希环用于存储虚拟节点,节点映射表用于存储虚拟节点与物理节点的对应关系。一致性哈希算法使用一个长度为2^32的环形哈希空间,通常使用MD5或SHA-1等哈希函数将数据映射到这个空间。原创 2024-07-22 15:45:10 · 2147 阅读 · 0 评论 -
【算法】协同过滤
协同过滤算法是一种推荐系统核心技术,它通过分析用户之间的行为相似性或项目(如商品、电影等)的属性相似性来预测用户可能喜欢的项目。该算法分为两类:基于用户的协同过滤和基于项目的协同过滤。基于用户的协同过滤会寻找与目标用户行为相似的其他用户,并推荐这些用户喜欢的物品;而基于项目的协同过滤则是寻找相似的项目推荐给喜欢某个项目的其他用户。协同过滤的优势在于能够发掘潜在的用户喜好,提供个性化推荐,但其缺点是可能存在冷启动问题和数据稀疏问题。原创 2024-08-12 14:30:51 · 3390 阅读 · 1 评论 -
【算法】梯度下降
梯度下降算法是一种优化方法,用于最小化损失函数并找到模型参数的最佳值。其核心思想是通过迭代更新参数,沿着损失函数梯度的反方向逐步逼近最优解。在每次迭代中,算法计算损失函数相对于参数的梯度,然后根据设定的学习率调整参数值。梯度下降有多种变体,包括批量梯度下降(使用整个数据集计算梯度)、随机梯度下降(每次迭代使用单个样本)和小批量梯度下降(使用数据的小批量)。此外,动量法和自适应学习率算法(如Adam)可以提高收敛速度和稳定性。选择合适的梯度下降方法和调整超参数对于模型训练的效率和效果至关重要。原创 2024-08-13 14:44:03 · 5084 阅读 · 14 评论 -
【算法】卡尔曼滤波
卡尔曼滤波是一种强大的递归滤波器,适用于处理线性或非线性动态系统中的不确定性。卡尔曼滤波的原理、实现和应用场景,多语言代码示例。在实际应用中,卡尔曼滤波可以帮助我们准确地估计系统状态,提高决策和控制的精度。随着技术的发展,卡尔曼滤波及其变种在各个领域的应用将更加广泛。原创 2024-07-31 16:49:23 · 5703 阅读 · 1 评论 -
【算法】装箱问题
Bin-Packing算法是解决资源优化分配问题的算法,旨在将多个物品有效地装入有限数量的容器中,以减少使用的容器数量。常见的算法包括First Fit、Next Fit、Best Fit等,它们通过不同的策略来实现物品的装箱,如按顺序放入第一个适合的容器或选择剩余空间最小的容器。这类算法在计算机科学、物流和生产制造等领域有广泛应用,能够提高资源利用率和操作效率。原创 2024-08-05 14:49:17 · 2697 阅读 · 1 评论 -
【算法】分布式共识Paxos
Paxos算法是由莱斯利·兰伯特(Leslie Lamport)在1990年提出的一种解决分布式系统中一致性问题的算法。原创 2024-07-25 15:26:26 · 1336 阅读 · 0 评论 -
【算法】布隆过滤器
布隆过滤器是一种用来快速判断一个元素是否属于一个集合的数据结构,它通过牺牲一定的准确性来换取空间和时间的效率。原创 2024-07-24 14:07:28 · 1655 阅读 · 0 评论 -
【算法】道格拉斯
道格拉斯-普克算法是一种高效的折线简化算法,广泛应用于GIS、图形处理和数据压缩等领域。通过合理的实现和应用,可以有效地提高系统的性能和用户体验。希望本文能够帮助您理解并实现该算法。原创 2024-07-29 23:37:19 · 9266 阅读 · 0 评论 -
【算法】傅里叶变换
傅里叶变换的基本思想是将一个时域信号分解为多个不同频率的正弦和余弦波的叠加。:相比DFT,FFT通过减少乘法次数来提高计算效率,时间复杂度降低到 𝑂(𝑁log𝑁)O(NlogN)。在实际应用中,例如一个音频处理服务,可以使用傅里叶变换来实现频谱分析或音频特征提取。其中,𝑋[𝑘]X[k] 是信号 𝑥[𝑛]x[n] 的傅里叶变换,𝑁N 是样本点数。:基于定义进行计算,时间复杂度为 𝑂(𝑛2)O(n2),适用于小规模数据。:最常用的高效算法,时间复杂度为 𝑂(𝑛log𝑛)O(nlogn)。原创 2024-07-26 10:04:26 · 3908 阅读 · 1 评论 -
【算法】遗传算法
遗传算法是一种灵活强大的优化工具,适用于多个领域。通过不断演化和选择,可以找到较优的解。在具体实现时,需综合考虑问题的实际需求,合理设计适应度函数和遗传操作。由于遗传算法的随机性,可能需要多次运行以找到较优解。希望这篇博文能帮助你更好地理解和实现遗传算法。原创 2024-09-18 11:33:03 · 2500 阅读 · 9 评论 -
【算法】模拟退火
模拟退火算法(Simulated Annealing, SA)是一种启发式全局优化算法,灵感来源于固体退火原理。在冶金学中,退火是将金属加热到一定温度,再缓慢冷却以消除内部应力,使金属结构达到稳定状态。在优化问题中,模拟退火算法通过接受一定概率的“坏解”(即解质量下降的情况),以跳出局部最优,最终逼近全局最优解。原创 2024-09-09 15:52:08 · 8121 阅读 · 14 评论 -
【算法】PageRank
PageRank算法由拉里·佩奇和谢尔盖·布林在1996年提出,旨在为网页排序并评估其重要性。算法的核心思想是认为一个网页的重要性与指向它的网页的重要性成正比,一个网页被多个重要网页链接到,意味着它也应该被视为重要网页。原创 2024-09-03 15:59:48 · 2928 阅读 · 3 评论 -
【算法】令牌桶算法
令牌桶算法是一种有效的流量控制技术,能够平滑流量并限制突发请求。通过在桶中动态生成和管理令牌来限制数据发送速率。算法的核心原理是设置桶的容量和令牌生成速率,从而控制请求处理的速率,适用于网络流量控制和API限流等场景。相比其他算法(如漏桶算法、固定窗口计数等),令牌桶能更灵活地应对突发流量。原创 2024-08-20 00:00:00 · 2221 阅读 · 1 评论 -
【算法】蒙特卡洛模拟
蒙特卡洛模拟是一种强大的工具,适用于多种复杂问题的求解。通过对随机性和统计学的利用,它能够在不确定性中提供有价值的洞见。原创 2024-08-29 17:42:52 · 1888 阅读 · 1 评论 -
【算法】演员~评论家方法
演员-评论家方法是一种强大的强化学习算法,结合了策略和价值函数的优点,适用于多种复杂的环境。原创 2024-08-30 17:12:45 · 1897 阅读 · 0 评论 -
【算法】粒子群优化
粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。PSO模拟鸟群觅食行为,通过一组“粒子”在解空间中搜索最优解。每个粒子代表一个潜在解,粒子根据自身的历史最佳位置和群体的历史最佳位置调整自己的位置,从而逐步逼近全局最优解。PSO的主要优势在于其简单易懂的结构和较少的参数设置,适用于多种复杂优化问题,如函数优化、机器学习和数据挖掘等。它能够有效处理非线性和高维问题,收敛速度较快。然而,PSO也存在一些缺点,如易陷入局部最优解和对参数设置敏感等。在原创 2024-08-23 19:08:21 · 3233 阅读 · 5 评论