通过找到最少量的重复来优化思维导图

时间:2014-01-15 02:25:11

标签: c# algorithm

使用思维导图时,请根据您认为最合适的方式对其进行排序。

例如(tab表示子树)

requirements
  dinner
    food
    forks
    spoons
  breakfast
    food
    forks

这可以使用

编写
food
  requirements at
    dinner
    breakfast
forks
  requirements at
    dinner
    breakfast
spoons
  requirements at
    dinner

算法看起来像什么,以所描述的方式找到最佳排序。最好的方法,最少的重复次数?

第二个例子实际上可能不会减少重复,但它会显示排序/重新排序的含义。

进一步阐述:在这种情况下谈论重复时,我理解不止一次地使用相同的单词/短语。在第一个例子中,食物重复两次,以及叉子。然后我们可以重新排序它,如第二个例子所示。在那里我们有三次晚餐和早餐两次的问题,但至少没有食物两次和叉两次。目标是在给定某个思维导图的情况下尽可能少地重复。

3 个答案:

答案 0 :(得分:1)

当在示例中有两种对象及它们之间的关系时,可以将其建模为weighted Vertex Cover in bipartite graphs,其中权重是度。对于更一般的输入,我不确定哪种写入方式是允许的,哪些是最小化的。

答案 1 :(得分:1)

你有五种关系:

food, dinner
food, breakfast
forks, dinner
forks, breakfast
spoons, dinner

您可以按项目或用餐列出。如果按项目列出,则表示您有三个顶级节点和五个二级节点。如果按用餐列出,则有两个顶级节点,另外还有五个二级节点。

您可以通过选择具有最少独特项目的关系一侧的顶级来减少明显重复。在这种情况下,需要两餐和三件事。所以顶级应该是饭菜。但要明白,你并没有减少冗余。你减少了明显的重复,但这完全是另一回事。

但整个讨论主要是学术性的。真正重要的是你要对数据做些什么。那就是,你会问什么问题?如果问题是“我需要什么才能提供晚餐?”然后按照第一个选项中的显示排列数据会更好。你可以查看“晚餐”,找到你需要的东西。

如果问题是“我有食物和汤匙,我可以提供哪些餐点?”然后另一个安排更容易使用:你查找“食物”和“勺子”,然后结合结果。

事实上,这两个问题都可以用数据排列来回答,但对于特定查询,一种安排比另一种安排更优。通常,您会安排数据,以便快速回答最常见的查询。

因此,“最佳”安排取决于几个方面,其中主要是你将如何使用这些数据。

答案 2 :(得分:0)

从我看来,这是两个问题之一:

用户可视化

为用户提供排序选项!覆盖所有基地,让他们选择。

在我看来,你想要找到最符合逻辑的布局(每个域 - 可能与你的数据模型类似),这是第一个。信息冗余优于通过优化进行混淆。视觉关系比信息关系更快,因为信息关系需要你的眼睛在屏幕上跳跃。

关系数据库规范化

选择一种方法并对其进行分析。瓶颈将是您检索数据所需的条款数量,这完全取决于使用情况。

从根本上说:

  • 如果您的餐具多于餐食,则第一种选择更好。
  • 如果你有更多的餐具,第二种方法更好。

如果你有超过2层,事情变得复杂;)