一文带你认识30个重要的数据结构和算法

栏目:资讯发布:2023-10-31浏览:1收藏

一文带你认识30个重要的数据结构和算法,第1张

数组是最简单也是最常见的数据结构。它们的特点是可以通过索引(位置)轻松访问元素。

它们是做什么用的?

想象一下有一排剧院椅。每把椅子都分配了一个位置(从左到右),因此每个观众都会从他将要坐的椅子上分配一个号码。这是一个数组。将问题扩展到整个剧院(椅子的行和列),您将拥有一个二维数组(矩阵)。

特性

链表是线性数据结构,就像数组一样。链表和数组的主要区别在于链表的元素不存储在连续的内存位置。它由节点组成——实体存储当前元素的值和下一个元素的地址引用。这样,元素通过指针链接。

它们是做什么用的?

链表的一个相关应用是浏览器的上一页和下一页的实现。双链表是存储用户搜索显示的页面的完美数据结构。

特性

堆栈是一种抽象数据类型,它形式化了受限访问集合的概念。该限制遵循 LIFO(后进先出)规则。因此,添加到堆栈中的最后一个元素是您从中删除的第一个元素。

堆栈可以使用数组或链表来实现。

它们是做什么用的?

现实生活中最常见的例子是在食堂中将盘子叠放在一起。位于顶部的板首先被移除。放置在最底部的盘子是在堆栈中保留时间最长的盘子。

堆栈最有用的一种情况是您需要获取给定元素的相反顺序。只需将它们全部推入堆栈,然后弹出它们。

另一个有趣的应用是有效括号问题。给定一串括号,您可以使用堆栈检查它们是否匹配。

特性

队列是受限访问集合中的另一种数据类型,就像前面讨论的堆栈一样。主要区别在于队列是按照FIFO(先进先出)模型组织的:队列中第一个插入的元素是第一个被移除的元素。队列可以使用固定长度的数组、循环数组或链表来实现。

它们是做什么用的?

这种抽象数据类型 (ADT) 的最佳用途当然是模拟现实生活中的队列。例如,在呼叫中心应用程序中,队列用于保存等待从顾问那里获得帮助的客户——这些客户应该按照他们呼叫的顺序获得帮助。

一种特殊且非常重要的队列类型是优先级队列。元素根据与它们关联的“优先级”被引入队列:具有最高优先级的元素首先被引入队列。这个 ADT 在许多图算法(Dijkstra 算法、BFS、Prim 算法、霍夫曼编码 )中是必不可少的。它是使用堆实现的。

另一种特殊类型的队列是deque 队列(双关语它的发音是“deck”)。可以从队列的两端插入/删除元素。

特性

Maps (dictionaries)是包含键集合和值集合的抽象数据类型。每个键都有一个与之关联的值。

哈希表是一种特殊类型的映射。它使用散列函数生成一个散列码,放入一个桶或槽数组:键被散列,结果散列指示值的存储位置。

最常见的散列函数(在众多散列函数中)是模常数函数。例如,如果常量是 6,则键 x 的值是x%6。

理想情况下,散列函数会将每个键分配给一个唯一的桶,但他们的大多数设计都采用了不完善的函数,这可能会导致具有相同生成值的键之间发生冲突。这种碰撞总是以某种方式适应的。

它们是做什么用的?

Maps 最著名的应用是语言词典。语言中的每个词都为其指定了定义。它是使用有序映射实现的(其键按字母顺序排列)。

通讯录也是一张Map。每个名字都有一个分配给它的电话号码。

另一个有用的应用是值的标准化。假设我们要为一天中的每一分钟(24 小时 = 1440 分钟)分配一个从 0 到 1439 的索引。哈希函数将为h(x) = x小时60+x分钟。

特性

术语:

因为maps 是使用自平衡红黑树实现的(文章后面会解释),所以所有操作都在 O(log n) 内完成;所有哈希表操作都是常量。

图是表示一对两个集合的非线性数据结构:G={V, E},其中 V 是顶点(节点)的集合,而 E 是边(箭头)的集合。节点是由边互连的值 - 描述两个节点之间的依赖关系(有时与成本/距离相关联)的线。

图有两种主要类型:有向图和无向图。在无向图中,边(x, y)在两个方向上都可用:(x, y)和(y, x)。在有向图中,边(x, y)称为箭头,方向由其名称中顶点的顺序给出:箭头(x, y)与箭头(y, x) 不同。

它们是做什么用的?

特性

图论是一个广阔的领域,但我们将重点介绍一些最知名的概念:

