- 博客(47)
- 收藏
- 关注
原创 day48 - 49
Day48 —— 49Day48 —— Heap SortDescription堆排序是一个比较难的内容,涉及到了之前的二叉树。首先我们要知道什么是堆(heap),堆分为大根堆和小根堆。大根堆是父节点比它的子节点都要大,小根堆是父节点比它的子节点都要小。它的基本思想就是先把数组弄成一个大根堆,然后把堆顶和数组最后一个元素交换,这样就把最大值放到了数组的后边。再把数组长度length - 1,再进行构造堆,把剩余第二大值放到堆顶,再重复之前的操作。以此类推,直到数组排序完成。Code/**
2022-04-17 16:14:51
792
3
原创 day47
Day 47 —— Selection Sort1. Description今天学的内容是选择排序,是一个简单直观的算法。其内容核心是在未排序列中找到最小的元素,然后将其和当前循环的起始元素交换位置。然后重复这个操作,这样每次操作下来当前循环内最小的元素都会被换到序列的开头。当所有的循环结束,所有的元素都有序了。2. Codepublic void SelectionSort() { DataNode tempNode; int tempIndexForSmallest; for (
2022-04-16 21:34:55
499
2
原创 day46
Day 46 —— Quick Sort1. Background今天是学习java的第46天,今天的内容是快速排序。2. Description快速排序的思想非常的简单,先找一个锚点,老师的代码是把每个序列的最后一个元素当作这个锚点,然后分别从头和尾*(这里的尾是锚点的前一个元素)*开始遍历。首先是从前开始遍历,此时遍历的元素必须都比锚点小。如果比锚点大,那就开始从尾遍历,从未开始的元素必须比锚点大,如果比锚点小那就和那个从前开始遍历并比锚点大的元素交换位置。上面差不多就是快速排序的基本思想了。
2022-04-14 22:07:07
539
2
原创 day42
Day42-45今天是学习java的第42天了,因为后续的代码都很简单,再加上今天恰好有时间,所以直接一口气完成了四天的代码。https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html上面这个网站是旧金山大学的学习网站,下面所有排序的可视化的动画效果在上面都可以观看的到。当某种排序想不通的时候,不如去看看这种排序的动画,说不定会豁然开朗。其中可调动画的速度,也可手动step to step,非常好用。Day 42 —— Has
2022-04-13 17:06:02
432
2
原创 day41
Day 411. Background今天是学习java的第41天,学习内容是顺序查找和折半查找。经过了前几天图的折磨,我现在看到这种简单的代码已经非常享受了。2. Description我觉得今天的代码没有什么可讲的,顺序查找直接无脑遍历就完事,折半查找的逻辑则是初中学的二分法。这两个逻辑简单,然后代码的实现上也很直接,所以我今天代码完成的速度就非常的快。里面需要注意的地方就是老师建立的数据结果是键值对了,这个东西如果是学了python的话就很熟悉,就是python里面的字典嘛。这个概念本身也
2022-04-11 22:04:44
752
2
原创 Day 40
Day 40今天是学习java的第40天了,今天的任务是写之前十天的心得体会。之前十天学习的是图的相关知识,是数据结构的一个重要章节,也是一个非常难的难点。数据结构在我看来难点有二,一个赫夫曼系列,另一个就是图这部分,其余的都还好。图这个章节,理解是一方面,另一个难点是代码的实现。我在写这个章节的时候,常常会感觉到,逻辑理解了,但是代码写不出来。这个关系到代码的基本功。我觉得,我出现这种情况的原因就是代码量太少了,回头还得大量的练习。图这个东西一般有两种实现形式,一个是邻接矩阵,另一个是邻接表。邻
2022-04-10 23:15:17
390
3
原创 day39
Day 391. Background今天是学习java的第39天,内容是之前学习过的关键路径。这个当时卡了我好久才弄懂,就非常的绕。是我觉得非常值得回味的代码之一。上次因故没有整理笔记,正好今天复习一遍。2. Description2.1 AOE网在谈论关键路径这个问题之前,我们先了解一下AOE网这种数据结构。AOE网(Activity On Edge)即边表示活动的网,是一个带权的有向无环图,其中顶点表示事件(Event),每个事件表示在它之前的活动已经完成,在它之后的活动可以开始,弧上
2022-04-09 23:10:55
322
2
原创 day38
Day38 —— Dijkstra and Prim1. Background今天学习的是,Dijkstra算法和prim算法,这两个算法是数据结构里面最经典的算法。Dijkstra算法是求一个图中一个点到其他所有点的最短路径的算法。Prim算法是查找连通网中的最小生成树。2. Description2.1 DijkstraDijkstra 算法是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度 O(n2)。每次从 「未求出最短路径的
2022-04-08 22:44:22
366
1
原创 day37
Day 371、 Background今天学习的内容是十字链表。这是综合了邻接表和逆邻接表的数据结果。2. Description十字链表:是属于有向图的一种存储结构。在介绍十字链表之前,首先需要了解邻接表(根据节点出度来构造的)、逆邻接表(根据节点入度构造的)。如果想在图中同时获得出度与入度的特性,需要将二者结合起来,构造成十字链表。emmm,对于老师的数据,我画了个十字链表的图,对着图看就很清晰了。就是在代码中引入了nextOut和nextIn,来记录当前节点的入度和出度。Codepa
2022-04-06 23:15:56
454
3
原创 day36
Day 36 —— Adjacency List1. Background学习java已经有36天了,今天学习的是图的邻接表表示,并完成深度优先遍历和广度优先遍历。2. Description今天数据结构方面没有什么可说的,还是图,只是换了一种表现形式。之前是一个矩阵,现在是一个个的链表。对于我来说,我比较喜欢邻接表,因为邻接表写深度优先和广度优先遍历方便。3. Codepackage datastructure.graph;import datastructure.CircleObject
2022-04-05 21:20:13
690
4
原创 神经网络概览
Background由于之前学习神经网络的课程被下架,导致我这耽搁了几天神经网络的学习。现在找到了新的课程,虽然比不上之前的,但是凑合着可以用。Main什么时候可以用神经网络当确定了一个数学模型,同时不要求输出数据绝对的准确率时,可以使用神经网络。有的时候,哪怕没有确定数学模型,也可以硬用神经网络。classification or regressionclassification意为分类,简单的说就是把两组数据分开。regression是回归,顾名思义,就是数学上面的那个回归。回归是分
2022-04-04 16:28:02
1402
原创 day35
Day 351. Background历经两天,我终于把图的着色问题给弄懂了。着色问题的核心是回溯法,这个我在学习C语言的时候学过,不过那个时候我看的C语言教程是把它放到递归后面的,毕竟回溯法确实是需要用到递归嘛。大概是三年前学的,当时回溯法就一直没弄懂,后来为了进度直接放弃了回溯法的学习。没想到现在学java的时候又看到了。2. Description2.1 回溯法回溯法不是什么神奇的新物种,大家应该有过这样的经历:以前在做数学题的时候,遇到一道不懂的题目,就会自然地将题目的条件代入到所有你
2022-04-03 22:17:33
395
2
原创 day34
Day 34 —— Depth First Traversal1. Background今天是学习java的第34天,今天学习的深度优先遍历。2. Description这个逻辑上与二叉树的深度优先遍历类似. 但要难一点。然后代码的写法上和昨天的很类似。今天的代码实现用到了栈,用栈的后进先出特性,实现深度优先遍历。https://www.cs.usfca.edu/~galles/visualization/DFS.html具体的运行逻辑可以看上面的这个网站。3. Codepackage d
2022-04-01 21:44:46
466
2
原创 day33
Day 33 —— Breadth First Traversal1. Background今天是学习java的第33天,今天学习的是广度有限遍历。今天的这个章节,给我的感觉是即难也简单。难的是对前面所学的内容的一个综合考察,简单的是,前面的基础打好之后,理解了深度优先遍历的逻辑之后就很容易就写出来了。后面的深度优先遍历也是,只要历经前面的磨难不逃课,我觉得难度其实一般。2. Description2.1 Web Recommend首先对于这个题目,我必须介绍一个网站,可以说我理解深度优先
2022-03-31 22:52:13
84
原创 day01
Day1Background今天是正式学习神经网络的第一天,主要是以环境配置和代码基础语句的学习。Descriptionclear all;close all;这两个的用处是清除环境变量,以此保证代码的正确运行。只是我在运行的时候编译器告诉我可以不用写clear,这样写会降低代码效率。对此我简单的查阅了资料,并没有一个很好的解释,为了节约时间就没有管它了。小问题,不影响最终结果的实现。然后就是输入数据和处理数据的阶段了。说实话,这个神经网络的学习比我的想象中的要简单很多,简单到只需要一个t
2022-03-30 22:03:03
984
原创 day32
Day321. Background今天是学习java的第32天了,今天练习的内容是图的连通性检测。这个我昨天本想花40分钟把它在熄灯之前做出来,今天看来是我想多了。我今天大概下午六点就回寝室了,研究代码研究到了现在。即使现在我把代码过了一遍,还是感觉非常艰难。2. Description所谓图的连通性,就是看任意两点有没有路径。对于有向图,则是要任意两点互相有路径。3. Codepackage datastructure.graph;import matrix.IntMatrix;
2022-03-30 21:42:07
78
原创 day31
Day31 —— IntMatrix1. Background今天是学习java的第31天了,终于从树的魔掌中逃出来了,今天学习的内容是矩阵及其运算。今天的内容虽然多,但是还是蛮好理解的,所以学起来非常的顺畅,没有前两天学习时的那种无力感。所以就直接上代码了,毕竟矩阵的运算啥的都是线性代数的基础,差不多是常识一样的东西,就不过多讲了。至于代码中需要注意的地方,我则是直接在代码上留了注释。所以就不单独介绍了。2. Codepackage matrix;import java.util.Arra
2022-03-28 21:13:31
555
2
原创 day30
Day30 —— encoding and decoding1. Background今天是学习java的第30天了。在这个特殊的日子,我学习了java数据结构里面的一个特殊的章节,赫夫曼编码和解码。2. DescriptionHuffman Coding的主要用途在于对资料进行编码、压缩。流程大致如下:依照即将编码的內容中,各个字符出现的频率建立Huffman Tree。依照Huffman Tree对资料內容进行编码。假设我们有一棵Huffman Tree(如上图所示),以及一段神秘数
2022-03-27 22:46:22
1096
原创 day29
Day 291. Background今天是学习java的第29天,今天学习的是Huffman的建树。2. Description首先,我先对我理解的赫夫曼树做一个介绍吧。赫夫曼树,又称最优树,是带权路径最短的树。树的带权路径是树中所有叶子节点的带权路径长度之和,通常记为WPL。而赫夫曼树,则是由这些节点构造的树中带权路径最短的一条。具体的,可以看看这位博主的介绍:http://c.biancheng.net/view/3398.html我就直接说赫夫曼树怎么创建吧2.1 Huffman
2022-03-26 22:31:29
539
原创 day28
Day28 —— Huffman编码1. Background今天是学习java的第28天了,今天学习的Huffman编码。也是我认为的数据结构中的大难点之一。2. Description霍夫曼(Huffman)编码是一种编码方式,主要用于数据文件的压缩。它的主要思想是放弃文本文件的普通保存方式:不再使用7位或8位二进制数表示每一个字符,而是用较少的比特表示出现频率高的字符,用较多的比特表示出现频率低的字符。今天的内容尚未深入的了解赫夫曼编码,只是先定义了其节点和文件读取。3. Codepac
2022-03-25 23:07:00
1323
原创 day27
Day 27 —— Hanoi1. Background今天是学习java的第27天,学习的内容是hanoi。由于最近毕业设计业务繁忙,所以不得已中断了一些天的代码学习。现在补上,我的计划是在群里的群友复试之前学到第50天,也就是把数据结构的内容学完,然后专心去复习初试。2. Description2.1 Hanoi汉诺塔作为我们的老朋友了,每一次学习新的计算机语言,每次讲递归老师都会讲一遍这个。我对它的理解是有三根签签,第一根签签上串很多盘盘,大的在下,小的在上。我们的最终目标是把第一根签签
2022-03-09 22:48:13
781
3
原创 day26
Day 251. Background今天是学习java的第25天,今天的学习是接着昨天,完成二叉树的先序和后序遍历。2. Description先复制一下昨天的理解:我的理解是先建立一个栈,然后创建一个tempNode,用这个来存要遍历的节点。然后利用栈先进先出的特性,只要tempNode不为空,就把这个节点压入栈中,然后向它的左孩子遍历。而当tempNode遍历到空之后,则说明已经到了树的最左边。PS:此时说的最左边是一个相对的概念,应该说是压到栈中的节点的最左端此时就可以开始出栈
2022-03-07 22:14:04
196
2
原创 day25
Day 251. Background今天是学习java的第25天,今天学习的是objectStack,以及用这个实现二叉树的中序遍历。2. Description2.1About今天的代码是先用Object类来实现栈,以实现一个代码实现所有的数据类型的效果。所以栈的实现的代码直接把之前栈的代码搬过来,然后修修补补即可。然后就是中序遍历了,这个倒是让我想了很久。2.2 in-order vistit我的理解是先建立一个栈,然后创建一个tempNode,用这个来存要遍历的节点。然后利用栈先
2022-03-05 21:41:00
580
2
原创 day24
Day 241. Background今天是学习java的第24天,今天学习的是用顺序表建立二叉树。这个还是在之前的祖传二叉树代码中直接添加,相当于是重构了二叉树的方法。2. Description今天的代码,老实说我下午起床开始看的,等我稍稍有些头绪,我的室友已经叫我去吃晚饭了。后来想出来后,觉得豁然开朗。代码最开始是将字符数组中的值全部存入一个二叉树节点数组中。额,这里可能有些绕,字符数组就是由字符组成的数组,二叉树节点数组就是由二叉树节点组成的数组。这里的落脚点在于数组,前面的修饰词是指数
2022-03-02 20:22:40
645
2
原创 day23
Day 231. Background今天是学习java的第23天,所学的内容是建立通用性的队列。这个所学的内容其实在昨天的二叉树的存储中就已经用到,只是当时没有深入了解,只是通过编译器的提示和代码抽象的了解了这种使用方法,今天是对其详细的学习。2. Description2.1 Object这里先引用一下老师写的帖子帖子链接:https://blog.csdn.net/minfanphd/article/details/116975721我的理解是,object可以在创建之后被转化为其余
2022-03-02 15:51:36
284
2
原创 day22
Day 22Background今天是学习java的第22天,今天学习的是树的存储。Description对于树的储存,用到了循环队列。具体操作是建立了两个队列,一个存值,另一个存对应的在二叉树中的序号。CodeCode1:对之前写的循环队列进行一个改写,使其适合树的储存。package datastructure;public class CircleObjectQueue { /** * The tatal space. One space can't used.
2022-02-28 21:55:21
212
2
原创 day21
Day 21 —— Binary Tree1. Background今天是学习java的第21天,今天学习的是二叉树。主要内容有,二叉树的建立,前、中、后序遍历,算二叉树的深度和节点数。2. Description2.1 Tree**树(Tree)**是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特定的称为根(Root)的结点;2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tn,其中每一个集合本身又是一棵
2022-02-27 21:06:33
266
1
原创 day20
Day201.面向对象与面向过程相比, 有哪些优势?对于这个问题,我想先说一下在我心里面向对象和面向过程的区别。面向过程就是一个一个的过程,一个一个的操作,然后把这些操作连起来就构成了我们需要的程序。面向对象则是建立一个一个的对象,给这些对象赋予属性,然后用这些对象解决问题。所以,在我的心里,面向过程是一盘散沙,不成体系,而面向对象就像一块一块的零件,每一块零件都有其作用,我们要做的是把这些零件拼起来。所以我觉得面向对象的优势是,程序出了问题直接去对应的“零件”那里看就行,不需要像面向过程一样对
2022-02-26 10:49:19
370
原创 day19
Day 191. Background今天是学习java的第十九天,今天学习的是字符数组的匹配和按位置输出。2. Codepackage datastructure;public class MyString { // The maximal length. public static final int MAX_LENGTH = 10; int length; // The data. char[] data; /** ******
2022-02-26 10:19:32
42
原创 day18
Day18 —— Circle Queue1. Background今天是学习java的第十八天了,今天学习的内容是循环队列。2. Description2.1 Circle queue循环队列,顾名思义就是把队列做成了一个循环。类似于把一个直的跑道做成了环形跑道。也同样是拥有head和tail这两个引用。一般来说,tail中不存数据,用于判断是否队列已满。但是这里和以前的不一样,head引用指向的是第0个元素,也就是说,这个是可以存数据的。2.2 enQueue这是往Queue中增加元素的
2022-02-23 20:14:26
215
1
原创 day17
Day17 —— 链队列1. Background今天是学习java的第十七天了,今天所学内容是链队列。2. Description链队列,也就是用链表实现的队列。故拥有队列的一切特性,如先进先出。由于是用链表实现,所以有一个头节点header。我们在本次的代码实现中还加入了一个尾节点tail来帮助我们进行往队列中增加元素的操作。当队列里面没有元素时,header == tail2.1 enQueue(int paraValue)这个方法是用来往队列里面增添元素的,根据队列先进先出的特点
2022-02-22 19:23:31
178
2
原创 day16
Day16 —— 递归1. Background今天是学习java的第十六天,今天学习的是递归。递归虽然有点难以理解,但是今天所练习的求和以及斐波那契数列是学任何一门编程语言都必练的过程。所以这两个函数该怎么写,我早已烂熟于心。2. Description以此类推是递归的基本思想。我的理解是大事化小,小事化了。解决一个事情很难,但是把它分摊到无数个小项目上面那难度就显著下降了。递归的两个条件可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)存在一种简单情境,
2022-02-21 12:05:55
224
原创 day15
Day 15 —— Bracket Matching1. Background今天是学习java的第十五天,今天进行的是用栈实现字符串的括号匹配。2. Description2.1 String.length()这个是java中string自带的方法。Returns the length of this string. The length is equal to the number of Unicode code units in the string.这是VScode对它的介绍,用途是返回字
2022-02-20 13:20:53
124
2
原创 day14
Day141. Background今天是学习java的第十四天了,今天学习的是栈的基础知识。主要是栈的结构以及删除和增加操作。2. Description2.1 Stack我对栈的理解,就是一个像杯子容器,具有后进先出的特性。数据只能从开口进来,从开口出去,而且,栈必须让上面的数据先出去后,下面额数据才能出去。2.2 Push这是往栈里面增加元素,这个操作的逻辑还是很好理解的。先检查栈里面的元素满了没有,满了的话,就返回false,并说此栈已满。如果栈中还有空位,则往其中加入给定数据
2022-02-19 19:02:35
150
2
原创 day13
Day13——Linked List1. Background今天是学习java的第十三天了,今天学习的内容是链表。链表作为数据结构的一种,功能和具体构造是在昨天的顺序表的基础上增加了许多。2. Description2.1Linked List链表(LinkedList)顾名思义就是由一个一个的节点(Node)连成的链,构成的表。一般有一个头节点,然后其余的节点一个接着一个排在后面。有头节点是为了方便操作,如果不想带头节点也可以。在链表中弱化了顺序,只有节点之间连接的"链"(next)才由
2022-02-18 22:06:17
346
5
原创 day12
Day12——Sequential List1. Background今天是学习java的第十二天,依旧是对顺序表进行学习。今天的代码是在昨天的基础上进行增加的,增加了顺序表的,增、删、查操作。这些操作的实现在数据结构中是非常基础的,几乎在数据结构这门课程中任何新的内容的第一件事就是实现增删改查,所以,就不赘述,直接进入今天的代码。2. Codepackage basic;public class SequentialList { /** * The max length
2022-02-17 13:46:24
214
2
原创 day11
Day11 —— Sequential List1. Background今天是学习java的第11天,结束了java基础的,转到了数据结构的学习。今天学习的内容是用java创建顺序表,及其一些操作。2. Description2.1 Object对象:数据及其上操作的总和。由于java是面向对象编程的语言,所以弄懂面向对象是非常重要的。2.2 Overload重载(Overload),在我的理解里面是在同一个类中,相同的方法名,但是里面传参不一样,就可以把这两个看作不同的方法。在今天的代码
2022-02-16 19:42:22
561
原创 day10
Day 10 —— Task11. Background今天是学习java的第十天,是对之前所学内容的一个综合性训练。在今天的程序训练中,我们用到了一个新的库——Random,这个库的作用是用来生成随机数。除此之外,用到的东西都是前面9天所学的循环、选择、数组这些。2. Description2.1 Random这是一个生成随机数的库。具体用法可看下文Code部分。此处列出Random的函数接口boolean nextBoolean() // 返回下一个“boolean类型”
2022-02-15 15:12:53
303
2
原创 day09
Day09 —— While 循环1. Background今天是学习java的第9天了,今天学习的内容是while循环。在我的心里面while循环是比for循环更加简单的存在,一直是把它当作for的下位替代来的。记得我三年前刚学C语言的时候,就只会一个while循环,然后用while循环实现了冒泡排序等等简单排序。可是之后学完for循环之后,写程序几乎没有用过while了,因为for属实好用。2. Description今天的代码是用while循环求和,但是Sum不能超过一个最大值,其中求和的v
2022-02-14 13:10:49
500
1
原创 day08
Day081. Background今天是学习java的第8天,学习的内容是矩阵乘法。矩阵乘法总的来说没有新东西,是对前些天学习的一个综合性运用。2. Description2.1 Tips三重循环是多数程序的极限.非法输入检查是程序正常运行的基本保障. 如果检查所有的非法输入, 会导致大量代码行, 这在商业代码中是必须的.2.2 矩阵乘法数字乘矩阵即为把矩阵每一个元素都乘以那个数字矩阵乘矩阵假设Am×s,Bs×n,则定义矩阵的乘法为Am×sBs×n=Cm×n,其中(1)当A的
2022-02-13 19:57:32
4308
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人