随笔分类 -  算法学习

1
记录算法学习的过程
摘要:【面试刷题】宽度优先搜索 一、最简洁的BFS算法的通用模板 1、适用于树和图的BFS模板 队列建议使用new ArrayDeque不建议使用new LinkedList(链表比数组慢) //双端队列 Queue<Node> queue = new ArrayDeque<>(); HashMap<No 阅读全文
posted @ 2022-01-31 13:52 DarkerG 阅读(90) 评论(0) 推荐(0) 编辑
摘要:【面试刷题】分治法与二叉树 一、二叉树上的分治法模板 1、模板 public 返回结果类型 divideConquer(TreeNode root) { if (root == null) { 处理空树应该返回的结果 } // if (root.left == null && root.right 阅读全文
posted @ 2022-01-19 15:30 DarkerG 阅读(53) 评论(0) 推荐(0) 编辑
摘要:【面试刷题】两种排序算法 一、快速排序 1、思路步骤 选取中心轴pivot。 将小于Pivot,大于pivot的两个值进行交换。 对pivot左半部分,pivot右半部分再次进行上述步骤。 2、LeetCode-912.排序数组 3、代码实现 class Solution { public int[ 阅读全文
posted @ 2022-01-13 14:34 DarkerG 阅读(46) 评论(0) 推荐(0) 编辑
摘要:【面试刷题】字符串匹配Robin Karp算法 一、题目LeetCode-28.实现strStr() 二、实现O(n^2)的普通算法 class Solution { public int strStr(String haystack, String needle) { //进行异常判断 if (h 阅读全文
posted @ 2022-01-12 20:47 DarkerG 阅读(157) 评论(0) 推荐(0) 编辑
摘要:动态规划 完全背包问题详解 鸣谢:本次的学习是跟着Carl的笔记来的,原创作者为Carl,可以在b站或者公众号关注Carl,搜索代码随想录。 完全背包理论基础 1、问题 背包最大容量为4,现有下面的物品各无限个。 重量 价值 物品0 1 15 物品1 3 20 物品2 4 30 问:背包能背的最大物 阅读全文
posted @ 2021-10-26 11:30 DarkerG 阅读(7732) 评论(1) 推荐(1) 编辑
摘要:动态规划 01背包问题详解 鸣谢:本次的学习是跟着Carl的笔记来的,原创作者为Carl,可以在b站或者公众号关注Carl,搜索代码随想录。 一、01背包问题理论基础 1、问题 ​ 有N件物品和一个最多能背重量为W的背包(也就是说背包的容量是W),第i件物品的重量是weight[i],其价值是val 阅读全文
posted @ 2021-10-25 15:45 DarkerG 阅读(3516) 评论(0) 推荐(0) 编辑
摘要:贪心算法单独篇 跟着代码随想录carl学 一、什么是贪心 贪⼼的本质是选择每⼀阶段的局部最优,从⽽达到全局最优。 这么说有点抽象,来举⼀个例⼦: 例如,有⼀堆钞票,你可以拿⾛⼗张,如果想达到最⼤的⾦额,你要怎么拿? 指定每次拿最⼤的,最终结果就是拿⾛最⼤数额的钱。 每次拿最⼤的就是局部最优,最后拿⾛ 阅读全文
posted @ 2021-10-17 21:24 DarkerG 阅读(316) 评论(0) 推荐(0) 编辑
摘要:算法基础四:动态规划 0-1背包问题 一、算法描述与分析 1、问题的理解与描述 问题理解 问题描述 2、解题思路 ①思路 ②状态转移方程 f(k,w):当背包容量为w,现有k件物品可以偷所能偷到的最大价值。 ③表格(图示) 解释: 第一行和第一列为0,因为当背包容量为0的时候,不论还有几件物品可以偷 阅读全文
posted @ 2021-10-05 15:27 DarkerG 阅读(422) 评论(0) 推荐(0) 编辑
摘要:算法基础四:动态规划 最长公共子序列 一、算法描述与分析 1、问题的理解与描述 子序列: 已知序列的子序列是在已知序列中去掉零个或多个元素后形成的序列。例如,Z=<B,C,D,B>是X=<A,B,C,B,D,A,B>的一个子序列。 公共子序列: 给定两个序列X和Y,若Z同时为X和Y的子序列,我们说序 阅读全文
posted @ 2021-10-04 16:14 DarkerG 阅读(191) 评论(0) 推荐(0) 编辑
摘要:算法基础四:动态规划 概念及矩阵链乘法 一、动态规划概述 ​ 第四部分将会学习针对一类具有特殊性质的组合优化问题来讨论一种解决问题的算法设计技巧——“动态规划”。所谓的组合优化问题,指的是问题有多个可行解,每一个可行解对应一个目标值,目的是要在可行解中求得目标值最优者(最大或最小)。适合于用动态规划 阅读全文
posted @ 2021-09-28 18:39 DarkerG 阅读(259) 评论(0) 推荐(0) 编辑
摘要:动态规划特辑-01 一、动态规划的题目特点 1、计数 有多少种方法走到右下角 有多少种方法选出k个数使得和为sum 2、求最大值最小值 从左上角走到右下角路径的最大数字和 最长上升子序列长度 3、求存在性 取石子游戏,先手是否必胜 能不能取出k个数使得和是sum 二、求最值型动态规划——案例讲解解题 阅读全文
posted @ 2021-09-26 16:44 DarkerG 阅读(40) 评论(0) 推荐(0) 编辑
摘要:算法基础三:分治算法 基于二叉堆的优先队列 一、算法描述与分析 ​ 堆还有一个作为有效优先队列的应用。优先队列,指的是队列中的元素都被指派了一个优先级,元素按优先级最大(或最小)出队。由于,存储堆的数组的第一个元素就是最大的(或者最小的),所以用堆作为优先队列的元素载体是合适的。 ​ 队列有两个基本 阅读全文
posted @ 2021-09-24 14:04 DarkerG 阅读(62) 评论(0) 推荐(0) 编辑
摘要:算法基础三:分治算法 堆的实现与堆排序 一、堆的概念及其创建 1、二叉堆的概念 ​ **(二叉)堆(heap)**数据结构是一个数组对象,它可以被视为是一个几乎完全的二叉树。树中的每一个节点对应于数组中的一个元素,该元素存储了节点的值。该树除了最底层,几乎完全填满了,最底层的填充是从左到右进行的。表 阅读全文
posted @ 2021-09-23 13:32 DarkerG 阅读(507) 评论(0) 推荐(0) 编辑
摘要:算法基础三:分治算法 快速排序算法 一、算法描述与分析 ​ 快速排序是一个典型的分治算法:和归并排序一样将A[p...r]划分成两部分,A[p...q]和A[q+1...r],但不是对分(q=[(p+r)/2]),而是利用算法基础二:渐增型算法 序列的划分中的PARTITION过程,使得A[p... 阅读全文
posted @ 2021-09-22 20:18 DarkerG 阅读(603) 评论(0) 推荐(0) 编辑
摘要:算法基础三:分治算法 归并排序算法 一、算法描述与分析 二、伪代码 对于数组A,起始位置在p,最后一个元素在r。先分成两个序列,然后对左边和右边的序列分别排序,最后合并。 三、代码实现 1、算法代码 ①Sort import java.util.Comparator; import java.uti 阅读全文
posted @ 2021-09-21 12:22 DarkerG 阅读(101) 评论(0) 推荐(0) 编辑
摘要:算法基础三:分治算法 汉诺塔问题 一、递归与分治 ​ 很多有用的算法是递归(recursive)结构的:为了解决一个给定的问题,递归地调用自身一次或者多次来解决关系密切的若干个子问题。这样的算法通常遵循分治(divide and conque)方法:它们将问题分解成若干个与原问题相似而规模较小的子问 阅读全文
posted @ 2021-09-19 20:43 DarkerG 阅读(331) 评论(0) 推荐(0) 编辑
摘要:算法基础二:渐增型算法 序列的划分 一、算法的描述与分析 二、算法的伪代码描述 三、代码实现 1、算法代码 import java.util.Collections; import java.util.Comparator; import java.util.List; public class L 阅读全文
posted @ 2021-09-19 10:57 DarkerG 阅读(128) 评论(0) 推荐(0) 编辑
摘要:算法基础二:渐增型算法 两个有序序列的合并算法 一、算法描述与思路分析 1、问题描述 2、思路分析 案例流程 3、伪码描述 二、程序实现 1、可以比较类型数组版本 ①程序源码 import java.util.Arrays; public class LinearList_01 { public s 阅读全文
posted @ 2021-09-17 21:37 DarkerG 阅读(156) 评论(0) 推荐(0) 编辑
摘要:算法基础二:渐增型算法 插入排序 一、渐增型算法是什么 ​ 渐增型算法(incremental algorithms)指的是算法使得标识问题的解从较小的部分渐渐扩张,最终成长为完整解。渐增型算法有一个共同的特征:构成算法的主体是一个循环结构,它逐步将部分解扩张成一个完整解。该循环将遵循一个始终不变的 阅读全文
posted @ 2021-09-16 18:47 DarkerG 阅读(121) 评论(0) 推荐(0) 编辑
摘要:算法基础一:算法设计与分析 一、什么是算法 算法是程序的灵魂 是解决一个计算问题的一系列计算步骤的 有序的 合理的排列。 本次算法的基础学习过程将从渐增型算法 分治算法 动态规划 贪婪策略 回溯算法 来学习。 二、算法分析的基础概念 ​ 一般来说,解决同一问题的算法,需要的资源越少,我们认为越优秀。 阅读全文
posted @ 2021-09-15 16:59 DarkerG 阅读(867) 评论(0) 推荐(1) 编辑

1
点击右上角即可分享
微信分享提示