数据逻辑结构 的 二元组表示法

转自:https://blog.csdn.net/qq_35733751/article/details/80444757



对于数据的逻辑结构还有一种二元组表示法,下面是二元组表示方法。

逻辑结构二元组表示方法:B = (D , R)
B——数据结构
D——数据元素的集合
R——D上二元关系的集合

  在上面这种二元组表示方法中,B就是一种数据结构, 用上面的二元组来表示B这种数据结构时,就是由数据元素的集合D和D中的二元关系的集合R组成的,通过这句话,我们可以明白:
D=di|1≤i≤n,n≥0
, 数据元素的集合

  di
表示的是集合D中第i个节点或数据元素,换句话说,数据元素的集合D就是由多个di

组成的。
这里写图片描述
图1-学生信息表

  如图1所示,每一个同学的信息(学号,姓名,班号)都是一个数据元素,也就是说,数据元素的结合D包括了图中的每一位同学,而di

则表示图中的第i个同学的信息。另外,我们知道学号是具有唯一性,且不会重复,因此我们在抽取数据集合时,可以用学号来代表每一位同学的信息(学号,姓名,班号)。

  n表示了数据元素的集合D中节点或元素的个数,如果n为0则说明D中节点或元素个数为0,D是一个空集。

R=rj|1≤j≤m,m≥0
, D上二元关系的集合

  R代表了D上二元关系的集合,这个二元关系是表示上图中(数据元素的集合D中)的两两元素之间的关系,比如:100和101这两个数据元素之间的关系就是一个二元关系,101和102也是如此。也就是说,集合R中有多个二元关系。

  rj

表示了集合R中的第j个二元关系,且每个关系用序偶表示。

  序偶表示方法: <x,y>
, (x,y)

,括号中的x,y两个元素之间的关系就是一个二元关系。

  x为第一个元素,y为第二个元素,x为y的前驱元素,y为x的后继元素

  对于开始元素来说,没有前驱元素节点;对于终端元素来说,没有后继元素节点。

  <x,y>
代表有向关系,也就是说x为第一,y为第二;而 (x,y)代表无向关系,也就是说没有前后之分,第一和第二之分。因此我们可以知道rj

就是由若干个这样的序偶来表达的。

  对于m来说,m表示了集合R中二元关系的个数,如果m = 0,表示二元关系的集合R是一个空集,R是一个空集的话就说明了集合D中元素间是独立的,不存在任何关系,对这种关系只要了解即可。我们在学习数据结构时应该关注有结构的,彼此之间有关系的数据是如何组织的。

  我们根据上面所描述知道了二元组的表示方法,那么再对于学生表的逻辑结构二元组表示,如下所示:

学生表 = (D,R)
D = {100,101,102,103}
R = {r}
r = {<100,101>,<101,102>,<102,103>}

1
    2
    3
    4

  我们从D上二元关系的集合R中可以知道它们的关系是一个有向关系,具体关系如r中的所示:在<100,101>序偶中100为第一个数据元素,101为第二个数据元素,其他以此类推,不难看出元素之间是两两相邻的关系,最终它们形成的结构就是一个线性结构,如下所示:
这里写图片描述
图2-学生表的逻辑结构

2. 逻辑结构的二元组表示法

  现在我们来看一个例子,根据逻辑结构来画出其二元组表示法。在图3中一个矩阵,数据如下:

这里写图片描述
图3-矩阵的逻辑结构

对应的逻辑结构二元组表示如下:

B = {D,R}
D = {2,6, 3 ,1 ,8 ,12 , 7 ,4 ,5 ,10 ,9 ,11}
R = {r1 ,r2} (r1表示行关系,r2表示列关系)
r1 = {<2,6>,<6,3>,<3,1>,<8,12>,<12,7>,<7,14>,<5,10>,<10,9>,<9,11>}(行关系)
r2 = {<2,8>,<8,5>,<6,12>,<12,10>,<3,7>,<7,9>,<1,4>,<4,11>}(列关系)

1
    2
    3
    4
    5

  D表示了数据元素的集合,而D的大括号中的就是数据元素,而R表示了D上二元关系的集合,也就是在二元关系的集合R中有r1和r2这两个二元关系,其中r1代表行关系,r2代表列关系。
3. 根据二元组画出逻辑结构

  在应用过程中,当给出二元组这种抽象的表示方法之后,我们应该做到能够根据这种抽象的二元组表示法中给出的信息,用逻辑结构图画出来,通过逻辑结构更加直观的判断具体属于哪一种数据结构。
3.1 例1

二元组表示法如下:

B1 = (D,R)
D = {a,b,c,d,e,f,g,h,i,j}
R = {r}
r = { <a,b>,<a,c>,<a,d>,<b,e>,<c,f>,<c,g>,<d,h>,<d,i>,<d,j> }

1
    2
    3
    4

  从它的二元关系的序偶 <a,b>

