【问题标题】:A concise way to access an element of a set in pseudocode以伪代码访问集合元素的简洁方法
【发布时间】:2015-06-06 18:58:24
【问题描述】:

networklocs 是一组 (n, t, l) 形式的元素,其中 n是网络中的一个节点,t 是时钟滴答,l 是 n 在时间 t 的位置。如何(以伪代码简洁的方式)获取给出节点和时间的 networklocs 元素?

我知道我可以写一个类似的函数

    getElement(ni,t)
    for all (nj,t',l') in networklocs
      if nj=ni and t'= t then return (nj,t',l')

但是有没有更简洁的方法来访问伪代码中集合 networklocs 的元素?

请注意,我希望将 networklocs 保留为一组,因此不适合使用地图或数组的解决方案。

【问题讨论】:

  • 只要人们理解你,你就可以用伪代码编写任何你想要的东西。这就是我们称之为伪代码的原因。 networklocs[node=ni,time=t] 和其他任何东西一样好。

标签: algorithm networking distributed-computing pseudocode


【解决方案1】:

请注意,返回 ni 和 t 是没有用的,因为它们是已知的。在符号和实践中,你会想要

Let M be a map: <N, T> -> L

你想要的操作只是地图查找:

l <- M <n, t>

虽然地图是最可能的表示法,但也可以使用谓词逻辑表达式:

Let get(n,t) be x = <n, t, l> | x \in networklocs

您作为示例提供的循环既不正确也不是伪代码。是map的具体实现,并没有说找不到key的时候怎么办。

【讨论】:

  • :谢谢,但出于某些原因,我想保留 networklocs 作为伪代码的集合。我知道用地图更容易写,但在这里我想知道如果用集合怎么写!
  • @BenBost 没有理由不能将数据定义为一个集合,然后在需要时也定义地图。在列表中进行线性查找的伪代码不是伪代码。是执行。我会在答案中再添加一个建议。
  • 感谢您的提议,但很抱歉我对实施不感兴趣,我向您保证我知道我在发送问题时可以使用地图,正如我所说的那样,我提出的功能不是我认为应该编写伪代码的方式,因此我问了这个问题。而且,你的提议不清楚。你说虽然地图是最有可能的符号,但我们可以使用这个逻辑表达式:“让 get(n,t) 成为 x?你使用 get 和两个键,就像你在地图上使用它一样,这里我只想使用一个集合.
  • @BenBost 抱歉,我无法满足您的要求。我写了很多关于算法的已发表论文并阅读了数百篇。我告诉你计算机科学文献中的做法。如果你有别的事情,我祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多