随笔分类 -  算法思考

凡人之躯,可堪神明
摘要:树 为什么需要有树 树提高了数据存储,读取的效率。利用 二叉排序树(Binary Sort Tree),既可以保证数据的检索速度,同时也可以保证数据的 插入,删除,修改的速度。 二叉树的遍历 二叉树的前序遍历;中序遍历;后续遍历是根据根节点的顺序进行遍历的 ==前序遍历== public void 阅读全文
posted @ 2022-11-22 21:58 深海之燃 阅读(16) 评论(0) 推荐(0) 编辑
摘要:最小生成树 普利姆算法 算法思想 如果从A点出发,则先比较A-G;A-B;A-C,从而选择最小的点为G点,因此将AG作为生成树, 再依次比较距离AG生成树距离最小的顶点,从而加入生成树种,这里选择的就是AGB 普利姆算法图解 核心代码 ——prim最小生成树构建 for (int k = 1; k 阅读全文
posted @ 2022-11-22 16:56 深海之燃 阅读(23) 评论(0) 推荐(0) 编辑
摘要:KMP算法 算法的背景 KMP 是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法 核心思想 KMP 方法算法就利用之前判断过信息,通过一个 next 数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过 next 数组找到,前面匹配过的位置,省去了大量的计算时间。 算 阅读全文
posted @ 2022-11-21 20:54 深海之燃 阅读(23) 评论(0) 推荐(0) 编辑
摘要:贪心算法 基本思想:就是程序在进行运算时,保证每一步达到最优值。不要求总体最优,而是要求每一步都是最优。 区间问题 给定多个区间,计算让这些区间互不重叠所需要移除区间的最小个数。 INPUT:[[1,2],[2,4],[1,3]] OUTPUT:1 这里贪心算法的体现:就是优先保留结尾小且不相交的区 阅读全文
posted @ 2022-11-21 20:28 深海之燃 阅读(38) 评论(0) 推荐(0) 编辑
摘要:动态规划 动态规划的原理其实也是将大问题划分为小问题,从而一步步获取最优解,但是适用于动态规划求解的问题,子问题往往不是独立的,是具有相互关联性。 背包问题 有一个背包,容量为4磅,现有如下物品: ①要求达到的目标为装入的背包的总价值最大,并且重量不超出 ②装入的物品不能重复 ==思路分析== 对于 阅读全文
posted @ 2022-11-21 17:48 深海之燃 阅读(21) 评论(0) 推荐(0) 编辑
摘要:分治法 分治法思想 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 合并:将各个子问题的解合并为原问题的解。 分治法的实践 汉诺塔问题 思路: 就是把复杂的问题简单化,拆分为一个个小问题:如果我们有 n >= 阅读全文
posted @ 2022-11-16 22:05 深海之燃 阅读(61) 评论(0) 推荐(0) 编辑
摘要:图 为何要有图呢? 其实就是对于线性表和树的补充,线性表和树只能表示一对一的关系,而图可以表示多对多的关系。 关于图的基本解释: 完全图、连通图、非连通图、连通分量 图的两种表示方式 邻接矩阵 邻接表 图的两种搜索方式 辅助理解资源: 深度优先搜索与广度优先搜索 深度优先搜索 原理: 首先把一条路径 阅读全文
posted @ 2022-11-15 22:05 深海之燃 阅读(48) 评论(0) 推荐(0) 编辑
摘要:Hash算法 hash算法背景 因为在有序表中查找,经常使用二分查找,这样效率就依赖与数据的规模,如果数据的规模过大,算法的效率就会变得很低,那么,有没有一种方法,直接通过关键字key一次得到所要的结果呢,这也就是hash表的由来。(hash表通过映射极大地提高了查询效率)——典型的用空间换时间 = 阅读全文
posted @ 2022-11-07 20:29 深海之燃 阅读(45) 评论(0) 推荐(0) 编辑
摘要:查找算法 二分查找(初始二分查找) ==算法原理:==就是一个分治的思想:分而治之,不断划分数据的查找范围,就可以提高查找效率,效率达到了O(logn) 前提:必须对应的是有序列表 //手写二分法,需求是返回索引 public static int binarySearch3(int[] arr,i 阅读全文
posted @ 2022-11-06 21:02 深海之燃 阅读(23) 评论(0) 推荐(0) 编辑
摘要:排序 冒泡排序法(交换) ==基本原理==:依次比较相邻元素的值,使值较大的元素逐渐前移或者后移,因为每一轮排序后值最大的元素一定是后移了一位。 //手写冒泡排序法 public static void bubbleSort(int arr[]){ int temp = 0;//定义交换用的临时变量 阅读全文
posted @ 2022-11-06 17:17 深海之燃 阅读(14) 评论(0) 推荐(0) 编辑
摘要:时间复杂度与空间复杂度 时间复杂度 首先我们要明确时间频度的概念。算法中语句执行次数被称为时间频度 当时间无穷大时,有几个步骤可以忽略: 算式中的常数可以直接忽略 低次项可以被直接忽略 最高项系数可以被忽略 常用的时间复杂度 常数阶O(1) 对数阶O(log2n) 线性阶O(n) 线性对数阶 O(n 阅读全文
posted @ 2022-11-04 20:24 深海之燃 阅读(20) 评论(0) 推荐(0) 编辑
摘要:递归(回溯) 为什么程序需要递归? 递归就是通过设置一定的规则和结束条件,让计算机来帮助我们去遍历,利用计算机的算力帮助我们找到正确答案。 (就是我设计一个算法,然后计算机帮我跑这些值) 递归中的return 递归中的return用法 return语法 return是一层一层返回,从被调用函数返回到 阅读全文
posted @ 2022-11-02 21:35 深海之燃 阅读(17) 评论(0) 推荐(0) 编辑
摘要:栈与队列 队列 队列的定义 其实队列这个数据结构就是计算机模拟现实生活中的体现,就跟一个人排队一样,先排上就先走,拿最新很火的梨泰院的例子来说:走在前面的人就应该尽快出去,不然就会产生问题,产生了碾压的大问题。 环形队列(取模的巅峰) 栈 ###栈的定义 栈与队列正好相反,栈是先入后出的有序列表,有 阅读全文
posted @ 2022-10-31 22:10 深海之燃 阅读(29) 评论(0) 推荐(0) 编辑
摘要:链表 为什么需要链表数据结构 与队列和数组相比,链表由于具有指针结构,是最容易进行增删改的数据结构形式。 关于链表结构的几道面试题思考(思考多种方法) ==首先定义节点和单链表结构== public class HeroNode {//这里定义一个节点对象,Java里默认没有数据的节点就是Node对 阅读全文
posted @ 2022-10-19 10:42 深海之燃 阅读(10) 评论(0) 推荐(0) 编辑

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