【发布时间】:2011-01-04 11:56:19
【问题描述】:
我们大学的讲座有大约 1000 个免费座位,需要大约 2000 个座位(可能有 500 名学生每人需要 4 个名额)。
我正在使用 CakePHP 开发一个网络应用程序,它可以让学生制作愿望清单,并在每个区块输入 4 个讲座,优先级从 1 到 4。(然后进入 MySQL 数据库)
现在,Web 前端已完成,管理操作(添加讲座、添加讲师等)已完成.. 唯一剩下的就是编写分发算法了。
我应该如何最好地做到这一点?一个 MySQL 脚本似乎很有用,但是 mysql 在循环和 if 构造方面不是很友好,是吗?
将数据导出到某个地方并让另一种语言处理问题是否明智?
编辑:dnagirl 要求提供有关算法的更多信息:
我们没有算法的业务规则。我们从另一所大学的其他人那里改编了一个现有的(非常昂贵的)应用程序,其中包含我们刚刚改编的规则。
他正在做什么(以及我试图克隆的内容,以节省每学期的大笔费用),是这样的:
- 事件(讲座、练习等)都属于一个块(块是例如国际政治,它可能有 4 或 5 个不同的事件)
- 学生每个区块最多可以申请 4 个活动,优先级为 1 到 4。
- 该算法按块工作。对于每个块,根据学生的排名将学生分成不同的组。 (排名是“越高越好”。正常排名是从0到20)
- 从排名最高的一组学生中,随机抽取一名。在他选择的优先级 1 的事件中给他一个座位。如果这个事件已满,给他他选择的优先级 2 的座位;等,减少到 4 个。
- 选择下一个学生,然后做同样的事情,直到每个具有该排名的学生都有一个座位。然后,转到下一个较低的排名,然后再做所有事情。当这个块完成后,对下一个块再次执行所有操作,直到所有块都完成。
我知道这个算法不是最好的解决方案,但我想我现在就克隆它,然后可能会在逻辑/可能性方面进行改进。
【问题讨论】:
-
分配席位的业务规则是什么?选择有可能发生冲突吗?没有足够的信息来提出好的解决方案。
-
我会说使用 SQL 解决基于集合的问题似乎是合理的,但正如 dnagirl 所说,您没有提供有关要实现的分布算法的足够信息。虽然有人可能会争辩说你应该在编写前端之前决定一种算法:)
-
我肯定会通过将数据导出到适当的编程语言并在那里完成工作来解决这个问题。
-
dnagirl:我更新了帖子,现在解释一下算法。我希望它可以理解,英语不是我的母语 :)