- 博客(70)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 【kotlin】利用by关键字更加方便地实现装饰器模式
于是我们便能利用这一功能来更方便地实现装饰器模式,现在我们来实现三个装饰器类,分别对Component的三个方法进行装饰。关于kotlin中的by关键字的用法,kotlin官方文档。在主函数中调用这三个装饰器。这两段代码功能一致。
2024-04-25 15:51:30
483
2
原创 【图论】关键路径求法c++
aoe(float**, int, int*&, int&, float*&, float*&, float*&, float*&, int*&, int**&, int&)分别传参邻接矩阵mat,结点数n,引用变量criticalPath表示关键路径,引用变量ve,vl,e,l正如名字所示,topo与edges表示拓扑序列与边,edgeNum表示边的数量。aoe(float**, int*&, int&)则更是只有三个参数,他不对ve,vl,e,l进行返回。
2023-11-23 20:33:29
938
原创 几种内部排序算法的cpp代码实现与分析
若n较小,可采用直接插入排序或简单选择排序。直接插入排序比较次数少移动次数多,简单选择排序比较次数多移动次数少。所以当记录的信息量较大时,更适合选用简单选择排序。若文件初始状态已基本有序,应当使用直接插入排序或冒泡排序。若n较大,则应该使用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序,目前快速排序被认为是所有基于比较的排序算法中最好的算法,当待排序关键字随机分布时,快速排序所使用的平均时间最短。堆排序相比快速排序的优点是:不需要开辟额外的内存空间。
2023-05-12 21:02:39
625
原创 数学建模2019B “同心协力”策略研究
两个假设条件:一、忽略阻力。二、视鼓面为平面。 设zb(t)z_b(t)zb(t)为球在ttt时刻的位置、vb1v_{b1}vb1为球的初始速度、mbm_bmb、mdm_dmd分别为球与鼓的质量。 根据牛顿第二定理和球的初始条件,可联立方程组:{mbd2zbdt2=−mbgzb(0)=0zb′(0)=vb1(1)\left\{\begin{aligned}m_b\frac{d^2z_b}{dt^2} = -m_bg\\z_b(0) = 0\\z_b'(0) = v_{b1}\en
2022-08-21 21:11:22
2329
2
原创 【Matlab数学建模】灰色预测模型
1982年我国学者邓聚龙教授发表第一篇中文论文《灰色控制系统》标志着灰色系统这一学科诞生。 白色系统是指一个系统的内部特征已知的,即系统的信息是完全充分的。黑色系统是指一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究。 灰色系统则介于二者之间。 选取参考数列:X0=X0(k)∣k=1,2,⋯ ,n=(X0(1),X0(2),⋯ ,X0(n)),其中k表示时刻X_0 = {X_0(k)|k = 1, 2, \cdots, n} = (X_0(1), X_0(2),
2022-06-06 22:03:12
7163
1
原创 【Matlab数学建模】TOPSIS(优劣解距离法)
先分析一下层次分析法的不足。 ① 平均随机一致性指标RI的表格中,n最大为15。那么n太大的话,无法进行一致性检验。 ② 如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢? ① 第一步:求最大最小值。 ② 第二步:带入构造计算评分的公式x−minmax−min\frac{x - min}{max - min}max−minx−min。 ③ 第三步:进行归一化。 代码演示: (注:上面的评分规则是不正确的,只是用来抛砖引玉,正确的评分规则见下文“三
2022-06-04 00:07:33
603
原创 【Matlab数学建模】层次分析法
层次分析法主要用于评价类问题,比如说小明要去旅游,纠结去苏航还是北戴河、还是桂林。 我们可以弄这样一张权重表格。 将这张表格记作矩阵:A=(a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44a51a52a53a54)A = \begin{pmatrix}a_{11} & a_{12} & a_{13} & a_{14}\\a_{21} & a_{22} & a_{23} & a_{24}\\a_{31} & a_{32} & a_{33}
2022-06-03 17:48:08
3116
1
原创 【Matlab数学建模】微分方程求解导弹问题
设位于坐标原点的甲舰向位于xxx轴上点A(1,0)A(1, 0)A(1,0)处的乙舰发射导弹,导弹始终对准乙舰。如果乙舰以最大的速度v0v_0v0(v0v_0v0是常数)沿平行于yyy轴的直线行驶,导弹的速度是5v05v_05v0,求导弹运行的曲线,乙舰行驶多远时,导弹会将它击中? 我们设在时刻为t时,导弹的位置是P(x(t),y(t))P(x(t), y(t))P(x(t),y(t)),乙舰的位置是Q(1,v0t)Q(1, v_0t)Q(1,v0t) 易知,在t时刻时:y′=v0t−
2022-05-21 15:01:28
2707
原创 【JVM学习笔记】类的加载过程
一、类的生命周期概述二、类的加载阶段 Loading1 加载完成的操作2 二进制流的获取3 类模型与class实例的位置 反射的使用:import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test { public static void main(String[] args) { try { Class<?> cls = Class.forN
2022-04-14 18:59:16
617
原创 【JVM学习笔记】字节码指令集解析
一、class的文件结构1 前端编译器 AOT效率较高,但只支持Linux平台。2 透过字节码查看代码执行细节
2022-03-18 21:53:24
630
原创 【JVM学习笔记】GC——JAVA语言的垃圾回收
一、垃圾回收概述1 什么是GC,为何要GC?2 早期垃圾回收3 Java的垃圾回收机制二、垃圾回收的相关算法1 垃圾回收算法的概述 垃圾回收分为标记阶段和清除阶段,标记阶段找垃圾,清除阶段清掉找到的垃圾。 标记阶段使用的算法有引用计数算法、可达性算法。 清除阶段使用的算法有标记-清除算法、复制算法、标记-压缩算法、分代收集算法、增量收集算法、分区算法。2 标记阶段:引用计数算法3 标记阶段:可达性分析算法4 对象的finalization机制
2022-02-25 23:22:13
475
原创 【JVM学习笔记】超重点——字符串String
一、String的不可变性二、String底层的HashTable结构 1st,看一个例子:public class StringExr { String str = new String("good"); char[] ch = new char[]{'t', 'e', 's', 't'}; public void change(String str, char[] ch) { str = "test ok"; ch[0] = 'b'; } public static
2022-02-20 21:14:54
419
原创 【JVM学习笔记】对象创建、直接内存与执行引擎
一、对象的创建1 对象实例化的几种方式2 从字节码角度看对象的创建package com.spd.jvm;public class Test { public static void main(String[] args) { Object obj = new Object(); }} 对应字节码:0 new #2 // 创建Object对象3 dup // 复制一份栈顶slot并压入栈中4 invokespecial #1 // 调用构造器方法7 ast
2022-02-17 22:30:01
155
原创 【JVM学习笔记】运行时数据区
一、运行时数据区与线程概述1 运行时数据区的结构 其中方法区和堆是随着虚拟机的创建而创建摧毁而摧毁,为各个线程所共用。而程序计数器(PC)、本地方法栈(NMS)、虚拟机栈(VMS)则是随着某个线程的创建而创建摧毁而摧毁。 垃圾回收大部分是发生在堆区,但也有一些发生在 方法区/元空间/永久代 中。另外对于JIT编译缓冲,有的书中说是在方法区中,有的书上说是独立于方法区存在,众说纷纭。2 一些比较重要的守护线程 要知道执行Java程序的时候,并不是只有main方法这一个线程。还有很多很多虚拟机
2022-02-14 17:15:09
377
原创 【操作系统 & 图论】传参一个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
390
原创 《深入了解Java虚拟机》类的加载之被动引用
什么是被动引用?这篇文章里面我们提到过:JVM学习笔记内存与垃圾回收篇 我们来看几个例子。例一package com.spd.jvm;class SuperClass { static { System.out.println("SuperClass.static initializer"); } public static String str = "Hello world!";}class SubClass extends SuperClass { static
2021-12-17 14:24:39
1687
原创 【汇编语言】西邮地图
简介 本来这个项目做的方向是贪吃蛇,详见:【汇编语言】贪吃蛇游戏(二)和【汇编语言】贪吃蛇游戏(一) 但是有个大三的学长拜托我帮他做个东西,我就根据我的贪吃蛇v1.0和v1.1改了下。做了一个汇编西邮地图。 先看下效果: 这个地图中的黑点就是玩家当前的位置,按wasd可以移动位置。而且只有土黄色的地方可以走,比方说黑点右边是绿色区域,那么按d是没有任何反应的。包括边框,玩家走到最下方还按s,那就不会有任何反应。 放代码:代码assume cs : code, ds : data,
2021-12-17 12:05:53
2744
1
原创 【JVM学习笔记】概述
一、java的编译 有句话说java是半编译半解释型语言,因为从*.java到*.class文件的过程是编译。而*.class文件的运行是解释。 但其实*.class文件的运行过程是半编译半解释的。有些需要反复用到的字节码是直接编译成机器指令来执行的。就好比域名的解析,常用访问的域名解析是直接通过本地域名服务器,不常用的才会自顶向下层层解析。如图:二、jvm的指令集 指令集架构有基于栈的指令集架构和基于寄存器的指令集架构。 jvm中使用的就是基于栈的指令集架构。它的好处是不需要硬件支持,
2021-12-13 22:39:35
1002
原创 【数据结构 & 通信原理】进行哈夫曼编码的同时求出信息熵
执行效果代码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
1996
原创 【汇编语言】贪吃蛇游戏(二)
距离上一次做这个都有一周了,可见我平常是真的忙到没时间做。 废话就不多说了,之前那个贪吃蛇(【汇编语言】贪吃蛇游戏(一))使用的是阻塞式的16号中断。所以产生的现象就是,按键盘蛇才走,不按键盘蛇不走。就像魂斗罗那样子。这显然是不行的,贪吃蛇应该是键盘不按他也能走,按键盘只起到了改变方向的作用。应该是使用9号中断才对。 今天我对旧版本的贪吃蛇做的改进就是使用九号中断,使贪吃蛇不按键盘都能走,键盘只改变方向。并且加入一定的逻辑判断,让蛇撞到围墙或者自身就会退出游戏。输掉。 但是还有不足的地方,因
2021-12-02 01:08:57
2182
4
原创 【汇编语言】贪吃蛇游戏(一)
最近刚学完汇编,于是准备做个小游戏练练手。就瞅准了最最最老生常谈的贪吃蛇。 首先贪吃蛇必须是用户让蛇改变方向,蛇就得改变方向,吃到东西蛇会变长。 但我们不太可能一次性就做出来这么多功能。 先从简单的开始做。做一个小点点,让这个小点点可以被用户控制着改变方向。不会变长,而不会死。先从最简单的开始。 代码如下:assume cs : code, ds : data, ss : stackdata segment pos dw 0, 0 dire dw 0, 2data ends
2021-11-25 13:28:19
4713
原创 【数据结构与算法】王道考研数据结构与算法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
869
2
原创 【操作系统】利用信号量多个线程轮流打印数字
一、运行效果 先看效果: 传参3和10,那就是3个线程轮流打印10~1 。如下: 我们不妨胆子放开点。114个线程轮流打印514~1 。像这样传参。 运行效果:二、代码实现 这个其实都算很简单了。我之前写过一个复杂得多的,传参一个代表有向图的矩阵,让线程按照有向图中的前驱关系依次运行。链接在这里:【操作系统&数据结构图论】用有向图临接矩阵获得满足该前驱关系的线程数组 这个算法其实也是传参了一个图,一个环形的图,或者说一个环形单链表,即第n个节点只有指向第n+1个节点的
2021-11-17 23:29:07
1005
1
原创 【计算机组成原理 & 计算机网络】几种校验码的java编程实现
〇、校验码的超类 我们用面向对象的思想把校验码方式分成一个一个的类,为了提高代码重用性,就先构建一个所有校验码类型的超类,就叫他CheckCode,也就是校验码的意思。public abstract class CheckCode { private final static double p = 0.02; /** * 对二进制信息进行编码 * @param codes 需要进行编码的二进制信息 * @return 经过加密后的二进制信息 */ public abstrac
2021-11-11 16:14:58
968
原创 【汇编语言】递归法求阶乘
众所周知,c语言一上来就给程序员分配好了堆栈,而在汇编语言中,内存分配却要程序员自己去解决,那就更不用说函数了,汇编语言无法实现函数调用。 但这并不代表他不能实现递归,我们可以划分一个十六字节的栈段来做为方法栈,利用call和ret指令实现函数调用功能。 代码如下:assume cs : code, ds : data, ss : stackdata segment db 6data endsstack segment db 10H dup(0)stack endscode
2021-11-09 13:00:32
4096
原创 【汇编语言】汇编语言实现if while for,以及编写冒泡排序
一、if的实现 c语言代码:if (ax == bx) { /* codes */}if (ax) { /* codes */}if (ax < bx) { /* codes */} 汇编代码cmp ax, bxjne e0 ;codes;e0:cmp ax, 0je e1 ;codes;e1:cmp ax, bxjge e2 ;codes;e2:二、if…else…的实现 c语言代码if (ax) { /* codes1 */
2021-11-05 15:58:39
2955
1
原创 【数据结构与算法】王道考研数据结构与算法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
1197
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
337
原创 【BMP格式函数分析器】java语言数学分析项目
一、项目简介: 先给大家看一下这个小项目的效果: 运行后生成的pic.bmp图片 没错,这个项目的主要功能就是通过函数生成对应的图像。 主要是用到的技术有:IO流、BMP格式分析、面向对象程序设计。 项目结构如下: Main类主要用来测试,剩下的三个类我会在下面一一介绍。二、项目内容:① Color类 众所周知,图片其实就是由像素组成的二维矩阵,那我们肯定就要构建一个Color类表示像素了,图片信息的存储就是一个Color类型二维数组存储。package www.sp
2021-10-15 12:21:58
974
原创 【数据结构与算法】同种算法分别用递归/回溯与栈实现
一、阶乘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
134
1
原创 【操作系统 & 计算机组成原理】设备控制器
一、设备控制器的概念 CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。 这个电子部件就是I/O控制器,又称设备控制器。CPU可控制/o控制器,又由/O控制器来控制设备的机械部件。二、设备控制器的功能 ① 接收和识别CPU发出的命令:如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数。 ② 向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录
2021-10-05 13:58:50
6615
2
原创 【操作系统&计算机组成原理】磁盘的结构
磁盘、磁道和扇区 磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。 磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道。一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同(如1KB)。因而最内侧的扇区面积最小,数据密度最大。 磁头可以读取磁盘的数据,而最中间的马达会带动磁盘转动,从而使磁盘可以读取到不同的扇区。 如何读对磁盘中的数据进行读写呢?需要把“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,
2021-10-03 10:01:09
1232
原创 【操作系统第三章】处理机调度与死锁
2.2_1 处理及调度的概念、层次1.调度是弄啥呢? 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。 在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。 调度分为作业调度、内存调度和进程调度。这分别是调度的三个层级。2.七状态模型: 我们前面讲过了五状态模型:创建、就绪
2021-09-23 22:46:49
423
原创 【操作系统】结合哲学家进餐问题分析如何预防死锁
零、哲学家进餐问题 哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。 哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉
2021-09-23 18:10:51
2077
1
原创 【操作系统&java多线程技术】几种信号量机制算法
生产者消费者问题: 太经典了,就不多赘述了。import java.util.concurrent.Semaphore;public class ProducerAndConsumer { static int count = 0; private static final Semaphore full = new Semaphore(0); private static final Semaphore empty = new Semaphore(20); private stati
2021-09-21 00:49:44
287
2
原创 【操作系统&数据结构图论】用有向图临接矩阵获得满足该前驱关系的线程数组
输入: 一个无环有向图的对接矩阵。假设该矩阵尺寸为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
303
java加载配置文件时报空指针异常
2021-06-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人