
算法王
文章平均质量分 87
超华东算法王
微信号:yoggyzh
重磅推出:更新ing:Java难点解读,百战大厂面试; 即将更新系列:自传统编程:rust语言之旅,go语言之旅,c#语言之旅,swift语言之旅,oc语言之旅,Lua语言之旅 黑皮书之旅1:算法导论,neo4j之旅,redis之旅;python高级:opencv3.0,chatgpt,LLM,python-WEB,数据开发,web安全,SQL高级,大数据基础,linux高级,hadoop技术栈,hive
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
世界上最难的排序算法-宇宙排序
粒子的“运动”可以通过以下方式模拟:基于当前的相互作用力,调整其速度,改变其位置:Δv=Fij×Δt\Deltav=F_{ij}\times\Deltatxi(t+Δt)=xi(t)+vi(t)×Δtx_i(t+\Deltat)=x_i(t)+v_i(t)\times\Deltat其中,由于宇宙排序的本质是通过粒子间的相互作用来逐步调整顺序,所以其时间复杂度非常高。粒子的相互作用力将基于数据的相对大小,较小的元素会通过吸引力向较大的元素靠拢,最终形成一个有序的结构。原创 2025-01-19 23:21:53 · 343 阅读 · 0 评论 -
【算法王-5】主定理证明-MIT Charles教授亲授
情况 1:当 f(n)=O(nd)f(n) = O(n^d),其中 d原创 2024-11-29 20:33:03 · 1068 阅读 · 0 评论 -
【算法王season1大结局-10】数据结构·超-红黑树三部曲-3:删除操作
红黑树的删除操作涉及多种情况,通常需要根据节点的颜色以及兄弟节点的颜色来决定旋转和颜色调整的策略。通过旋转、颜色翻转和传递黑色节点,我们可以保证删除操作后树的平衡。图示可以帮助更清晰地理解每个步骤和如何通过旋转和颜色调整恢复红黑树的性质。旋转:通过旋转节点来改变树的结构,以便平衡树的高度。颜色调整:通过修改节点颜色来恢复红黑树的性质,确保黑色节点数量一致,并避免两个连续的红色节点。通过这些操作,红黑树能够保持平衡,确保查找、插入和删除操作的时间复杂度始终是对数级别 O(logn)O(\log n)。原创 2024-11-29 20:47:49 · 701 阅读 · 0 评论 -
【算法王-9】数据结构·超-红黑树三部曲-2:插入操作
插入节点:节点插入过程中首先按二叉查找树的规则插入节点,并设置节点为红色。修复不平衡检查插入节点的父节点颜色。如果父节点是红色,则会违反红黑树的性质,需要通过旋转和颜色调整来恢复平衡。根据父节点和叔叔节点的颜色,选择进行旋转、颜色翻转或递归修复。保持红黑树性质:插入操作完成后,根节点保持为黑色,树的黑色高度保持一致,且没有相邻的红色节点。插入操作的时间复杂度是 O(logn)O(\log n),因为红黑树的高度是对数级别的。颜色翻转。原创 2024-11-29 20:45:07 · 956 阅读 · 0 评论 -
【算法王-8】数据结构·超-红黑树三部曲-1:旋转操作
红黑树的旋转操作(包括左旋和右旋)是保持树结构平衡的关键。旋转能够通过局部调整树的结构,确保插入和删除操作后,红黑树仍然满足其平衡条件。红黑树的平衡性保证了其操作(查找、插入、删除)的时间复杂度始终保持在 O(logn)O(\log n),因此红黑树在许多应用中得到了广泛使用,如C++的STL中的std::map和std::set,以及Java的TreeMap和TreeSet等。原创 2024-11-29 20:42:49 · 857 阅读 · 0 评论 -
【算法王-7】数据结构·超-完全哈希表
在完全散列的情境下,假设我们有一个固定大小的元素集 S={e1,e2,…,en}S = \{e_1, e_2, \dots, e_n\},我们希望通过散列函数将每个元素映射到哈希表中的唯一位置。完全散列的目标是使得所有元素都有唯一的哈希值,即对于所有 i≠ji \neq j,都有:这意味着所有的元素都将被哈希到不同的槽中,没有任何两个元素的哈希值冲突。完全散列是一种确保哈希表没有哈希冲突的技术,它通过构建多级哈希表,确保每个元素在哈希表中都有唯一的槽,从而在查找时能够保证常数时间的复杂度。原创 2024-11-29 20:41:56 · 552 阅读 · 0 评论 -
【算法王-6】指示器随机变量-概率论在算法的运用
指示器随机变量 IAI_A 是一个随机变量,用来表示事件 AA 是否发生。它的取值通常是二值的,定义如下:IA={1,如果事件 A 发生0,如果事件 A 不发生I_A = \begin{cases} 1, & \text{如果事件 } A \text{ 发生} \\ 0, & \text{如果事件 } A \text{ 不发生} \end{cases}其中,AA 是某个事件,IAI_A 是对应的指示器随机变量。指示器随机变量是一个非常简单但非常有用的概念,用于表示事件的发生或不发生。原创 2024-11-29 20:34:49 · 714 阅读 · 0 评论 -
【算法王-4】用主方法求解递归式-MIT教授亲授
主定理提供了一个快速求解分治型递归式的方法。通过比较 f(n)f(n) 和 nlogban^{\log_b a} 的增长速度,我们可以快速得出递归式的时间复杂度。情况 1:如果 f(n)=O(nd)f(n) = O(n^d),其中 d原创 2024-11-29 20:31:58 · 810 阅读 · 0 评论 -
【算法王-3】用递归树法求解递归式
递归树方法通过可视化递归的展开过程,帮助我们理解每一层的工作量并求解递归式的时间复杂度。每一层的工作量通常是根据递归式的系数来计算的,树的高度由问题的规模决定。对于常见的递归式,递归树方法通常能够直观地得出复杂度结果。原创 2024-11-29 20:29:14 · 1099 阅读 · 0 评论 -
【算法王-2】代入法求递归式
步骤:首先猜测一个解的形式,然后代入递归式,简化表达式,最后验证该解是否成立。适用场景:代入法适用于大部分简单的递归式,尤其是分治型的递归(如归并排序、快速排序等),但有时也可能需要通过数学归纳法来证明。局限性:对于复杂的递归式,代入法可能不容易找到合适的猜测解,或者代入后的表达式比较复杂。在这种情况下,可能需要其他方法(如主定理)来求解递归式。代入法是求解递归式的一种基本方法,在许多经典问题中都非常有效,尤其是在算法分析中常常使用它来估计算法的时间复杂度。原创 2024-11-29 20:26:16 · 433 阅读 · 0 评论 -
【算法王-1】Strassen求矩阵乘法
Strassen算法通过分治法将矩阵乘法的时间复杂度从 O(n3)O(n^3) 降低到 O(n2.81)O(n^{2.81}),这是矩阵乘法领域的一个重大突破。尽管它在某些情况下会受到内存和数值稳定性的限制,但在处理大规模矩阵时,仍然是一个非常有用的算法。原创 2024-11-29 20:23:33 · 1096 阅读 · 0 评论