当前位置: 首页 > news >正文

数据结构1.0(基础)

近java的介绍,


文章目录

  • 第一章、数据结构
    • 1、数据结构 ?
    • 2、常用的数据结构
    • 数据结构? 逻辑结构and物理结构
  • 第二章、数据结构基本介绍
    • 2.1、数组(Array)
    • 2.2、堆栈(Stack)
    • 2.3、队列(Queue)
    • 2.4、链表(Linked List)
    • 2.5、树(Tree)
    • 2.6、散列表(Hash table)哈希表
    • 2.7、堆, 堆积(Heap)
    • 2.8、图(Graph)
  • 参考文章


参考 维基百科 and 菜鸟教程 等

第一章、数据结构

1、数据结构 ?

在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作

数据结构可透过编程语言所提供的数据类型、引用及其他操作加以实现。一个设计良好的数据结构,应该在尽可能使用较少的时间与空间资源的前提下,支持各种程序执行。

不同种类的数据结构适合不同种类的应用,部分数据结构甚至是为了解决特定问题而设计出来的。例如B树即为加快树状结构访问速度而设计的数据结构,常被应用在数据库和文件系统上。

正确的数据结构选择可以提高算法的效率(请参考算法效率)。在计算机程序设计的过程中,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程序设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。

因为数据结构概念的普及,现代编程语言及其API中都包含了多种默认的数据结构,例如 C++ 标准模板库中的容器、Java集合框架以及微软的.NET Framework。

2、常用的数据结构

在这里插入图片描述

数据结构? 逻辑结构and物理结构

第二章、数据结构基本介绍

2.1、数组(Array)

在计算机科学中,数组数据结构(英语:array data structure),简称数组(英语:Array),是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。

  • 数组(Array)是是最常用的数据结构, 数组的特点是长度固定, 数组的大小固定后就无法扩容了 , 数组只能存储一种类型的数据 ,
  • 在内存中有空间连续性的表现,中间不会存在其他程序需要调用的数据,为此数组的专用内存空间;
  • 在旧式编程语言中(如有中端语言之称的C),程序不会对数组的操作做下界判断,也就有潜在的越界操作的风险(比如会把数据写在运行中程序需要调用的核心部分的内存上)。
  • 因为简单数组强烈倚赖电脑硬件之内存,所以不适用于现代的程序设计。欲使用可变大小、硬件无关性的数据类型,Java等程序设计语言均提供了更高级的数据结构:ArrayList、Vector等动态数组。

添加,删除的操作慢,因为要移动其他的元素,查询快(知道下标为前提)

其他数据结构,比如栈和队列都是由数组衍生出来的。

每一个数组元素的位置由数字编号,称为下标或者索引(index)。大多数编程语言的数组第一个元素的下标是 0

根据维度区分,有 2 种不同的数组: 一维数组 ,多维数组(数组的元素为数组)

历史

第一台数字计算机使用机器语言编程来设置和访问资料表,向量和矩阵计算的数组结构,以及许多其它目的。1945年,在建立第一个范纽曼型架构计算机时,约翰·冯·诺伊曼(John
vonNeumann)写了第一个数组排序程序(合并排序)。数组索引最初是通过自修改代码,后来使用索引寄存器和间接寻址来完成的。1960年代设计的一些主机,如Burroughs B5000及其后继者,使用存储器分段来执行硬件中的索引边界检查。

2.2、堆栈(Stack)

像放盘子一样

堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。

是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操 作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据 在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

撤回,即 Ctrl+Z,是我们最常见的操作之一,大多数应用都会支持这个功能。
你知道它是怎么实现的吗?
答案是这样的:把之前的应用状态(限制 个数)保存到内存中,最近的状态放到第一个。这时,我们需要栈(stack)来实现这个功能。 栈中的元素采用 LIFO (Last In First Out),即后进先出。 下图的栈有 3 个元素,3 在最上面,因此它会被第一个移除:
在这里插入图片描述
By Vectorization: Alhadis - Own work based on: Lifo stack.png by Maxtremus, CC0, https://commons.wikimedia.org/w/index.php?curid=115938639

堆栈使用两种基本操作:推入(压栈,push)和弹出(弹栈,pop):

推入:将资料放入堆栈顶端,堆栈顶端移到新放入的资料。
弹出:将堆栈顶端资料移除,堆栈顶端移到移除后的下一笔资料。

