外行术语是什么图


18

计算机科学中的图是什么,它们的用途是什么?从外行的角度来看最好。

我已经阅读了维基百科的定义:

在计算机科学中,图是一种抽象数据类型,旨在从数学上实现图和超图概念。

图数据结构由一组有限的(可能是可变的)有序对集合(称为边或弧)组成,这些对对称为某些实体,称为节点或顶点。就像在数学中一样,边(x,y)被称为指向x或从x指向y。节点可以是图结构的一部分,也可以是由整数索引或引用表示的外部实体。

但我正在寻找一个不太正式,更容易理解的定义。


您是指图形数据结构吗?
系统停机

1
是的对不起 如此处en.wikipedia.org/wiki/Graph_(abstract_data_type)中所述的图形,只是我在寻找一个不太正式,更易于理解的定义。
ConditionRacer

@ Justin984带有括号的Wikipedia链接(其中有很多)不起作用,括号与Markdown格式的链接不能很好地配合使用。现在,为将来提供参考,请在问题本身而不是注释中对问题进行任何澄清,因为它们不那么明显,很容易错过它们。我将在问题中编辑您的上述评论……
yannis '10

@ Justin984还请注意,与程序员相比,计算机科学堆栈交换 可能更适合此类问题。别误会我的意思,这个问题在这里完全是一个话题,而且得到了很好的答案,但是如果您查看的社区比我们更关注核心计算机科学概念,这不会有问题(不要不过,如果您将相同的问题发布到多个站点,如果您恰巧将其发布到错误的站点,我们可以将其自动移至正确的位置)。
扬尼斯,2012年

Answers:


26

一个完美的外行例子就是Facebook。您,您的朋友及其朋友等的网络统称为社交图

在此“图形”中,人们被认为是图形的节点,而友谊链接

在Facebook中,朋友是双向关系(A是B的朋友=> B是A的朋友),因此该图是无向图。像Google+或Twitter这样的网络将被视为有向图,因为关系的方向在此具有含义。

所有这些图都称为循环图,因为节点之间的关系可以形成循环。一个家谱,在另一方面,是一种特殊的图形,其中除其他事项外,是非周期性因为不能在家谱relatioship周期。(由于它是有向的和非循环的,因此在技术上被称为有向非循环图(DAG)

这应该涵盖涉及图形的所有基本术语,因此现在您应该可以在该领域中继续学习其余材料。


1
我不敢相信它没有被称为facebook graph api。好的例子!
ConditionRacer

4
家谱不是循环的吗?它不应该,但是不幸的是……
Marjan Venema

1
@MarjanVenema,家谱是循环的吗?(这是一个有向图,因此方向在确定周期时很重要,并且可能没有真正确定步骤关系。)
huon 2012年

@dbaupp:我不想在这里详细介绍,所以我只提一个词:乱伦。
Marjan Venema 2012年

5
@MarjanVenema,您错过了我的意思。有向图中的循环是一种模式A -> B -> C -> A(如箭头的圆圈),乱伦刚给A -> B -> CA -> D -> C(即菱形)。家谱中的一个循环需要时间旅行。
休恩

16

图形是计算机科学中最重要的数学概念之一。

您已经多次查看图表。想象一下,您正在乘飞机从一个城市飞往另一个城市。您不可避免地会在您面前的座椅口袋中找到航空公司的精美光面杂志。在该杂志的背面附近,您几乎总是可以找到一张地图,以圆圈的形式描绘出该航空公司提供服务的城市,而连接这些城市的航班则以曲线显示。那是一张图!以圆圈表示的城市是该图的节点,以曲线表示的航班是边缘。图只是具有节点和连接节点的边的事物。

您可以通过各种方式修饰这些简单的图形。当您查看该地图时,您不想只看到一堆圆和直线。那些城市有名字。标记这些城市将显示标记的图形。(您也可以标记边缘,例如1234号航班。)计算机科学通常将数据与节点(有时与边缘)相关联,但这只是标签的扩展。它仍然是一个标记图。如果您可以直接从城市A飞往城市B,但不能从城市B飞往城市A,则可以得到另一种装饰效果。一种明显的描绘方式是在连接城市的直线上画一个箭头,以描绘这种单向关系。现在您有了一个有向图。

链表,树,状态转换图以及许多其他计算机科学数据结构都是图的示例。这是一个非常强大的概念。


我实际上会扩展该示例,以注意您的示例中描述的所有实体都可以表示为图形中的顶点(城市,平面,杂志,地图等),而地图本身只是一个顶点。
Demian Brecht 2012年

14

更好的问题是“图形不用于什么?”。在许多方面,计算机科学都是图的研究。

用外行的话来说,图是代表连接点的称为“节点”或“顶点”的任意抽象对象的集合。然后,它们通过“路径”或“边缘”连接。抽象数据类型“ Graph”是数学“ Graph”的实现。因此,基本上,您具有节点和边作为字段以及可以在其上执行的各种操作。例如,您可以向图的集合中添加一个新节点(取决于语言,它可以是列表或数组或其他结构)。然后,您可以将该节点链接到现有节点。操作还包括遍历图,检查两个节点是否共享一条边(已连接),从节点或边中检索值以及从图中删除节点或边。

就利用率而言,图在各处使用。网络特别大量地使用了它们,但是在人工智能,数据挖掘,游戏开发,地理信息学和许多其他学科中都可以找到它们。在正式的计算机科学中,他们看到了更多的用途,即作为一种表示状态的方式。

实际上,您可以表示为一组连接的任何内容都可以表示为图形,并通过该ADT以某种形式实现。

这是我制作的示例图形:

图示例


3

图只是由称为顶点的线连接在一起的对象的集合。

术语“图形”是软件开发中使用的许多数据结构的抽象和概括。链接列表,二叉树和AST都是图形。

基本上,任何具有将对象彼此关联的指针的对象集合都是一个图形。一旦有了图,就可以将图论的原理应用于它,以解决某些问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.