N!组合,如何找到最好的一个而不杀死计算机?

时间:2013-05-17 02:18:43

标签: algorithm math

我会直截了当地说。我正在开发一个负责安排的网络或电话应用程序。我希望学生输入他们所选择的课程,然后我给他们提供符合他们要求的课程组合。

但是,假设有150门课程符合他们的要求,他们正在寻找3门课程。那将是150C3组合,对吗?

在浏览器或移动设备上运行这样的东西是否可行?

4 个答案:

答案 0 :(得分:2)

首先,您需要一个更智能的算法来修剪搜索树。此外,如果您反复对同一组课程执行此操作,那么在服务器上执行计算会更好,并且可能预先计算可行的数据结构可以减少查询的执行时间。例如,您可以创建一个树,其中节点下的每个子树都包含“兼容”的节点。

答案 1 :(得分:1)

对我来说听起来像你完全错了。在大多数院校,有1)毕业课程要求,2)许多要求和选修课的先决条件。这不是一个纯粹的组合问题,它是一个依赖树。例如,如果学生的专业都需要课程201,课程301和课程401,则较高编号的编号较低的编号作为先决条件,而学生是青少年,您应该强烈建议尽快选择课程201。

答案 2 :(得分:0)

是的,数学我认为我可以处理!

如果有150个课程,你必须选择3个,那么可能的数量是(150*149*148)/(3*2)(每个杰瑞的修正),这肯定比150因子更好,这是更多的零;)< / p>

现在,你真的不想构建一个大小的数组,而你不需要!所有Web语言都有随机选择数组中元素的想法,因此您可以在数组中获取一个元素并从中请求3个随机唯一条目。

虽然潜在的课程组合非常大,但根据您的帖子,我认为没有理由尝试计算它们。从n大小的列表中随机选择k项的任务即使对于旧的慢速设备也是微不足道的!

是否有任何特殊原因需要计算所有潜在的课程组合,而不仅仅是将一个随机选择作为建议抓包?如果没有,问题就解决了!

答案 3 :(得分:0)

选项1(Time \ Space代价昂贵):让用户在手机上浏览(150 * 149 * 148)列表中的可能选择,逐页,处理在服务器上完成侧的。

选项2(简单):代替(150 * 149 * 148)-item决策树,提供一个150个项目的包,如果他从包中选择一个项目,将其从包。

选项3(复杂):使用依赖关系树扩展您的决策树(可能的选择)(父课程需要子课程)和学生已经采取的课程列表,以及他的跟踪\水平。

据我所知,大多数教育系统使用第三种选择,这需要为学生提供个人资料。