三、算法思想分析
八皇后问题是典型的回溯问题,先从空格子起逐行放皇后,如果符合要求即安全则放置,否则返回上一行下一个位置继续,直至最后一行安全放置则为一种放置方式。
批处理作业调度的解空间为排列数,不断利用递归函数直至叶节点,剪枝函数为当前用时与最佳用时的比较。关于时间的计算,每次选择作业后先将机器1用时累加,机器2上总用时需要先比较上一个作业完成时间与此时机器1上的总用时,如果机器1上总用时大于上一作业用时,那么机器2上用时则加上机器1上用时与此作业在机器2上的单独用时,反之,则代表此时机器2仍然在处理上一任务,那么机器2上用时则加上上一作业用时与此作业在机器2上的单独用时。
数字全排列问题的解空间为排列树,依次向下排列,判断是否继续的条件为该数字是否已经使用,通过一个flag与for循环判断即可,直至到了最后一个数字则输出结果。
四、实验过程分析
八皇后问题的难点在于安全条件的设计,即同一列,对角线都不能同时放置,对角线的设计比较巧妙,根据PPT设计向右斜为i-j+N,向左斜为i+j,利用二维数组很好的避免了代码的重复与累赘。
批处理作业调度的回溯条件即当前时间与最佳时间的比较,本题的难点在于时间的计算,最开始对于机器2上的总用时是用一个整型数据记录,但没办法与上一个作业用时比较,或者说不方便进行下一次回溯条件的改变,后来参考课本PPT采用数组记录就解决了。计算时间的另一个问题即作业进入机器2上时,上一个作业是否已经完成,需不需要等待,这里要加判断条件,否则时间计算会出问题。
从数字全排列问题的实验中,我更加熟悉了回溯的基本套路,判断数字是否使用的flag和for循环设计很典型也很实用。