项目的基本目标就是让您独立地应用在这门课中学到的高级算法思考方式。这个课程项目包含碰到问题,独立地学习材料,做一些思考,并能呈述你所做的东西。不周的项目以不同的方式达到这个目标。
有3种方式来获得这个项目。
阅读性项目
找出一些有趣但富有挑战性的文章,这些文章都必须有相关的主题,写出一个综合了这些文章观点的一个综述。我们将依据你所做展示的清晰度和相对于原文的信息量而给定分数。你不需要给出所有细节的详细证明,读者只需要知道他是如何运作的就行了。
理论性研究
开发一个对一个算法问题的有趣的解决方案。这里的“在趣”意味着更加高效或更简化。一旦你能够对原算法进行改进,改进算法没有下界限制,因此你可能需要一些背景性的阅读。这个项目将依据你对以前项目的改进程度给定分数。
实践项目
我们已经以理论的形式学习了许多算法,但是当运行这些算法时,它们的行为可能会非常驻机构奇怪。抓住一个你感受兴趣的算法,执行它并向上面那样测试它,这类项目将以你如何来解释你所执行的算法,你提出了什么具有启发性的思路,采用什么样的测试用例,以及你如何解释结果来给定分数。
算法论文漏了许多执行细节,当执行算法时那些细节并不是不重要的.你也可以考虑探索启发式的执行,虽然它可能"得不到什么理论上的结果",但是在实际中能产生巨大的改进.一旦你布署了一个算法,你能够测试下它是否能哆在实际中执行.这包括设计有趣的"艰难"的输入使算法执行到溃乏的程序.研究算法的行为可能导致你对算法做出改进并测试这种改进.一篇典型的实施性的论文说"我执行了算法X并且它真的很糟糕,但当我增加了启发式条件Y时,它运行的非常好!"
注意—执行可能需要化费很多时间。确保你在执行一个理论上“很小”的算法。认真的考虑用于测试的输入—理想情况下,它们可能来源于真实世界的问题。或者被设计成强迫算法的某些方面。你可能需要一个对照算法来比较你的改进处算法。不论你采用哪一种方法,结果必须限制在10页纸之内。描述的质量将作为你的一个学分的因素。
一些常见问题
我应该是选择什么样的主题?
最好挑选一个你感受兴趣的主题。你们中许多人都已经参加了一些研究项目;其中的一些思想或许能够揭露出一个算法的组件。可能你当前的系统对于问题X来说用的是一个非常原始的算法,或许可以通过一个更精细的算法来改进它。你可以在这个主题上做一些背景性研究(阅读项目),开发一个理论模型并且设计院一个解决方案(理论项目),或者采用一些现有的算法并尝试执行它(实施项目)。若你不想做任何事情,尝试浏览我们上课所覆盖的那些内容,或者浏览下面所指定的领域中看起来很意思的论文。你不需要局限于上课所覆盖到主题。任何一个用到了算法思想并且采用了这个理论框架去设计一个更高效的算法的主题都是可以的。
我从哪里找到这些论文?
有许多关于算法的论文资源。在这方面做的最好的是三大会议论文,每一种都是一年出一期。
-
关于计算理论的ACM论坛 (STOC) 。
- 关于计算机基础科学的IEEE论坛(FOCS)。
- 关于离散算法的ACM-SIAM 论坛(SODA)。
当然也有许多其它的资源,有一些紧跟学术前沿的杂志也是很不错的。
是否允许合作?
当然允许,我们鼓励合作。以小组合作的形式,项目能够做的更好,你也能做的多一些(多到可能超出小组的期望)。我们建议限制每组人数最多为3人。