![](https://img-blog.csdnimg.cn/20210123193733521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数构+算法+设计分析
文章平均质量分 59
为了刷leetcodel好好学算法
高高飞起的勇敢麦当
你想活出怎样的人生
展开
-
算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
1、动态规划和贪心算法2、应用-集合覆盖穷举法实现,列出每个可能的广播台的集合,这被称为幂集。假设总的有 n 个广播台,则广播台的组合总共有使用贪婪算法,效率高:1)目前并没有算法可以快速计算得到准备的值, 使用贪婪算法,则可以得到非常接近的解,并且效率高。选择策略上,因为需要覆盖全部地区的最小集合:2)遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)3)将这个电台加入到一个集合中(比如 ArrayList), 想办法把该电台覆盖的地原创 2022-01-30 22:13:06 · 485 阅读 · 0 评论 -
算法设计与分析(Java实现)—— KMP 算法
算法设计与分析(Java实现)—— KMP 算法原创 2022-01-30 21:09:37 · 215 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)转载 2022-01-30 21:41:33 · 2886 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 动态规划(入门)斐波那契数列
斐波那契数列递归记忆化递归动态规划public class dp { //# 递归的的斐波那契数列解决方法 时间复杂度O(2^n) public long fibonacci(int n) throws Exception{ //特殊情况,分开讨论 if (n == 1 || n == 2) { return 1; } if (n > 2) { return fibonacci(n - 1) + fibonacci(n -原创 2021-05-08 10:39:45 · 292 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 分治算法(入门)
汉诺塔(河内塔)public class Hanoitower { public static void main(String[] args) { hanoiTower(3, 'A', 'B', 'C'); } public static void hanoiTower(int num,char a,char b,char c){ //如果只有一个盘 if(num == 1) { System.out.pr原创 2021-05-08 10:33:28 · 80 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 查找
【1】线性查找public class SeqSearch { public static void main(String[] args) { // 没有顺序的数组 int arr[] = {1, 9, 11, -1, 34, 89}; int index = seqSearch(arr,-1); if (index == -1){ System.out.println("没有找到》》》》");原创 2021-05-08 10:29:59 · 80 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 常用排序算法比较和总结
分为 3 组 ,N平方 【 冒泡、选择、插入】N 对数阶 【 希尔、归并、快排】K 常数 【基数排序】可以看到技术排序还是比较稳定的,在数组里面相同的数,排序后位置还是保持原来的前后位置虽然有这么多种排序算法,时间复杂度和空间复杂度也各有千秋,在具体情况里面,我们应该根据自己的需求来使用我们的排序算法,可以是一个算法里面嵌套另一个算法进行使用...原创 2022-01-25 16:53:34 · 105 阅读 · 0 评论 -
算法设计与分析(Java实现)——基数排序(桶排序)
一、介绍1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3)基数排序(Radix Sort)是桶排序的扩展4)基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。通过上面这段话.原创 2022-01-25 16:32:59 · 100 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 归并排序
一、归并排序介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。二、归并排序思想1-基本思想:2-合并相邻有序子序列:治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6] 两个已经有序的子序列,合并.原创 2022-01-25 16:05:16 · 246 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 插入排序之 希尔(shell)排序
尚硅谷Java数据结构与java算法—— 插入排序之 希尔排序原创 2021-11-17 00:02:33 · 98 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 插入排序之 直接插入排序
尚硅谷Java数据结构与java算法—— 插入排序之 插入排序原创 2021-11-16 22:57:32 · 671 阅读 · 1 评论 -
数据结构与算法(java实现)—— 选择排序之 堆排序
1堆排序基本介绍1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆4)大顶堆举例说明5)小顶堆举例说明6)一般升序采用大顶堆,降序采用小顶堆2堆排序基本思想堆排序的基本思想是:1)将待原创 2022-01-25 15:43:57 · 106 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 选择排序之 选择排序
1基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。2选择排序思想:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1原创 2021-11-16 22:49:27 · 152 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 交换排序之 快速排序
1、思路图解定义**快速排序(Quicksort)**是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列图解2、代码实现import java.util.Arrays;/** * @author: 何建光——hjg_5282 * @create: 2021-09-04 09:04 * PS : 快速排.原创 2021-09-04 10:01:40 · 175 阅读 · 1 评论 -
算法设计与分析(Java实现)—— 交换排序之 冒泡排序
1、基本介绍**冒泡排序(Bubble Sorting)**的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。2、算法过程图解小结上面的图解过程:(1) 一共进行 数组的大小-1 次 大的循环(2) 每一趟排序的次数在逐渐的减少(3) 如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。这个就是优化3、无优化代码实现直接上代码import jav原创 2021-09-04 10:00:58 · 220 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 排序算法前奏以及算法基本知识(复杂度)
1、排序算法的介绍2、排序的分类3、算法的时间复杂度4、算法的空间复杂度原创 2021-09-04 09:59:50 · 128 阅读 · 0 评论 -
算法设计与分析(Java实现)—— 递归
递归6.2递归的概念简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。2 递归调用机制package DataStructures.a05_Recursion;/** * 认识递归 */public class RecursionTest { public static void main(String[] args) { test(4); System.out..原创 2021-08-22 16:54:20 · 302 阅读 · 2 评论 -
数据结构与算法(Java实现)之【图】(dfs && bfs)
不搞虚的,直接上代码,看到我的博文先运行一下import java.util.ArrayList;import java.util.Arrays;public class Graph { private ArrayList<String> vertexlist; // 存储顶点集合 private int[][] edges; // 存储图对应的邻接矩阵 private int numOfEdges;//表示边的数目 public static原创 2021-05-05 23:07:17 · 186 阅读 · 2 评论 -
数据结构与算法(Java实现)之【树】-- 拿来用
PS:排序和查找是分不开的,排好序是为了更好地查找。1、二叉排序树(1)定义二叉排序树:或者是一棵空树,或者是具有如下特性的二叉树:1)若左子树不空,则左子树上所有结点的值均小于根结点的值;2)若右子树不空,则右子树上所有结点的值均大于根结点的值;3)左、右子树也分别为二叉排序树。(2)中序遍历和二叉排序(搜索)树的关系(3)插入和生成1)按规矩插入,刻意维护对一个无序序列可通过构造二叉排序树而变成一个有序序列。构造树的过程就是对无序序列进行排序的过程。如果插入的节点均在叶子节原创 2022-02-01 12:28:42 · 2617 阅读 · 2 评论 -
数据结构与算法(Java实现)之【哈希表】
1、介绍2、散列表(-1)相关术语1、散列方法(杂凑法)选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放。查找时,由同一个函数对给定值k计算地址,将k与地址单元中元素关键值进行比较,确定查找是否成功。2、散列函数:散列方法中使用的转换函数。3、散列表:按上述思想构造的表4、冲突:不同的关键值映射到同一个散列地址,key1≠key2,但是H(key1)=H(key2)(0)按散列函数 H(k)=k 存放(1)思考存储过程选取某个函数,依该函数按关原创 2022-01-30 12:15:37 · 1158 阅读 · 2 评论 -
数据结构与算法(Java实现)之 【限定性线性表——栈和队列】
(1)基本概念栈和队列,是操作受限定的线性表。共同点是操作的位置限制在表的端点。栈具有LIFO的特性,限定元素的运算位置只在表的一端(栈顶)进行。队列具有FIFO的特性。限定元素的运算位置分别在表的两端进行,队头进行删除操作,队尾进行插入操作。(2)顺序和链式两种存储方式:顺序存储结构(更常见):栈和队列都可以,受到事先开辟的容量限制,可能发生溢出。循环队列是顺序存储结构。通过取模(%)将其看成首尾相接的环。区分队列空和满,两种经典解决办法:一是损失一个空间;二是设置标志位。在一..原创 2022-01-28 00:03:37 · 1879 阅读 · 0 评论 -
数据结构与算法(Java实现)之【队列】
队列1234 代码实现import java.util.Scanner;/** * 数组模拟队列 */public class ArrayQueueDemo { public static void main(String[] args) { //测试一把 //创建一个队列 ArrayQueue queue = new ArrayQueue(3); char key = ' ';//接收用户输入原创 2022-01-25 15:17:17 · 106 阅读 · 0 评论 -
数据结构与算法(Java实现)之【栈】
1、栈的一个实际需求栈的介绍栈的应用场景2、栈的快速入门代码实现import java.util.Stack;//演示栈Stack的基本使用public class TestStack { public static void main(String[] args) { Stack<String> stack = new Stack(); // 入栈 stack.add("jack"); st.原创 2021-08-21 11:12:09 · 728 阅读 · 0 评论 -
数据结构与算法(Java实现)之 【数组和链表总结】
1、线性表的特征线性表中每个数据元素有且仅有一个直接前驱和一个直接后继,第一个结点无前驱,最后一个结点无后继。2、线性表的存储方式线性表顺序存储(顺序表):静态分配,借助高级语言的数组,连续的地址空间存放表元素,逻辑关系隐含在存储顺序中。线性表链式存储(链表):动态分配,借助高级语言的指针,动态申请与动态释放地址空间,结点的物理存储可以是不连续的,逻辑关系通过指针表明。3、顺序表与链表4、顺序表与链表的比较(1)、基于空间的考虑(2)、基于时间的考虑5、各种链表的比较原创 2022-01-27 17:48:06 · 747 阅读 · 0 评论 -
数据结构与算法(Java实现)之【链表】
单链表介绍单链表的应用实例代码实现单链表默认顺序添加/** * 单向链表 */public class SingleLinkedListDemo { public static void main(String[] args) { //进行测试 //先创建节点 HeroNode hero1 = new HeroNode(1, "宋江", "及时雨"); HeroNode hero2 = new HeroNode(..原创 2021-08-21 08:49:11 · 122 阅读 · 0 评论 -
数据结构与算法(Java实现)之【稀疏数组】
稀疏数组1先看一个实际的需求234/** * 稀疏数组 */public class SparseArray { public static void main(String[] args) { // 创建一个原始的二维数组 11 * 11 // 0: 表示没有棋子, 1 表示 黑子 2 表蓝子 int chessArr1[][] = new int [11][11]; chessArr1[1][2] =原创 2021-08-20 17:49:54 · 96 阅读 · 0 评论 -
数据结构与算法(Java实现)之 【线性表】
一、线性表及其抽象数据类型二、数组三、链表原创 2022-01-27 16:12:12 · 855 阅读 · 0 评论 -
数据结构与算法(Java实现)之【数据结构和算法概述】
数据结构和算法的介绍看几个实际编程中遇到的问题线性结构和非线性结构存储结构(2):数组 && 链表数据结构原创 2021-08-20 15:57:36 · 221 阅读 · 0 评论