Java数据结构与算法(概览)

前沿

基于前面动态规划、贪心算法、深度搜索、广度搜索、分治算法的练习,已经初步对这些算法有个认识。但是在面对具体问题选用何种算法仍存在疑惑。下面梳理下这些算法的定义、区别和使用场景来帮助大家更有效巩固这些算法。

术语概念

自顶向下:将大问题分解为小问题,局部求解后得到整体求解的过程。

自底向上:从局部求解到整体求解的过程。

算法分类

7大搜索算法

https://blog.csdn.net/acuteeagle01/category_12660755.html#/

8大排序算法

https://blog.csdn.net/acuteeagle01/category_12659252.html#/

分治(自顶向下)

分治算法(Divide and Conquer)是一种通过将问题分解成较小的子问题,分别解决这些子问题,然后合并它们的解来解决原问题的算法设计范式。分治算法在许多经典算法中得到了广泛应用,如快速排序、归并排序、快速傅里叶变换等。

习题参考:

c语言排序算法之四(归并排序)-CSDN博客

c语言排序算法系列三(快速排序)-CSDN博客

Java数据结构与算法(最大子数组和动态规划)-CSDN博客

动态规划(自底向上)

动态规划(Dynamic Programming, DP)是一种求解复杂问题的方法,通过将问题分解为更小的子问题来解决,并且每个子问题只解决一次,存储其结果以便在以后需要时直接查用。动态规划特别适用于有重叠子问题和最优子结构性质的问题 

习题参考:

Java数据结构与算法(爬楼梯动态规划)-CSDN博客

Java数据结构与算法(最大子数组和动态规划)-CSDN博客

Java数据结构与算法(最长回文子串动态规划)-CSDN博客

贪心

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最优的选择,以期望最终能够得到全局最优解的方法。贪心算法通常用于解决最优化问题,比如最小生成树、最短路径等。在许多情况下,贪心算法可以得到全局最优解,但在某些情况下,它只能得到次优解。

习题参考:

Java数据结构与算法(leetcode热题881. 救生艇)-CSDN博客

Java数据结构与算法(买卖股票的最佳时机二贪心算法)-CSDN博客

Java数据结构与算法(盛水的容器贪心算法)-CSDN博客

回溯

回溯算法(Backtracking)是一种系统性地搜索问题解空间的算法,主要用于解决组合优化问题、约束满足问题以及其他需要探索所有可能解的场景。回溯算法通过构建解的每一步,并在发现当前解不满足条件时回退,逐步尝试所有可能的路径,以找到所有可行解或者最优解。

习题参考:

Java数据结构与算法(约束问题回溯算法)-CSDN博客

Java数据结构与算法(组合问题回溯算法)-CSDN博客

递归

递归算法是一种通过函数调用自身来解决问题的方法。它将一个问题分解成一个或多个更小的子问题,并递归地求解这些子问题,直到达到最基本的情况(基例),然后逐步将结果返回给上一级调用。递归算法在处理具有递归性质的问题(即问题可以分解为相似的子问题)时特别有效。

习题参考:

java数据结构与算法(二叉树中序遍历)-CSDN博客

java数据结构与算法(二叉树前序遍历)-CSDN博客

算法优化

剪枝

剪枝是一种优化技术,通常用于搜索算法(如回溯法、递归搜索等),通过在搜索过程中提前终止不必要的计算,从而减少搜索空间,提高算法效率。剪枝可以显著提升算法的性能,特别是在解空间巨大或者有很多不必要的分支的情况下。

实际应用:合法性校验、优先级路径选择、缓存应用。

记忆化搜索

记忆化搜索(Memoization Search)是一种优化技术,主要用于递归算法,通过存储已经计算过的结果来避免重复计算,从而提高效率。这种技术特别适用于存在重叠子问题的场景,比如动态规划(Dynamic Programming)问题。记忆化搜索的关键在于用一个数据结构(通常是哈希表或数组)来保存已经计算过的子问题的结果。

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值