
数据结构与算法分析
没啥好介绍的,就数据结构与算法么。
九死九歌
丹书铁契!
展开
-
几种内部排序算法的cpp代码实现与分析
若n较小,可采用直接插入排序或简单选择排序。直接插入排序比较次数少移动次数多,简单选择排序比较次数多移动次数少。所以当记录的信息量较大时,更适合选用简单选择排序。若文件初始状态已基本有序,应当使用直接插入排序或冒泡排序。若n较大,则应该使用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序,目前快速排序被认为是所有基于比较的排序算法中最好的算法,当待排序关键字随机分布时,快速排序所使用的平均时间最短。堆排序相比快速排序的优点是:不需要开辟额外的内存空间。原创 2023-05-12 21:02:39 · 630 阅读 · 1 评论 -
【操作系统 & 图论】传参一个AOE图,得到按其拓扑排序及权值执行临界区代码的线程数组
import java.util.concurrent.Semaphore;public class Solution { final static float INF = Float.POSITIVE_INFINITY; static Semaphore[][] semaphores; public static Thread[] AOEThreads(float[][] matrix) { semaphores = new Semaphore[matrix.length][matri原创 2022-02-08 17:47:20 · 391 阅读 · 0 评论 -
【数据结构与算法】王道考研数据结构与算法2022配套大题第四章(java语言描述)
树与二叉树原创 2021-12-08 21:36:15 · 623 阅读 · 2 评论 -
【数据结构 & 通信原理】进行哈夫曼编码的同时求出信息熵
执行效果代码package com.huffman.spd.www;import java.io.*;import java.util.*;public class Huffman { private final Map<Character, List<Boolean>> encodeMap; private final Map<List<Boolean>, Character> decodeMap; private final St原创 2021-12-07 20:00:20 · 2000 阅读 · 0 评论 -
【数据结构与算法】王道考研数据结构与算法2022配套大题第三章(java语言描述)
3.1 栈3、出入栈是否非法 挺好写的,我感觉。public static boolean func(char[] arr) { int length = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] == 'O') length--; if (arr[i] == 'I') length++; if (length < 0) return false; } return true;}4、判断回文原创 2021-11-19 21:25:28 · 874 阅读 · 2 评论 -
【数据结构与算法】王道考研数据结构与算法2022配套大题第二章(java语言描述)
2.2.3 顺序表 顺序表内容如下:class ArrayList { public int[] arr; public int length; public ArrayList(int[] arr, int length) { if (arr.length < length) { /* 给数组扩容,不过我这里没有实现扩容的方法,所以直接抛出异常 */ throw new IllegalArgumentException(); } this.arr原创 2021-10-29 00:07:28 · 1201 阅读 · 2 评论 -
【数据结构与算法】几个常出现在真题的算法时间复杂度分析
在以n描述问题规模的前提下。 对于以下几种算法:循环类一、while (i * i < n) { i++;} 复杂度O(n)O(\sqrt{n})O(n)二、while (i < n) { i *= 2;} 复杂度O(log2n)O(log_2 n)O(log2n)三、while (pow(n, m) < n) { i++;} 复杂度O(n1m)O(n^{\frac{1}{m}})O(nm1)四、while (i < n)原创 2021-10-27 22:25:18 · 342 阅读 · 0 评论 -
【数据结构与算法】同种算法分别用递归/回溯与栈实现
一、阶乘import java.util.Stack;public class Main { public static int fact1(int n) { if (n == 0) return 1; else return n * fact1(n-1); } public static int fact2(int n) { int ans = 1; Stack<Integer> stack = new Stack<>(); while (n &原创 2021-10-08 17:01:59 · 138 阅读 · 1 评论 -
【操作系统&数据结构图论】用有向图临接矩阵获得满足该前驱关系的线程数组
输入: 一个无环有向图的对接矩阵。假设该矩阵尺寸为n × n输出: 一个长度为n的Thread数组。保证这n个线程的run方法内部都会通过Thread.currentThread().getName()输出一遍自己的线程名。并且输出的顺序要满足有向图中的前驱关系。run方法中的其它代码可以任意顺序执行。 假设这个算法的名称是func(),表示有向图的对接矩阵是matrix,那么main函数中的内容是: public static Thread[] func(boolean[][] ma原创 2021-09-19 20:18:54 · 308 阅读 · 0 评论 -
java代码实现经典算法约瑟夫环(环形链表法)
问题阐述: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈原创 2021-09-15 23:05:16 · 384 阅读 · 2 评论 -
快慢指针算法
题目详情:剑指 Offer 22. 链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5. 我一开始写的算法是这样的:public ListNode g原创 2021-09-02 09:49:43 · 94 阅读 · 0 评论 -
简易链表【c语言】
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}Node,*LinkList;LinkList InitList(){ LinkList head; head=(Node*)malloc(sizeof(Node)); head->next=NULL; return head;}void CreatBR(LinkList head原创 2020-12-25 14:50:41 · 272 阅读 · 0 评论 -
八皇后问题(JAVA回溯法实现详解)
问题描述:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。代码实现:(具体讲解内容详见代码中的注释)public class 八皇后 { static int[] cols = new int[8]; //首先八皇后问题中每一列只能有一个皇后 //所以可以创建一个长度为8的数组,其每一个元素的数值都是相对应的那一列的皇后具体在哪一行 //其次每一行也都只能有一个皇后,所以这个数组的元素应该是0~7之间的不可重复的数原创 2021-03-02 19:44:05 · 832 阅读 · 0 评论 -
利用java实现平衡二叉树
平衡二叉树是一种特殊的二叉查找树,而二叉查找树又是一种特殊的二叉树,也就是说他们之间的继承关系是:平衡二叉树 -> 二叉查找树 -> 二叉树故而我们用来实现平衡二叉树所使用的方式是面向对象地,分步地,利用继承关系分别建立这三种类,而不是直接建立一个平衡二叉树。 一、 第一步,建立抽象类Tree,其内部提供一个静态内部类Node,作为树的节点,并实例化一些方法,例如打印树(先序遍历,中序遍历,后序遍历都有),还有树的构造器方法,将从某节点的子孙节点插入和移除某个元素的方法设置为抽象的。代码原创 2021-04-24 17:40:51 · 567 阅读 · 1 评论 -
python数据结构:以链表为底层原理重新实现字典dict
(PS:本人主要研究方向是java,python代码写的烂请见谅,大佬轻喷)一、概述:首先我们只知道,python中有几个已经实现好的数据结构,底层为链表linkList的列表list、底层为哈希表hashTable的集合set和字典dict。这确实为我们在程序开发的过程中提供了不少的便利、但也存在一定的弊端。以dict举个例子:在java中有一种与dict相似的结构叫做Map,java中同一个容器可以用不同的底层来实现,Map也是如此,像下面这样:import java.util.HashMa原创 2021-05-16 16:30:53 · 476 阅读 · 0 评论 -
java代码实现Dijkstra算法求图的最短路径
首先对于Dijkstra算法是什么,我就不在这里展开讲了,有前人讲过。这个:最短路径问题—Dijkstra算法详解,我个人觉得是csdn社区里面讲的最详实,最好理解的。但可惜他的代码实现是c++,java人落泪。这篇文章讲的很好,我也就不对Dijkstra算法进行过多的解释,直接上java代码好了。要看看这个,废话不多少,上代码:import java.util.HashSet;import java.util.Set;public class Dijkstra { private stat原创 2021-08-09 22:49:57 · 346 阅读 · 4 评论