【发布时间】:2013-12-28 16:55:19
【问题描述】:
我正在尝试提出一个优雅的解决方案来表示位置/转换 petri 网。 到目前为止,我将它们保存如下:
{:netname {:places {:name tokens, ...}
:transitions #{:t1, :t2, :t3, ...}
:edges_in #{[:from :to tokens], ...}
:edges_out #{[:from :to tokens], ...}}}
tokens 是一个数字,一切都以具有相应名称的符号开头。
//edit - 更多说明: :netname 和 :name 是唯一的,因为必须可以合并 2 个网络,而这些地方又必须具有唯一的名称。数字标记由 petri 网的用户在创建地点或边时确定。
我会感谢一些指向更详细/更好的数据结构的指针或链接来解决我的问题。
//edit 2 - 由于地名的独特性,我重新设计了我对数据结构的第一次尝试。 :places 现在引用哈希图。此外,edges_in 和 out 现在都是哈希图,因为每条边都是唯一的,具有其起点、终点和令牌编号。
//edit 3 - 结构的使用:它的读写数量与我所说的相同。使用培养网的方式,在修改网络和阅读网络之间有一个来回,可能会在最后阅读更多。
我还稍微修改了上面的结构,所以 :edges_in 和 :edges_out 现在将三元组保存为向量而不是列表。这简化了将 hashmap 保存到文件并从中读取它,因为 load-string 将列表计算为表达式。
【问题讨论】:
-
你能详细说明更大的结构吗? :netname 是唯一的吗?它会在给定网络或其他网络的任何地方重复吗?如何查找数字标记以及该数据结构是什么样的?我认为这篇文章发生的一些编辑可能没有澄清你在这里的意思。
-
我现在编辑了一些澄清细节。
-
通常,“最佳”数据结构取决于您需要执行哪些操作,以及您需要执行这些操作的频率。举个简单的例子,(99.9% 读取,0.01% 写入)的“最佳”结构可能与(50% 读取,50% 写入)非常不同。当你开始考虑你需要做什么样的读/写时,它变得更加复杂。也许你可以用你打算用这个数据结构做什么来更新你的问题?
-
我添加了您要求的信息。
-
这是一个关于以人类可读文件格式存储网络结构的问题吗?如果是这样,我想知道为什么 PNML 首字母缩写词还没有弹出。