我想把讲座的时间信息存储在第三次规范化数据库中。讲座信息的ER图如下:
由于Lecture_Day是多值属性,所以我按照以下方式设计了数据库:
LectureTimeTable:
_ID | Lecture Start Time | Lecture End Time | Lecture Loaction | Course ID FK
LectureDayTable:
_ID | Lecture Time ID FK | Course ID FK | Lecture Day
创建这些表的查询如下:
CREATE TABLE lectureTimeTable (
_id INTEGER,
我在理解麻省理工学院开放课件讲座中指定的文本对齐问题的动态编程解决方案时遇到了困难。那堂课的一些笔记是的,我指的是笔记的第三页。
我认为动态编程意味着你记住了一些计算,这样你就不需要重新计算,从而节省了你的时间,但在讲座中给出的算法中,我看不到记忆化的任何用途,只是一大堆深度递归调用,即主函数是这样的:
DP[i] = min(badness (i, j) + DP[j] for j in range (i + 1, n + 1))
DP[n] = 0
其中,badness是一个函数,用于确定从行长中减去单词的长度后的未使用空间量。对我来说,这个算法似乎计算了所有可能的“坏”计算,并选择了最小
对于讲座练习,我必须用Answer Set Programming (我们使用Clingo作为解释器)表示以下完整性约束:
“你必须计划一个大师班的时间表。通常,讲座是在周五(8小时)和周六(4或5小时)。第7周和第16周是满的,这意味着讲座从周一到周五,每天8小时,周六,4或5小时的讲座。”
该问题的基本设置如下:
#const n_weeks = 2. % for now we limit the problem size to 2 weeks
#const n_days = 6. % days in a fullweek
week(1..n_weeks).
day(1..n_days)
在最小教室数中安排讲座的问题如下:找到最小教室数来安排所有讲座,使同一教室中不会同时出现两个讲座。
我在书中找到的常见算法是:
Sort intervals by starting time so that s1 ≤ s2 ≤ ... ≤ sn.
d ← 0 //number of classrooms
for j = 1 to n {
if (lecture j is compatible with some classroom k)
schedule lecture j in classroom k
else
allocate a new classroom d + 1
sche
在Openmp讲座中,类似的代码显示为Openmp中的一个竞赛条件。在for循环中,sum+=不在关键部分,因此执行线程的顺序会更改结果。
但在我的节目里不是这样的。无论我运行这个程序的频率有多高,总要打印为285 (1²+2²+3²+4²+5²+6²+7²+8²+9²)。我的节目里似乎没有任何种族歧视。
int main()
{
int sum = 0;
int a[10];
int b[10];
for (int counter = 0; counter < 10; counter++) {