java中对栈的一些操作
Push— 在栈的最上方插入元素
Pop— 返回栈最上方的元素,并将其删除
isEmpty— 查询栈是否为空
Top— 返回栈最上方的元素,并不删除

历史
Stacks 于 1946 年进入计算机科学文献,当时艾伦·图灵使用术语“bury”和“unbury”作为调用子例程和从子例程返回的方法。[2] [3] 子例程两级堆栈已于1945 年在Konrad Zuse的Z4中实现。[4] [5]

慕尼黑工业大学的Klaus SamelsonFriedrich L. Bauer于 1955 年提出了称为Operationskeller(“操作地窖”)的堆栈的想法[6] [7],并于 1957 年申请了专利。 [8] [9] [10] [ 11] 1988 年 3 月,萨梅尔森去世,鲍尔因发明堆栈原理而获得IEEE计算机先锋奖。[12] [7] Charles Leonard Hamblin在 1954 年上半年[13] [7]以及Wilhelm Kämmerer [ de ]在 1958 年通过他的automatisches Gedächtnis(“自动记忆”)独立开发了类似的概念。 [14] [15] [7]

  1. 图灵,艾伦·马西森(1946-03-19) [1945]。自动计算引擎 (ACE) 数学部门的开发提案。(注:1946 年 3 月 19 日提交给英国国家物理实验室执行委员会。)
  2. 卡彭特,布莱恩·爱德华;罗伯特·威廉·多兰(1977-01-01) [1975 年 10 月]。“另一个图灵机”。计算机杂志。20(3):269-279。DOI:10.1093/comjnl/20.3.269。(11页)
  3. Blaauw,格里特·安妮;小布鲁克斯、弗雷德里克·菲利普斯(1997)。计算机体系结构:概念和演变。美国马萨诸塞州波士顿:Addison-Wesley Longman Publishing Co., Inc.
  4. 查尔斯·埃里克·拉福雷斯特(2007 年 4 月)。“2.1 Lukasiewicz 和第一代:2.1.2 德国:Konrad Zuse (1910–1995);2.2 第一代堆栈计算机:2.2.1 Zuse Z4”。第二代堆栈计算机体系结构(PDF)(论文)。加拿大滑铁卢:滑铁卢大学。第 8, 11 页。原始存档于 2022-01-20 (PDF) 。检索日期:2022 年 7 月 2 日。 (178页)
  5. 克劳斯·萨梅尔森(1957) [1955]。写于德国德累斯顿 Internationales Kolloquium über Probleme der Rechentechnik。Probleme der Programmierungstechnik(德语)。德国柏林:VEB Deutscher Verlag der Wissenschaften。第 61–68 页。(注意。这篇论文于 1955 年首次提出。它描述了一个数字堆栈(Zahlenkeller),但将其命名为线性辅助存储器(Linearer Hilfsspeicher)。)
  6. Fothe,迈克尔;威尔克,托马斯,编辑。(2015)[2014-11-14]。写于德国耶拿。Keller,Stack und automatisches Gedächtnis – eine Struktur mit Potenzial [地窖、堆栈和自动内存 - 具有潜力的结构] (PDF)(Tagungsband zum Kolloquium 14. 2014 年 11 月,耶拿)。GI 系列:信息学讲义 (LNI) – 主题(德语)。卷。T-7。德国波恩:Gesellschaft für Informatik (GI) / Köllen Druck + Verlag GmbH。国际标准书号 978-3-88579-426-4。ISSN 1614-3213。原始存档于 2020-04-12 (PDF) 。检索于2020 年 4 月 12 日。 [1](77页)
  7. 弗里德里希·路德维希·鲍尔;克劳斯·萨梅尔森(1957-03-30)。“Verfahren zur automatischen Verarbeitung von kodierten Daten und Rechenmaschine zur Ausübung des Verfahrens”(德语)。德国慕尼黑:德国专利局。DE-PS 1094019 。检索于2010 年 10 月 1 日。
  8. 弗里德里希·路德维希·鲍尔;格哈德·古斯(德语)(1982)。Informatik – Eine einführende Übersicht(德语)。卷。第 1 部分(第 3 版)。柏林:施普林格出版社。p。222.国际标准书号 3-540-11722-9。Die Bezeichnung ‘Keller’ hierfür wurde von Bauer und Samelson in einer deutschen Patentanmeldung vom 30. März 1957 eingeführt。
  9. 克劳斯·萨梅尔森;弗里德里希·路德维希·鲍尔(1959)。“Sequentielle Formelübersetzung”[顺序公式翻译]。Elektronische Rechenanlagen(德语)。1(4):176-182。
  10. 克劳斯·萨梅尔森;弗里德里希·路德维希·鲍尔(1960)。《顺序公式翻译》。ACM 的通讯。3(2):76-83。号码:10.1145/366959.366968。S2CID 16646147。
  11. “IEEE-计算机先锋奖 – Bauer, Friedrich L.” 慕尼黑工业大学计算机科学学院。1989年1月1日。原文存档于2017-11-07。
  12. 查尔斯·伦纳德·汉布林(1957 年 5 月)。基于数学符号的无地址编码方案(PDF)(打字稿)。新南威尔士理工大学。第 121-1–121-12 页。原始存档于 2020-04-12 (PDF) 。检索于2020 年 4 月 12 日。 (12页)
  13. Kämmerer, Wilhelm [德语] (1958-12-11)。Ziffern-Rechenautomat mit Programmierung nach mathematischem Formelbild(资格论文)(德语)。德国耶拿:数学自然科学学院,弗里德里希席勒大学。瓮:nbn:de:gbv:27-20130731-133019-7。PPN:756275237。原始存档于2023-10-14 。检索日期:2023 年 10 月 14 日。 [2](2+69页)
  14. Kämmerer, Wilhelm [德语] (1960)。自动化设备。Elektronisches Rechnen und Regeln(德文)。卷。1. 德国柏林:Akademie-Verlag。

