【发布时间】:2011-11-06 20:23:25
【问题描述】:
问题: 给定一组必修课和选修课,每门课程都只在特定的时间段(有 7 个时间段)提供,生成所有可能的时间表。
例子:
必修课:
- MAT101 - 1、2、5
- HIS102 - 2、4、6
- ENG105 - 3、6、7
还有选修课:
- LIT103 - 3、4、6
- CHE101 - 7、1、2
- BIO101 - 5、4、7
- MAT201 - 6、5、1
- ANT201 - 1
(并非每门选修课都必须包含在时间表中)
可能的解决方案之一是:
- MAT101 [强制性]
- HIS102 [强制性]
- LIT103
- 生物101
- MAT201
- ENG105 [强制性]
- CHE101
用 PHP 编写它最有效的方法是什么?
我目前正在尝试开发一种蛮力解决方案,但这是一项非常繁琐的任务,我正在寻找更有效的方法来完成它。我发现这是一个 NP 完全问题,并搜索了有助于解决此类问题的 PHP 类,但恐怕目前没有这样的类。
【问题讨论】:
-
听起来你真正需要的是一种有效的算法来解决这类问题(不管是什么语言)。您是否尝试过查看其他语言,或完全在特定语言之外寻找解决方案?一旦有了解决方案(算法),您很可能能够将其移植到 PHP 代码中。
-
是的,有一段时间了。 Java 有 Drools planner - 一个专门解决 NP 问题的框架,但是虽然它是开源的,但我认为我没有能力也没有时间自己移植如此庞大而复杂的框架。还有约束编程对解决此类问题非常有帮助,但是我找不到任何 PHP 的约束编程库。
标签: php scheduling np-complete