中可以看出这是一个有向关系,那么其二元组关系对应的逻辑结构如下图所示:

这里写图片描述
图4-逻辑结构1

3.2 例2

二元组表示如下:

B2 = (D,R)
D = {a,b,c,d,e}
R = {r}
r = { (a,b), (a,c), (b,c), (c,d), (c,e), (d,e) }

1
    2
    3
    4

  从它的二元组序偶(a,b)可以看出这是一个无向关系,那么其二元组对应的逻辑结构图表示如下图所示:
这里写图片描述
图5-逻辑结构2

3.3 例3

二元组表示如下:

B3 = (D,R)
D = {48,25,64,57,82,36,75}
R = {r1 , r2}
r1 = {<48,25>,<48,64>,<64,57>,<64,82>,<25,36>,<82,75>}
r2 = {<25,36>,<36,48>,<48,57>,<57,64>,<64,57>,<75,82>}

1
    2
    3
    4
    5

  我们从R = {r1 ,r2} 来看,在二元关系的集合R中有r1,r2两个关系,那么这两个二元关系对应的逻辑结构图如下图所示:
这里写图片描述
图6-逻辑结构3

在图6中r1关系如蓝色箭头所示,r2关系如红色箭头所示。
---------------------
作者:songly_
来源:CSDN
原文:https://blog.csdn.net/qq_35733751/article/details/80444757
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/schips/p/10670424.html

时间: 2024-11-08 19:16:32

数据逻辑结构 的 二元组表示法的相关文章

升序数据中找到二元组为固定之和

1:题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2: 输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10] 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-

主客体二元组是个十分靠近世界的本质的数据结构

我最近有个感悟,就是有方向的二元组.通过对一个有方向的主客体二元组记录集合的解释可以表现出任意的树结构图结构. 这个二元组是常驻内存的,随时变更随时生效,xml或db纯粹用来持久化数据.这个二元组是中心,其它都是附属. 挺巧合的,Dictionary<key,value>这种对象刚好是个有方向的二元组集合. jint这个javascript引擎就是用Dictionary<key,value>来解释javascript的的 而且事实证明效率不是低而是更高,人家根本就没低效啊,事实是是

数据结构 树的链式存储(二叉表示法)

//树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct _TreeNode{ //数据域 int data; //指针域 struct _TreeNode * leftchild;//左孩子指针 struct _TreeNode * rightchild;//右孩子指针 }TreeNode, *TreeNodePointer; /* 以上语法定义了两个类

图像处理之常见二值化方法汇总

图像处理之常见二值化方法汇总 图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多.越 精准的方法计算量也越大.本文主要介绍四种常见的二值处理方法,通常情况下可以满 足大多数图像处理的需要.主要本文讨论的方法仅针对RGB色彩空间. 方法一: 该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的 将像素值设为0(黑色),值大于等于127的像素值设为255(白色).该方法的好处是计算 量少速度快.缺点更多首先阈值为127没有任何理由可以解释,其次完全不

asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化

原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息 在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: : 如果你的环境是英文的,那么你的提示信息就是中英文夹杂的了. 在这种情况下就需要用到自定义错误信息了.其实很简单,就是在model的验证特性中加上[ErrorMessage].比如: Model: [Required(ErrorMessage = "用户名不能为空!")] [Display(Name

[问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供)

[问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供) 将行列式 \(D_n\) 的第二列,\(\cdots\),第 \(n\) 列全部加到第一列,可得 \[ D_n=\begin{vmatrix} \sum_{i=1}^na_i+(n-2)a_1 & a_1+a_2 & \cdots & a_1+a_{n-1} & a_1+a_n \\ \sum_{i=1}^na_i+(n-2)a_2 & 0 & \cdots & a_2+a_{n-1

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

tableau desktop(三)--构建数据视图(二)

前段时间忙于工作的事情,好久没有来记录一点东西了,今天利用周末做点记录吧,最近由于工作的原因,也有两三周没有用tableau了.今天继续上一篇构建数据试图(二). 3.7 参考线和参考区间 参考线通常用来标记轴上的某个特定值或区域.例如,当您在分析多种产品的月销售额时,可能需要在平均销售额标记处包含一条参考线,这样可以将每一种产品的业绩与平均值进行比较..或者您可能需要用阴影沿轴标出某一特定区域.最后,您可能需要使用参考线指定某种分布. ableau 不限制添加的参考线条数.使用"添加参考线&q

菜鸟nginx源码剖析数据结构篇(二) 双向链表ngx_queue_t

nginx源码剖析数据结构篇(二) 双向链表ngx_queue_t Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:October 20h, 2014 1.ngx_queue优势和特点 ngx_queue作为顺序容器链表,它优势在于其可以高效地执行插入.删除.合并操作,在插入删除的过程中,只需要修改指针指向,而不需要拷贝数据,因此,对于频繁修改的容器很适合.此外,相对于STL li