English 中文(简体)
正确的图表数据结构如何区分同名的节点?
原标题:What is the correct graph data structure to differentiate between nodes with the same name?

我不了解图表(这些图表似乎非常有用),我很想知道,我是否能够就如何安排我的图表提出一些建议。

简言之,请允许我说,我每天和几天前一样收到订购单数据。 例如,昨天,我有登机和老板的命令,我创立了代表他们的两个节点,今天,我收到了一个时代和标志的次序,等等。 每天之后,我的方案还看见谁下令做什么,如果Bob昨天下令开笔,然后是今天的一位老板,它就会形成一个方向。 我的逻辑是,我可以看到谁购买了每天的物品,我可以追踪博博博的购买行为(并可能利用这一方式与本人或其他使用者混为一谈)。

我的问题是,我用网络x(python)为时日制造了 no子,然后是一天又一个 no子,我可以加以区别。

我认为(并且已经)将其命名为第2-Ppencil号,然后扫描整个图表,并删除第2天,以跟踪笔录。 在我看来,这似乎是错误的(更不用说加工商花费昂贵)。 我认为,关键在于,如果我想研究某一天或几天,我就不必扫描整个图表。

由于我的测试数据更大,它越来越混淆不清,所以我怀疑最佳做法是什么? 任何产生的建议都是巨大的(因为网络似乎很完整,因此很可能有这样做的方法)。

提前感谢!

最新信息:仍然无uck,但可能是有益的:

import networkx as nx
G=nx.Graph()
G.add_node( pencil , day= 1/1/12 , colour= blue )
G.add_node( eraser , day= 1/1/12 , colour= rubberish colour. I know thats not a real colour )
G.add_node( pencil , day= 1/2/12 , colour= blue )

因此,我打上了以下指挥系统:

{ pencil : { colour :  blue ,  day :  1/2/12 },  eraser : { colour :  rubberish colour. I know thats not a real colour ,  day :  1/1/12 }}

它显然推翻了1/1/12和1/2/12的笔录,我无法确定我是否能够作出反驳。

最佳回答

这主要取决于您的实际目标。 你们想要分析的是你的图表设计中的确切因素。 但是,根据您的结构,一般结构将由<代码>连接的Products。 日 (我不知道这是否有助于你,但事实上是bipartite graph。)

因此,你的结构就是这样:

node(Person) --- edge(Day) ---> node(Product)

请允许我说,Bob于1月1日购买了笔金:

node(Bob) --- 1/1/12 ---> node(Pencil)

Ok, 如今,Bobi在2月1日购买另一台铅:

          -- 1/1/12 --
         /            
node(Bob)              > node(Pencil)
                     /
          -- 1/2/12 --

页: 1

实际可行的是<代码>networkx。 由于你在节点之间有多个优势,因此,你必须在<代码>Multi Graph MorMultiDiGraph之间作出选择,这取决于您的对口。

In : g = networkx.MultiDiGraph()

In : g.add_node("Bob")
In : g.add_node("Alice")

In : g.add_node("Pencil")

In : g.add_edge("Bob","Pencil",key="1/1/12")
In : g.add_edge("Bob","Pencil",key="1/2/12")

In : g.add_edge("Alice","Pencil",key="1/3/12")
In : g.add_edge("Alice","Pencil",key="1/2/12")

In : g.edges(keys=True)
Out:
[( Bob ,  Pencil ,  1/2/12 ),
 ( Bob ,  Pencil ,  1/1/12 ),
 ( Alice ,  Pencil ,  1/3/12 ),
 ( Alice ,  Pencil ,  1/2/12 )]

迄今为止,情况并非如此。 您实际上可以询问“Did Albert在1/1/12月1日购买 Pen吗?

In : g.has_edge("Alice","Pencil","1/1/12")
Out: False

In : g.has_edge("Alice","Pencil","1/2/12")
Out: True

如果你想在具体的日子里发出所有命令,事情就可能变得坏。 顺便说一句,我不说是密码,而是计算。 守则非常简单:

In : [(from_node, to_node) for from_node, to_node, key in g.edges(keys=True) if key=="1/2/12"]
Out: [( Bob ,  Pencil ), ( Alice ,  Pencil )]

但是,这扫描了网络的所有边缘,并过滤了你们想要的边缘。 我不认为<代码>networkx更好。

问题回答

图表不是最佳办法。 诸如MySQL等关系数据库是保存这一数据并回答谁在什么时候购买的正确工具。

Try this:

每一节点都是一种独特的分类。 之后,创立了一个字典,即:

nodes[ pencil ] = [1,4,...] <- where all of these correspond to a node with the pencil attribute. Replace pencil with whatever other attributes you re interested in.

Just make sure that when you add a node with pencil , you update the dictionary:

node[pencil].append(new_node_id)。 同样,删除。





相关问题
How to add/merge several Big O s into one

If I have an algorithm which is comprised of (let s say) three sub-algorithms, all with different O() characteristics, e.g.: algorithm A: O(n) algorithm B: O(log(n)) algorithm C: O(n log(n)) How do ...

Grokking Timsort

There s a (relatively) new sort on the block called Timsort. It s been used as Python s list.sort, and is now going to be the new Array.sort in Java 7. There s some documentation and a tiny Wikipedia ...

Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Enumerating All Minimal Directed Cycles Of A Directed Graph

I have a directed graph and my problem is to enumerate all the minimal (cycles that cannot be constructed as the union of other cycles) directed cycles of this graph. This is different from what the ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签