算法读书笔记——递归与分治策略

本文介绍了分治法的设计思想及其与递归算法的关系,通过阶乘函数、Fibonacci数列等实例展示了递归算法的应用,并提到了Ackerman函数及排列问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分治法的设计思想是将一个直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破分而治之。  由此产生了递归的概念,直接或间接的调用自身的算法称为递归算法。用函数自身给出的定义函数叫递归函数。递归函数应用有两类,第一类是本身就有固有的递归特性;第二类是有些问题用递归技术来处理可以使算法简捷易懂而且容易分析。

举例说明:

阶乘函数  算法描述 

int factorial(int n)
{
 if(n==0) return 1;
 return factorial(n-1);
 

}

Fibonacci 数列

int fibonacci (int n)
{
 if(n<=1) return 1;
 return fibonacci(n-1)+ fibonacci(n+2);
}

Ackerman 函数  (双递归函数)  A(n,m)的自变量m的每个值都定义了一个单变量函数,分析是限定n不变使m的子最小值0开始到又穷个值的结果与n的关系。

排列问题 求全排列Perm(X)  注意本方法一般不采用,如果被排列的数据中有重复的元素,就显得有些复杂了,如果有两个相同的就得再结果中减去(n-1)! ,如果有两个相同的,结果中减去??????

 

写到这里我暂时把这本王晓东的算法设计书放弃了,我现在学习的java语言,尽量看用java编写的算法书,可以事半功倍吧,于是又找到了Fank M.Carrano 著的《数据结构于算法分析》

 

加油  sucs…

 

 

 

### 算法学习笔记资料总结 #### 基础数据结构算法概述 常见的基础数据结构包括数组、链表、栈、队列、散列表、二叉树、堆、跳表、图以及 Tire 树等[^1]。这些数据结构构成了许多高级算法的基础。 对于初学者来说,理解并掌握基本的算法概念至关重要。例如递归、排序(快速排序、归并排序)、二分查找、搜索技术(广度优先搜索 BFS 和深度优先搜索 DFS),还有哈希算法、贪心策略分治方法、回溯技巧以及动态规划等。每种算法都有其特定的应用场景和时间复杂度分析,在实际开发过程中需灵活运用。 #### 复杂度分析的重要性 了解如何评估算法效率是非常重要的一步——即学会计算时间和空间上的消耗情况。这里引入了“大 O 表示法”,用来衡量随着输入规模 n 的增长趋势下操作次数的增长速率。通过这种方式可以帮助开发者选择最优解方案来处理大规模数据集或者提高程序运行速度。 #### 特定领域内的扩展应用 当涉及到更复杂的计算机科学分支时,则可能需要用到更加专业的技术和理论支持。比如针对推荐系统的构建,存在两种主要方式:User-Based CF (基于用户的协同过滤) 和 Item-Based CF(基于物品之间的相似性)[^2]; 对于人工智能中的视觉识别任务而言, 则涵盖了图像描述生成、可视问答系统设计等方面的研究成果[^3]. 另外值得注意的是某些特殊类型的难题被称为 NP 完全问题[NP-complete problems], 这类题目往往难以找到精确解答但在很多情况下允许采用近似求解手段获得满意的结果而不是追求绝对最佳值[^4]. #### 经典问题及其高效解决方案 以 labuladong 笔记为例介绍了几个经典组合型数值运算挑战如 Two Sum , Three Sum等问题的最佳实践做法。其中提到利用排序配合双指针扫描可有效降低时间成本实现线性级别性能表现的同时还能轻松应对重复元素剔除需求等情况下的变体版本拓展训练[^5]。 ```python def two_sum(nums, target): nums.sort() left, right = 0, len(nums)-1 while left < right: current_sum = nums[left]+nums[right] if current_sum == target: return [left,right] elif current_sum<target: left +=1 else : right -=1 return [] ``` 上述代码片段展示了如何使用双指针技术解决两数之和的问题,并且可以通过调整逻辑进一步应用于更多类似的多数字求和场合之中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值