2.3、队列(Queue)

队列,又称为伫列(queue),计算机科学中的一种抽象资料型别,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

队列的操作方式和堆栈类似,都是采用线性结构存储数据,唯一的区别在于队列只允许新数据在后端进行添加。

下图展示了一个队列,1 是最上面的元素,它会被第一个移除:
在这里插入图片描述
单例队列
单链队列使用链表作为基本数据结构,所以不存在伪溢出的问题,队列长度也没有限制。但插入和读取的时间代价较高

循环队列
循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。

阵列队列

Enqueue— 在队列末尾插入元素
Dequeue— 将队列第一个元素删除
isEmpty— 查询队列是否为空
Top— 返回队列的第一个元素

2.4、链表(Linked List)

在计算机科学中,链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。

链表类型

  • 循环链表

  • 单链表:简单的就是一个节点有两个部分一个部分是数据另外一个☞向下一个地址
    在这里插入图片描述

  • 双向链表:双向链表就和上面差不多,是三部分多了一个部分记录前面一个节点的地址
    在这里插入图片描述

  • 块状链表
    块状链表本身是一个链表,但是链表储存的并不是一般的数据,而是由这些数据组成的顺序表。每一个块状链表的节点,也就是顺序表,可以被叫做一个块。图片来源 OI WIKI网站 仅供参考
    在这里插入图片描述

  • 危险操作"异或链表"
    维基百科(仅供参考)

链表存储方式有
共用存储(链表的节点和其它的数据共用存储空间)
和节点

独立存储空间存储

一个链表或者多个链表使用独立的存储空间,一般用数组或者类似结构实现,优点是可以自动获得一个附加数据:唯一的编号,并且方便调试;缺点是不能动态的分配内存。当然,另外的在上面加一层块状链表用来分配内存也是可以的,这样就解决了这个问题。这种方法有时候被叫做数组模拟链表,但是事实上只是用表示在数组中的位置的下标索引代替了指向内存地址的指针,这种下标索引其实也是逻辑上的指针,整个结构还是链表,并不算是被模拟的(但是可以说成是用数组实现的链表)。

堆栈,队列 就是链表构建的

链表开发于1955年至1956年,由当时所属于兰德公司的艾伦·纽厄尔、克里夫·肖和司马贺在他们编写的信息处理语言(IPL)中做为原始数据类型所编写。IPL被作者们用来开发几种早期的人工智能程序,包括逻辑推理机,通用问题解算器和一个计算机象棋程序。

2.5、树(Tree)

树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。

在这里插入图片描述

  • 每个节点都只有有限个子节点或无子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;
  • 树里面没有环路(cycle)

TREE分类

有序/无序

  • 有序树/搜索树/查找树:树中任意节点的子节点之间有顺序关系,这种树称为有序树。即树的所有节点按照一定的顺序排列,这样进行插入、删除、查找时效率就会非常高

  • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树。