一棵树是一个无向图,在连通性方面最小(如果我们消除一条边,图将不再连接)和在无环方面最大(如果我们添加一条边,图将不再是无环的)。所以任何无环连通无向图都是一棵树,但为了简单起见,我们将有根树称为树。

根是一个固定节点,它确定树中边的方向,所以这就是一切“开始”的地方。叶子是树的终端节点——这就是一切“结束”的地方。

一个顶点的孩子是它下面的事件顶点。一个顶点可以有多个子节点。一个顶点的父节点是它上面的事件顶点——它是唯一的。

它们是做什么用的?

我们在任何需要描绘层次结构的时候都使用树。我们自己的家谱树就是一个完美的例子。你最古老的祖先是树的根。最年轻的一代代表叶子的集合。

树也可以代表你工作的公司中的上下级关系。这样您就可以找出谁是您的上级以及您应该管理谁。

特性

二叉树是一种特殊类型的树:每个顶点最多可以有两个子节点。在严格二叉树中,除了叶子之外,每个节点都有两个孩子。具有 n 层的完整二叉树具有所有2ⁿ-1 个可能的节点。

二叉搜索树是一棵二叉树,其中节点的值属于一个完全有序的集合——任何任意选择的节点的值都大于左子树中的所有值,而小于右子树中的所有值。

它们是做什么用的?

BT 的一项重要应用是逻辑表达式的表示和评估。每个表达式都可以分解为变量/常量和运算符。这种表达式书写方法称为逆波兰表示法 (RPN)。这样,它们就可以形成一个二叉树,其中内部节点是运算符,叶子是变量/常量——它被称为抽象语法树(AST)。

BST 经常使用,因为它们可以快速搜索键属性。AVL 树、红黑树、有序集和映射是使用 BST 实现的。

特性

BST 有三种类型的 DFS 遍历:

所有这些类型的树都是自平衡二叉搜索树。不同之处在于它们以对数时间平衡高度的方式。

AVL 树在每次插入/删除后都是自平衡的,因为节点的左子树和右子树的高度之间的模块差异最大为 1。 AVL 以其发明者的名字命名:Adelson-Velsky 和 Landis。

在红黑树中,每个节点存储一个额外的代表颜色的位,用于确保每次插入/删除操作后的平衡。

在 Splay 树中,最近访问的节点可以快速再次访问,因此任何操作的摊销时间复杂度仍然是 O(log n)。

它们是做什么用的?

AVL 似乎是数据库理论中最好的数据结构。

RBT(红黑树) 用于组织可比较的数据片段,例如文本片段或数字。在 Java 8 版本中,HashMap 是使用 RBT 实现的。计算几何和函数式编程中的数据结构也是用 RBT 构建的。

在 Windows NT 中(在虚拟内存、网络和文件系统代码中),Splay 树用于缓存、内存分配器、垃圾收集器、数据压缩、绳索(替换用于长文本字符串的字符串)。

特性

最小堆是一棵二叉树,其中每个节点的值都大于或等于其父节点的值:val[par[x]]

专业的都用中国宗谱网云码宗谱,

智能排版,录入简单

自动排版,经典宣纸印刷

云码宗谱=云谱+网络谱+数码谱+传统谱

我们续修宗谱,要与时俱进,要运用现代科技,要体现时代特色,要不失传统文化。续云码宗谱是时代潮流。能提高家谱质量与续修效率。是行业最好,最广泛应用的软件。

1宗谱数据库存取,满足手机、网站等多平台云操作共享。

2表格填写与专业录入并存,满足不同层次的录入需求。   

324种版式输出,上千种微调,根据各人喜好,自动输出各种家谱版式。

4农历,公历,帝王年号准确互换。

5软件自带多种查错功能,可以减少家谱50%以上错误。 

   ①祖父子三代不可同名(兄弟可同名)

   ②生于时间,殁于时间(殁于大于生于)判定

   ③年龄判定(大于一百岁的列出)   

  ④能查出子大于父母出生时间

⑤能查出有下代,没有上代世系

经过数千年的实践,改造和发展,家谱的格式逐渐成熟、定型和完备。总揽明清时期的家谱,一部完整的家谱的格式大体是这样的:

1谱序

内容主要介绍修谱缘由,修谱目的,修谱过程,修谱人员组成,家族姓氏源流,迁徙经过,郡望,历次修谱情况,编谱原则等。如果过去已经修过谱,旧谱的谱序一并收入新谱。谱序作者可以由主编撰写,也可请名人撰写。

2凡例

