4

我正在编写一个小型软件应用程序,该应用程序需要用作当地学校的简单规划工具。它需要解决的“问题”是相当基本的。也就是说,教师需要与所有孩子的父母交谈。但是,有些孩子当然有兄弟姐妹在不同的小组,所以这些谈话需要安排在彼此旁边,以避免父母在晚上 6 点谈话和晚上 10 点谈话的情况。因此,简而言之,给定n 个孩子的集合,其中一些孩子有 1 个或多个兄弟或姐妹,生成一个时间表,其中这些孩子的所有谈话都安排在彼此旁边。

现在,也许这个问题可以非常容易地解决,但另一方面我感觉这可能是一个非常复杂的问题,需要并且可以用某种算法来解决。优雅地。但我说得对吗?有没有?我看过匈牙利算法,但它并不完全适用于这个特定问题。

编辑:我忘了提,所有的谈话都需要同样的时间。

谢谢!

4

4 回答 4

3

我认为这很容易。

首先将属于一起的孩子分组,因为他们有共同的父母。连续安排一个组内的孩子,其余的随机安排。

另一种将其抽象化并使问题变得更容易的方法是从父母的角度来看,将兄弟姐妹视为“孩子”,并给他们更多的时间。然后你可以随机安排父母,但有些需要更多时间(因为他们有多个孩子)。

于 2009-12-02T19:56:32.877 回答
3

一种方法是用声明性约束语言定义问题,然后让它为您解决问题。上次我这样做时,我使用了 ECLiPSe,这是一种漂亮的小语言,您可以在其中通过约束定义问题空间,然后让它找到满足这些约束的允许值。

例如,我相信你有两类约束:

  1. 老师一次只能开一个会议
  2. 同一家庭的所有学生必须有连续的插槽

一旦你在 ECLiPSe 中定义了这些,它将为每个学生计算满足要求的值。如果您采用这种方式,您还可以根据需要轻松添加约束。例如,很容易说插槽 Y 没有教师,或者教师必须轮流做行政工作等。

于 2009-12-02T20:15:44.607 回答
1

这感觉就像一个“背包算法”类型的问题。您需要将家庭成员分组在一起,然后适当地填充插槽。

如果你谷歌“背包算法”,你会看到足够多的文章让你头晕目眩,还有一些很好的编码解决方案。

于 2009-12-02T19:56:45.663 回答
1

我认为如果每次谈话都可以简化为每个活动都有开始时间和结束时间的“活动”,那么你可以使用计算机科学中研究的活动选择算法。它基于贪婪方法,可以在 O(n) 中解决(其中 n 是活动的数量)。您可以在此处找到更多信息。我相信您需要在这里进行预处理,以便能够将兄弟/姐妹问题减少为相同类型的活动。

于 2009-12-02T19:58:20.267 回答