平衡/不平衡

  • 平衡树
    • 绝对平衡:所有叶节点在同一层
    • 非绝对平衡
  • 不平衡树

节点分叉情况

  • 等叉树: 是每个节点的键值个数都相同、子节点个数也都相同。
    • 二叉树: 每个节点最多包含有两个子树的树为二叉树。
      • 完全二叉树: 对于一棵二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
        • 满二叉树: 所有叶节点都在最底层的完全二叉树;
      • 平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
      • 排序二叉树(二叉查找树(英语:Binary Search Tree)):也称二叉搜索树、有序二叉树;
    • 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;
    • 多叉树
  • 不等叉树: 每个节点的键值个数不一定相同、子节点个数也不一定相同
    • B树:对不等叉树的节点键值数和插入、删除逻辑添加一些特殊的要求,使其能达到绝对平衡的效果。B树全称Balance Tree。如果某个B树上所有节点的分叉数最大值是m,则把这个B数叫做m阶B树。(B树有很多种)

2.6、散列表(Hash table)哈希表

根据键(Key)而直接访问在存储器存储位置的数据结构。也就是说,它通过计算出一个键值的函数,将所需查询的数据映射到表中一个位置来让人访问,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

基本概念

  • 若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接获取所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。
  • 对不同的关键字可能得到同一散列地址,即在这里插入图片描述
    这种现象称为冲突(英语:Collision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。
  • 若对于关键字集合中的任一个关键字,经散列函数镜像到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。

效率
散列表的查找过程基本上和造表过程相同。一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。

查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:

  1. 散列函数是否均匀;
  2. 处理冲突的方法;
  3. 散列表的载荷因子(英语:load factor)。

载荷因子
散列表的载荷因子定义为:
α = 填入表中的元素个数 / 散列表的长度

α是散列表装满程度的标志因子。由于表长是定值,
α 与“填入表中的元素个数”成正比,所以,
α 越大,表明填入表中的元素越多,产生冲突的可能性就越大;反之,
α越小,标明填入表中的元素越少,产生冲突的可能性就越小。
实际上,散列表的平均查找长度是载荷因子α的函数,只是不同处理冲突的方法有不同的函数。

2.7、堆, 堆积(Heap)

堆(Heap)是计算机科学中的一种特别的完全二叉树
若是满足以下特性,即可称为堆:“给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆(minheap);
反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆(max heap)。在堆中最顶端的那一个节点,称作根节点(root node),根节点本身没有母节点(parent node)。

堆排序是由JWJ Williams于
1964 年发明的。 该论文还介绍了二叉堆本身就是一种有用的数据结构。[5]同年,Robert W.
Floyd发布了一个改进版本,可以就地对数组进行排序,继续他早期对树排序算法的研究。

性质
堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。

  • 任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
  • 堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

2.8、图(Graph)

图的存储和想象的不一样,更像是组合出来的一个列阵我理解的

在计算机科学中,图(英语:graph)是一种抽象数据类型,用于实现数学中图论的无向图和有向图的概念。

一般的图由节点(也称为顶点)和连接这些节点的边(也称为弧)组成

图的数据结构包含一个有限(可能是可变的)的集合作为节点集合,以及一个无序对(对应无向图)或有序对(对应有向图)的集合作为边(有向图中也称作弧)的集合。节点可以是图结构的一部分,也可以是用整数下标或引用表示的外部实体。

分类
有向图无向图 有方向的就是有向图,没有就是无向,还有多重图,权重图等等
在这里插入图片描述
图片来自:数据结构与算法(十一)——图(Graph)

权重分类

  • 无权图(Unweighted Graph):图中的边不具有任何权重值,仅表示两个顶点之间存在连接。
  • 权重图(Weighted Graph):图中的每条边都有一个关联的权重值,这个权重值可以代表距离、成本或其他相关度量

图的数据结构还可能包含和每条边相关联的数值(edge value),例如一个标号或一个数值(即权重,weight;表示花费、容量、长度等)。

结构

  • 领接表
    节点存储为记录或对象,且为每个节点创建一个列表。这些列表可以按节点存储其余的信息;
    是表示了图中与每一个顶点相邻的边集的集合,这里的集合指的是无序集。。。。
    在这里插入图片描述

  • 邻接矩阵
    一个二维矩阵,其中行与列分别表示边的起点和终点。顶点上的值存储在外部。矩阵中可以存储边的值。

  • 关联矩阵
    一个二维矩阵,行表示顶点,列表示边。矩阵中的数值用于标识顶点和边的关系(是起点、是终点、不在这条边上等)。

用处

对于复杂的数据结构操作,如搜索、遍历(DFS/BFS)、最短路径算法(Dijkstra、Bellman-Ford、Floyd-Warshall
等)以及最小生成树算法(Prim、Kruskal 等),都需要深入理解和掌握图这种数据结构

参考文章

个人笔记,不同意见,望有交流
直接可以点击跳转连接

作者 维基百科

作者:xeh的学习笔记

阿里:通灵义码

相关文章:

数据结构1.0(基础)

近java的介绍, 文章目录 第一章、数据结构1、数据结构 ?2、常用的数据结构数据结构? 逻辑结构and物理结构 第二章、数据结构基本介绍2.1、数组(Array)2.2、堆栈(Stack)2.3、队列(Que…...

anomalib1.0学习纪实-续2:三个文件夹

为了读懂程序,有三个最重要的文件夹,如下图: 正好对应四个类,如下图: 四个类的来源如下图所示: 注意,MVTec是个大类,里面用到了这里的第四个类MVTecDataset,代码如下。…...

【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树

【递归】【后续遍历】Leetcode 101 对称二叉树 解法一: 递归:后序遍历 左右中解法二: 迭代法,用了单端队列 ---------------🎈🎈对称二叉树 题目链接🎈🎈------------------- 解法一…...

Nginx https反向代理

接前一篇文章,今天看看https的反向代理怎么配置。 生成自签名证书和私钥 要使用https,首先需要有证书和私钥,这里创建一个测试用的自签名证书和私钥。 使用 openssl 命令生成服务器私钥文件 openssl genrsa -out server.key 2048生成证书…...

zip解压缩

使用unzip库可以轻松解压zip文件&#xff0c;源码下载地址&#xff1a;http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win #include <Windows.h> #include"unzip.h" SetCurrentDirectory("c:\\"); HZIP hz OpenZip(…...

电动五金工具行业调研:政策促进市场发展

五金工具可以分为建筑五金、日用五金和家居五金等&#xff0c;科技的不断进步下五金工具产品也在逐渐创新进步。在国家一系列政策下五金工具行业更加规范化&#xff0c;使用也更加符合安全要求。 五金工具行业是指生产铁锤、螺丝刀、扳手、钳子、卷尺等小型工具的产业。这些工具…...

【矩阵】托普利茨矩阵

每日一道算法题之托普利茨矩阵 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;LeetCode 给你一个 m x n 的矩阵 a 。如果这个矩阵是托普利茨矩阵&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果矩阵上每一条由左上到右下的对角线上…...

DS:八大排序之归并排序、计数排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、归并排序 1.1 思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子…...

由斐波那契数列探究递推与递归

斐波那契数列定义&#xff1a; 斐波那契数列大家都非常熟悉。它的定义是&#xff1a; 对于给定的整数 x &#xff0c;我们希望求出&#xff1a; f ( 1 ) f ( 2 ) … f ( x ) f(1)f(2)…f(x) f(1)f(2)…f(x) 的值。 有两种方法,分别是递推(迭代)与递归 具体解释如下图 备注…...

红队打靶练习:IMF: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录探测 gobuster dirsearch WEB 信息收集 get flag1 get flag2 get flag3 SQL注入 漏洞探测 脱库 get flag4 文件上传 反弹shell 提权 get flag5 get flag6 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…...

密码管理局以及什么是密评?为什么要做密评(商用密码应用安全性评估)?

文章目录 密码管理局以及什么是密评?为什么要做密评?关于密码管理局国家密码管理局属于什么级别?什么是密评?密评发展史为什么要做密评?目前密码应用的几个问题密评对象不做“密评”或密评不合格有什么影响?如何才能顺利通过密评?密评的相关标准参考密码管理局以及什么是…...

六、Datax通过json字符串运行

Datax通过json字符串运行 一、场景二、代码实现 一、场景 制作一个web应用&#xff0c;在页面上配置一个json字符串&#xff0c;保存在数据库里面。在执行json的时候&#xff0c;动态在本地创建一个json文件后执行&#xff0c;并识别是否成功&#xff0c;将执行过程保存在数据…...

关于数据库

目录 一 什么是数据库&#xff08;DB) 二 什么是数据库管理系统(DBMS) 三 数据库的作用/好处 一 什么是数据库&#xff08;DB) 简单理解&#xff0c;数据库是存放数据的地方&#xff0c;就像冰箱是存放冷鲜食品的地方。 数据是数据存储的基本对象&#xff0c;而数据分为多…...

洛谷C++简单题小练习day14—闰年推算小程序

day14--闰年推算小程序--2.18 习题概述 题目描述 输入 x,y&#xff0c;输出 [x,y] 区间中闰年个数&#xff0c;并在下一行输出所有闰年年份数字&#xff0c;使用空格隔开。 输入格式 输入两个正整数 x,y&#xff0c;以空格隔开。 输出格式 第一行输出一个正整数&#xf…...

房企关注的典型数字化场景之一:数字营销

过去在增量时代下&#xff0c;房企的模式是“拿地-开发-卖房-拿地”&#xff0c;谁拿的地多、卖得快、利润高&#xff0c;谁“活得好”。而进入存量时代&#xff0c;加上政策调控影响&#xff0c;房企需要将核心竞争力转向精细化、多元化运营。 根据克而瑞数据统计&#xff0c…...

BMS再进阶(新能源汽车电池管理系统)

引言 一文入门BMS&#xff08;电池管理系统&#xff09;_bms电池管理-CSDN博客 BMS进阶&#xff08;Type-C、PD快充、充电IC、SOC算法、电池管理IC&#xff09;_充电ic asi aso功能-CSDN博客 本文是上面两篇博客的续篇&#xff0c;之前都是讲解一些BMS基本原理&#xff0c;…...

K8s Deployment挂载ConfigMap权限设置

目录 样例 1. 样例 …… volumes: - configMap:defaultMode: 420name: ${Existed_configmap_name} …… 其中“defaultMode: 420”是设置权限的 2. 解析 在K8s&#xff08;Kubernetes&#xff09;中&#xff0c;defaultMode是用来设置Configmap挂载后的文件权限&#xff0…...

百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证

近日&#xff0c;百度智能云的分布式关系型数据库软件 V3.0 与龙芯中科技术股份有限公司的龙芯 3C5000L/3C5000 处理器平台完成兼容性测试&#xff0c;功能与稳定性良好&#xff0c;获得了龙架构兼容互认证证书。 龙芯系列处理器 通用 CPU 处理器是信息产业的基础部件&#xf…...

模拟电子技术——振荡器基本原理、RC桥式振荡器、矩形波发生电器

文章目录 前言一、振荡器什么是振荡器振荡器的基本电路结构振荡条件起振条件和稳幅原理 二、RC桥式振荡器什么是RC桥式振荡器RC串并联网络的选频特性振荡条件完整频率特性曲线举例 三、矩形波发生电器什么是矩形波发生电路稳态与暂态PWM脉宽调制矩形波发生电路基本组成 总结 前…...

Vue3+Vite+TS+Pinia+ElementPlus+Router+Axios创建项目

目录 初始项目组成1. 创建项目1.1 下载项目依赖1.2 项目自动启动1.3 src 别名设置vite.config.ts配置文件tsconfig.json配置若新创项目ts提示 1.4 运行测试 2. 清除默认样式2.1 样式清除代码下载2.2 src下创建公共样式文件夹style2.3 main.js中引入样式2.4 安装sass解析插件 2.…...

VMware虚拟机安装CentOS7

对于系统开发来说&#xff0c;开发者时常会需要涉及到不同的操作系统&#xff0c;比如Windows系统、Mac系统、Linux系统、Chrome OS系统、UNIX操作系统等。由于在同一台计算机上安装多个系统会占据我们大量的存储空间&#xff0c;所以虚拟机概念应运而生。本篇将介绍如何下载安…...

Avalonia学习(二十四)-系统界面

目前项目式练习&#xff0c;界面内容偏多&#xff0c;所以不给大家贴代码了&#xff0c;可以留言交流。此次为大家展示的是物联项目的例子&#xff0c;仅仅是学习&#xff0c;我把一些重点列举一下。 界面无边框 以前的样例主要是通过实现控件来完成的&#xff0c;前面已经有窗…...

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中&#xff0c;页面路由&#xff08;Router&#xff09;机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由&#xff0c;揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…...

MCU中断响应流程及注意事项

本文介绍MCU中断响应流程及注意事项。 1.中断响应流程 中断响应的一般流程为&#xff1a; 1)断点保护 硬件操作&#xff0c;将PC&#xff0c;PSR等相关寄存器入栈保护 2)识别中断源 硬件操作&#xff0c;识别中断的来源&#xff0c;如果多个中断同时发生&#xff0c;高优…...

基于Java SSM框架实现网上报名系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现网上报名系统演示 摘要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个B/S结构的网上报名系统&#xff0c;会使网上报名系统工作系统化、规范化&#xff0c;也会提高网…...

Eclipse - Formatter

Eclipse - Formatter References Window -> Preferences -> C/C -> Code Style -> Formatter BSD/Allman [built-in] or K& R [built-in] References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

算法练习-01背包问题【含递推公式推导】(思路+流程图+代码)

难度参考 难度&#xff1a;困难 分类&#xff1a;动态规划 难度与分类由我所参与的培训课程提供&#xff0c;但需 要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0…...

Eclipse - Format Comment

Eclipse - Format & Comment 1. Correct Indentation2. Format3. Toggle Comment4. Add Block Comment5. Remove Block CommentReferences 1. Correct Indentation Ctrl A: 选择全部代码 Ctrl I: 校正缩进 or right-click -> Source -> Correct Indentation 2. F…...

mqtt 协议的概念和理解

一、概述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的”轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1…...

2024年大家都在用的AI写作软件推荐,写作不再是难题

人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。在写作领域&#xff0c;AI写作软件已经成为越来越多人的首选工具。这些软件利用先进的自然语言处理技术和机器学习算法&#xff0c;能够帮助用户快速生成高质量的文章、论文、商业计划书等。在本文中&#xf…...

CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?

《嵌入式工程师自我修养/C语言》系列——CPU是如何工作的&#xff1f;什么是冯诺依曼架构和哈弗架构&#xff1f; 一、CPU内部结构及工作原理1.1 CPU的结构1.2 CPU工作流程举例 二、计算机体系结构2.1 冯诺依曼架构2.2 哈弗架构 三、总结 快速学习嵌入式开发其他基础知识&#…...

OpenAI视频生成模型Sora的全面解析:从扩散Transformer到ViViT、DiT、NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0、W.A.L.T》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…...

【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

图解 JVM 垃圾回收&#xff08;一&#xff09; 1.前言1.1 什么是垃圾1.2 内存溢出和内存泄漏 2.垃圾回收的定义与重要性3.GC 判断策略3.1 引用计数算法3.2 可达性分析算法 4.引用类型5.垃圾回收算法5.1 标记-复制&#xff08;Copying&#xff09;5.2 标记-清除&#xff08;Mark…...

做抖店需要注意的几大点,新手最易踩坑,都给你们总结到这了!

我是电商珠珠 抖店的运营流程很简单&#xff0c;选品上架、获取流量&#xff08;找达人、自播、投千川等&#xff09;、出单发货、做体验分等。出新手期就会有体验分&#xff0c;体验分就是店铺的权重&#xff0c;体验分越高店铺的权重也就越大。 但是作为新手的话&#xff0…...

小程序API能力汇总——基础容器API(三)

ty.getAccountInfo 获取小程序账号信息 需引入MiniKit&#xff0c;且在>3.1.0版本才可使用 参数 Object object 属性类型默认值必填说明completefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&#xff09;successfunction否接口调用成功的回调函数…...

处理目标检测中的类别不均衡问题

目标检测中&#xff0c;数据集中类别不均衡是一个常见的问题&#xff0c;其中一些类别的样本数量明显多于其他类别。这可能导致模型在训练和预测过程中对频繁出现的类别偏向&#xff0c;而忽略掉罕见的类别。本文将介绍如何处理目标检测中的类别不均衡问题&#xff0c;以提高模…...

(03)Hive的相关概念——分区表、分桶表

目录 一、Hive分区表 1.1 分区表的概念 1.2 分区表的创建 1.3 分区表数据加载及查询 1.3.1 静态分区 1.3.2 动态分区 1.4 分区表的本质及使用 1.5 分区表的注意事项 1.6 多重分区表 二、Hive分桶表 2.1 分桶表的概念 2.2 分桶表的创建 2.3 分桶表的数据加载 2.4 …...

2024年首发!高级界面控件Kendo UI全新发布2024 Q1

Kendo UI是带有jQuery、Angular、React和Vue库的JavaScript UI组件的最终集合&#xff0c;无论选择哪种JavaScript框架&#xff0c;都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件&#xff0c;Kendo UI可以创建数据丰富的桌面、平板和移动Web应用程序。通过响应…...

stable diffusion webui学习总结(2):技巧汇总

一、脸部修复&#xff1a;解决在低分辨率下&#xff0c;脸部生成异常的问题 勾选ADetailer&#xff0c;会在生成图片后&#xff0c;用更高的分辨率&#xff0c;对于脸部重新生成一遍 二、高清放大&#xff1a;低分辨率照片提升到高分辨率&#xff0c;并丰富内容细节 1、先通过…...

java 培训班预定管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 培训班预定管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xf…...

Python内置函数06——join

文章目录 概述语法实例展示注意事项 概述 Python内置函数join()用于将序列中的元素连接成一个字符串。 语法 str.join(iterable) 参数&#xff1a;iterable——一个可迭代对象中元素连接而成&#xff0c;元素之间用str分隔。 实例展示 eg1&#xff1a;用join()连接列表中…...

linux安装单机版redis详细步骤,及python连接redis案例

文章目录 linux相关工具yum方式安装redis使用编译安装redis配置redis为systemctl启动其它: 安装redis6.0python连接redis案例 linux相关工具 ./redis-benchmark #用于进行redis性能测试的工具 ./redis-check-dump #用于修复出问题的dump.rdb文件 ./redis-cli …...

ts总结大全

ts类型 TS类型除了原始js类型之外&#xff0c;还增加类型&#xff0c;例如&#xff1a;枚举、接口、泛型、字面量、自定义、类型断言、any、类型声明文件 数组类型两种写法&#xff1a;类型 [] 或 Array <类型> let arr:number[][1,2,3,4] let arr:string[][a] let arr…...

前端登录随机数字字母组合验证

背景:系统登录页面只有用户名密码一种校验方式,没有验证码,可能导致暴力破解。 实现逻辑: <el-form-item prop="code"><el-inputv-model="loginForm.captchaCode"auto-complete="off"placeholder="验证码"style="wi…...

基于Java+SpringBoot+vue+elementui 实现即时通讯管理系统

目录 系统简介效果图源码结构试用地址源码下载地址技术交流 博主介绍&#xff1a; 计算机科班人&#xff0c;全栈工程师&#xff0c;掌握C、C#、Java、Python、Android等主流编程语言&#xff0c;同时也熟练掌握mysql、oracle、sqlserver等主流数据库&#xff0c;能够为大家提供…...

代码随想录算法训练营第50天(动态规划07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

动态规划part07 70. 爬楼梯 &#xff08;进阶&#xff09;解题思路总结 322. 零钱兑换解题思路总结 279.完全平方数解题思路 70. 爬楼梯 &#xff08;进阶&#xff09; 这道题目 爬楼梯之前我们做过&#xff0c;这次再用完全背包的思路来分析一遍 文章讲解&#xff1a; 70. 爬…...

【软考问题】-- 13 - 知识精讲 - 项目绩效域管理

一、基本问题 问题1&#xff1a;干系人绩效域的预期目标主要包含什么&#xff1f; ①与干系人建立高效的工作关系&#xff1b;②干系人认同项目目标&#xff1b;③支持项目的干系人提高了满意度&#xff0c;并从中收益&#xff1b;④反对项目的干系人没有对项目产生负面影响。问…...

VSCode无法连接远程服务器的两种解决方法

文章目录 VSCode Terminal 报错解决方式1解决方式2you are connected to an OS version that is unsupported by Visual Studio Code解决方法 VSCode Terminal 报错 直接在terminal或cmd中使用ssh命令可以连接服务器&#xff0c;但是在vscode中存在报错&#xff0c;最后一行为…...

【Kuiperinfer】笔记01 项目预览与环境配置

学习目标 实现一个深度学习推理框架设计、编写一个计算图实现常见的算子&#xff0c;例如卷积、池化、全连接学会如何进行算子的优化加速使用自己的推理框架推理常见模型&#xff0c;检查结果是否能够和torch对齐 什么是推理框架&#xff1f; 推理框架用于对已经训练完成的模…...

都2024了,你还在使用websocket实现实时消息推送吗?

前言 在日常的开发中&#xff0c;我们经常能碰见服务端需要主动推送给客户端数据的业务场景&#xff0c;比如数据大屏的实时数据&#xff0c;比如消息中心的未读消息&#xff0c;比如聊天功能等等。 本文主要介绍SSE的使用场景和如何使用SSE。 服务端向客户端推送数据的实现…...