主要确定若干条指导修谱的准则,记述家谱编修原则与体例,收录范围,结构特点,各种著录规则、类目分类理由、适用范围,人物入谱标准及其他有关问题的说明。

3谱论

不少家谱专门辟有谱论一章,收录前代名人学士对谱学论述以及对古代谱学经典的摘录,为本谱的撰写提供理论依据。

4恩荣录

主要内容是历代皇帝对家族中的官员及家属的敕书、诰命、赐匾、赐联、御制碑文等,以及地方官员的赐认谕文字等,以显示朝廷对该家族的奖励,提高家族的社会地位和身价。

5像赞、遗像

是本家族中历代英贤、重要人物的图像资料,一般置于卷首,用于光大族望,鞭策子孙。一般排列顺序:从皇帝到姓氏始祖、历代英贤、始迁祖,再到本房祖先像。

6姓氏源流

姓氏是家族的根。姓氏来自何处,根就在哪里。由于时间久远,姓氏十分复杂,有的无法考证,有的似是而非,有的姓源多元。因此,家谱需要设一章以记述全家族的得姓来源和始末,本族的历史渊源与始末,本族始祖、始迁祖、世派、迁徙经过和原委,族人的分布,尤其是本支的迁徙,定居地环境与历史以及各支派外迁历史最为重要,必须详查记述。

7家训族规

是家族为了家族稳定发展,自己主持制定,用以教育、规范和约束家族成员的训诫和法规。其内容十分广泛,条目很多,主要内容是修身、齐家、忠君、敬祖、孝父母、尊师长、崇俭朴、睦乡里、守法纪等,要求族人必须严守族规,若有违犯则以家法制裁。

8祠堂、祠产、坟墓

祠堂是家族祭祀和议事的场所,一般有祠堂的碑文、词联、祠匾和祠堂内神位世次排列等。祠产是记录家族共同财产如祠田、坟地、义庄、学田、山林、房屋;记录族中公共坟地、牌坊等。坟墓包括基地图,坟向,祖坟及各支派墓地分布等

9宇辈谱

也称派语,一般是用家族成员的姓名的第二个字代表辈分,选择有一定涵义的字,按五言,七言组成字辈谱。在封建社会里,每个家族都有自己的字辈谱。有的是帝王赐予,多数是祖先商定,从始祖开始到后代子孙,一代一字作为排序。

10世系

是以图表形式反映家族成员的血缘关系,这是家谱的主体部分,是所有的家谱都共有的,是家谱区别于正史、方志的重要标志。图表排列有横式,竖式和一贯式三种类型。一般以五式为一表。

11世系录

主要内容与世系部分相同,是记载家族成员生、老、病、死、葬的简历,即本人的名、字、义名、字、排行、字号、生卒年月时、寿数、官职、墓地、妻妾的生卒年月时,诰告,岳家、子女嫁之人等。

12图

在家谱的卷首绘有本家族的祖庙、坟墓、祠堂和学校、牧场、山村、桥梁、房屋等族产图,在近代又增加了族人居住图及照片等。

13志

利用记事的体裁,专门记载家族中科名、节寿、仕宦、宗寿、封赠、学校、祠堂、祖产分布、生活环境等资料,内容较为广泛。

14五服图

五服是指古代丧服制度中的五种颜色,即斩哀、齐哀、大功、小功、缌麻。丧服是根据生者与死者的亲疏远近关系而穿的一种服饰。由于五服表明生者与死者的亲疏关系,不仅举行丧礼需要穿戴,而且执行宗族事务,执行法律时都会涉及五服,所以,家谱要记载五服图。

15传记

传记又称行状、行述、志略等。主要是记述本家族中英贤名臣,能工巧匠和有重要贡献而又有影响的人物事迹。明清时期,多记载所谓的“忠臣孝子”、“节妇义夫”的事迹。通过传记,可了解传主所处的时代的社会经济、政治、文化、军事等各方面的情况。

16艺文

主要收录本家族中先人的著述,包括奏疏、殿试文、万言策、诗词、家训、族规、行状和各种文章等。有的全文收录,有的只列其目录

17年谱

对家族中有影响力、德高望重的重要人物,专门记载他们的出生年月日及其生平事迹。

18契纸文约

专门记载和收录与族产有关的契纸文约、管理制度以及家族内部承嗣、婚姻、分家等文书契约。

19领谱字号

古代家谱修成后,很重视保密,为防止外传,在家谱后面都注有顺序号,然后登记造册,某人领某号,并定期抽查。也有的家谱排列许多字,一户族人给一字为领谱字号

