拿到这部手机时,讲解者有些诧异,很明显的,这部手机有别于市面上的,那种超级大砖头,显得小巧玲珑多了,相信也价格不菲,真是看不出,这么小的年龄的大学生,就能买这么好的手机,想来,是一名富二代吧!
就在讲解人即将转身离开时,张毅突然问道:“如果能快速完成这个程序的话,是不是就能早点离开?”
“当然,早一点完成,咱们的时间就更充裕,成功的可能性就越大,给国家造成的损失就越小。”
看着面前这名稍显稚嫩,但自信满满的面孔,讲解者怔了怔,难道他能很快的解决这个大麻烦吗?不太可能吧!
张毅看着渐渐远去的讲解者,禁不住轻松的笑了笑:对你们来说,这可能是个大难题。对我来说,呵呵!
拿着下发的文件,他仔细看了一遍,对于现在的他来说,尽管还做不到过目不忘,但也差不多了,里面的算法和变量说明,他基本全部记了下来。
算法采用了枚举法,最基本的算法之一,枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。在c语言中,枚举算法一般使用while循环实现。使用枚举算法解题的基本思路如下:确定枚举对象、枚举范围和判定条件。逐一列举可能的解,验证每个解是否是问题的解。
枚举法是能解决问题,但问题是,这种算法的效率太低,追求的是精确值。
关键是碎片的数量太多,如果靠这种精确的计算的话,等撞击发生了,计算还未必能完成。
上面要求的,并不是完全避免撞击,只是利用有限的卫星燃料,进行最小幅度的变轨,规避对卫星伤害最大的撞击。所以枚举法不适合做为计算机程序的基础算法。
脑海中,在已经开发的脑域中,脑波搜索如雷达一般,不断的快速扫描着。
算法有很多,但却未必适合现在的情况,无论怎么说,枚举法是绝对不符合要求。
有了,这种算法不错,在github的浩如烟海的源代码库中,他找到了一种合适的算法。
贪心算法:从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出一个近似解。这个近似解就无限接近于精确值。
首先建立数学模型来描述问题。然后把求解的问题分成若干个子问题。对每一子问题求解,得到子问题的局部最优解。把子问题的局部最优解合并成原来解问题的一个解。
这样的算法,最大限度的利用计算机多线程的性能,以最快的速度来解决问题。最是适合现在这种状况。
拿出稿纸,速度飞快的,完成了算法的流程图。
有了算法,就有了程序的灵魂。考虑到天体运行时的差之毫厘,谬之千里,轨道的参数变量都采用了双精度浮点型,最大程度的保证了计算的精确性。
打开计算机,运行桌面上早已经安装好的tuborc编译器,并没有直接开始写源程序,只是新建了一个.h的库文件,把脑域开发中,得到的一个计算天体运行的库文件,几乎如复制一般,将脑海中搜索到的代码,复制到眼前的计算机上,检查一遍后,做了加密和反编译处理。
有了这个库文件,几乎所有天体运行时,所需要的函数都一一包含在内,他要做的,只是确定变量,调用库函数,完成程序框图所要求的功能。就像写文章,提纲和框架都齐全了,无非就是让它血肉丰满起来而已。
程序编写的如行云流水一般。不到一天的时间,就基本处于完成状态了。
考虑到程序bug会造成的严重后果,张毅小心翼翼的,用自己的测试程序,严格测试了很多遍,修正了一些潜在的bug,尽管这些bug,基本不可能会出现,但不怕一万,就怕万一。
事实上,依他现在的脑域开发水平,和超强的记忆力,再加上远超所有人的c语言编程水平,不太可能会出现程序bug。
尽管已经完成了程序,他却并没有提交上去,这么快的速度解决问题,上面会不会把自己当小白鼠一样给解剖了,还是安全第一。
刚好利用多余的时间,张毅完成了教育版的微硬输入法,和教育版的微硬压缩软件。