20纂修人员和捐资人员名单

家谱最后列出本谱领衔主纂、编修人员姓名;捐资人面姓名,捐资数额以及资金的收支情况

21附记

是家谱编后的说明。简述编修家谱的历程和遇到的问题及其处理办法的说明。

家系图一般至少由几代组成:3代。

家谱图是其以图的形式描述家庭从祖父母到自己三代人的血亲关系和婚姻关系。家谱图是一种基本的临床工具,可以帮助心理咨询与治疗的实践者对来访者及其家庭系统保持一种系统观。家谱图的使用源于系统家庭治疗。

由于家谱图是用视觉的方式呈现家庭中的各种关系及各种有关家庭的信息,因此,在一般的心理咨询中,以家谱图做为工具可以很方便、快捷、有效地收集横向维度上的有关家庭信息;探索、解释、分析来访的困扰或问题;分析家庭结构和家庭关系模式。

家谱图分为三类,即基本家谱图、距离家谱图、细节家谱图。在实际应用中,咨询员头脑中应该有这样一个框架,即家谱图可以反映家庭结构的基本状况,也可以反映家庭成员之间的关系模式,还能够将发生在家庭中的一些生活事件等放在家谱图的框架中。

主要是描述家庭成员的姓名、性别、出生以及死亡日期(也可以只注明年龄,但咨询员要在家谱图底部注出画家谱图的具体时间)、家庭成员的婚姻状况(包括结婚、离婚、再婚等情况)、宗教信仰、职业、最高受教育程度等。

保护隐私。中国家谱族谱数据库是中国农村研究院/政治科学高等研究院历时3年建设的数据库,已收录的电子化家谱族谱资料共17723册,120893卷,居全球第一,网站里设计到个人名字,地址等隐私。不能查阅。

有三种制作方法:

1族内老人编纂

这个很好理解。找族内年龄比较大,对族内人员结构比较清楚地人来完善编修。

2电子书籍

想要做电子家谱通常是需要下载一个app进行家族人员信息的填写,最后自动生成为固定的家谱格式,听起来比较便捷省时,但弊端也存在。例如最主要的这两点:

(1)电子家谱app的使用上比较复杂,修谱人大多年龄偏高,对手机功能不是很了解,研究很久研究不明白,最终还是选择了去专业家谱编印机构做传统纸质家谱。

(2)电子家谱通常家谱格式为固定的几种,只能从其选择一种,并按照其格式要求进行填写信息,有些家庭可能不是很喜欢这些固定格式,或想要改变一些内容,都是实现不了的,最终,也是会选择专业家谱编印机构进行定制化的家谱排版。

3传统纸质家谱

听起来没有随着时代的发展而进步,但实际上传统纸质的家谱进步在细节,例如:

(1)纸质,都知道宣纸印刷是最好的纸质保存材料,但古法宣纸制作出来很是不容易,但当今社会的进步,把宣纸的质量进行了升级,能够满足存放百年的需求。

(2)排版,家谱排版方式可以根据家族人员需求,或信息资料的整理不同,进行排版格式的小改动,更人性化,更易于老师们的家谱资料收集整理工作。

(3)服务,修家谱不是一件快速上手的事情,而是需要专业的知识指导,才能更顺利的开展家谱编印工作,传统纸质家谱印刷公司通常会提供免费的一对一编修指导服务,例如锦秋文谱|中原鉴志谱编印中心即是如此,服务这一点,是电子家谱做不到的。

以上综合,电子家谱和纸质家谱各有优缺点,个人比较倾向传统纸质家谱,纸质家谱更加庄重,比电子家谱更有仪式感,敬重感。当然,以上仅为个人观点,仅供参考。

家谱组成部分:

1、谱名、版次录

2、编修人员名录、家族照片

3、谱序、题词

4、凡例

5、谱论

6、祖先像赞、遗像、

7、目录

8、姓氏源流

9、恩荣录、碑文

10、历代修谱名录

11、祠堂、坟茔、郡望、堂号

12、字辈

13、世系图表

14、家风、家训、家规

15、传记、艺文、家族名贤录

16、风俗礼仪

17、契约、族产

18、家族文献、杂记

19、功德榜、事迹介绍

20、领谱字号

21、附记、后记、留余录

一文带你认识30个重要的数据结构和算法

数组是最简单也是最常见的数据结构。它们的特点是可以通过索引(位置)轻松访问元素。 它们是做什么用的? 想象一下有一排...
点击下载
热门文章
    确认删除?
    回到顶部