笔趣阁 > 我的一九九七 > 第四十二章 贪心算法

第四十二章 贪心算法

作者:飞天小香猪返回目录加入书签投票推荐

推荐阅读:神印王座II皓月当空深空彼岸明克街13号夜的命名术最强战神龙王殿财运天降花娇好想住你隔壁特种奶爸俏老婆

一秒记住【笔趣阁 www.biquge.ac】,精彩小说无弹窗免费阅读!

    仔细的听着周围人的议论,但听来听去,他才明白,问题就集中在一点上:那就是下载频道里提供的免费版本,功能太少,但微硬软件合辑又太贵,教授们买得起,但学生们,有很多可买不起。

    张毅低了头,仔细思索了一下,前世时,如微软、auto desk这样的软件公司,都出过相应的教育版本的软件,价格比普通零售版本便宜很多,不但可以拉来大量的学生用户,将来,这些学生,走向工作岗位后,也会向工作单位推荐所熟悉的软件,这样的做法,各取所需,社会反响也很好。

    抬起头,向着围在周围的教授和学生们说:“我可以在这里给大家一个承诺,此间事了后,我会马上推出教育版的软件,专门对应各位学生和老师们,价格会比较便宜,甚至会有别的好处。

    周围的人听到这些,情不自禁鼓起掌来。

    搞出教育版软件容易,但是,怎么分辨是不是学生或者老师,就比较麻烦了,现在的学校,很少有学生和老师使用.edu的邮箱,毕竟,上网的人太少了。电子邮箱也没有太大的使用价值。

    直到住进招待所后,他还在苦思冥想,到底用什么办法,才能鉴别教育版用户和非教育版用户呢?

    他的脑海里不断的回想着后世,各种各样的反盗版套路。

    第二天,众人吃过早饭,来到了上京大学的一个会议室里。

    会议室里,已经坐了一部分人,有穿军装的军人,头发花白的教授,还有一些大腹便便的官员。

    众人依次落坐后,工作人员拉上了窗帘,幻灯机打出了几个示意图,看得出,这是一个计算天体之间轨道的课题,依张毅后世的眼光来看,似乎是涉及到一些太空碎片,这些碎片每时每刻都在不规则旋转,可能会撞击到轨道上的飞行器。

    讲解员是一名年轻的军官他介绍:这是地球同步轨道上的,已经报废的卫星碎片,这些卫星碎片无时无刻,都在威胁着正常运行的卫星。

    召集大家的目的,就是为了能找出一种算法,并把这种算法形成一个公式,利用计算机选择对卫星威胁相对小一些的碎片,来计算卫星的变轨速度和角度等等,最大程度的保证卫星的健康运行。

    张毅听着这些专有名词,就感觉头晕晕的,前世,他那有接触这种航空航天领域的机会,公开的媒体也没人敢公布这些,对他来说,是完全陌生的领域。

    在座的很多教授和学生,也是一脸懵逼,专业完全不对口有没有。

    似乎是看出了大家的尴尬,讲解者紧接着解释道,考虑到大家对航空航天不太了解,我们就总结了此次计算轨道,所需要的变量,并对这些变量进行了一些优化,相应的算法思路,我们也有了路线,但难点就在于,这样复杂的天体轨道运算,用人工来进行演算,效率太低,处理速度太慢,根本无法满足实际需要。

    美国和前苏联使用的是fortran语言来计算轨道变化,fortran,亦译为福传,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。

    fortran语言版本过多,新版本对旧版本的兼容性是一个大问题,可能会对以后的扩展和使用造成大的影响。

    考虑到fortran语言的不确定性太多,咨询过多位专家后,决定采用intel汇编和c语言来描述数学模型和算法。

    下面会将粗略的算法流程图,发给大家,大家可以提出修改意见。

    相信大家也已经注意到了,招待所的每一个房间里,都分配了一台电脑,并且都已经连接上了互联网,有什么需求请直接告诉楼道口的保安。

    在些期间的所有事情,都是保密的,未经许可,绝对不可以和外界联络,不能外出,不允许外来的访客,招待所处于封闭状态。

    讲解者说完后,就要转身离开,一名保安拦住他,指了指张毅,耳语了一番。

    他马上转身走回到张毅身边,客气的问道:“这位同学,你带着手机是吗?”

    “是的!”张毅边回答,边拿出了手机。

    “不好意思,手机我们暂时帮你保管可以吗?”

    张毅看到这样的情景,心里止不住的吐槽:我可以说不吗?

    耸了耸肩膀,关掉手机,递给对方。

    拿到这部手机时,讲解者有些诧异,很明显的,这部手机有别于市面上的,那种超级大砖头,显得小巧玲珑多了,相信也价格不菲,真是看不出,这么小的年龄的大学生,就能买这么好的手机,想来,是一名富二代吧!

    就在讲解人即将转身离开时,张毅突然问道:“如果能快速完成这个程序的话,是不是就能早点离开?”

    “当然,早一点完成,咱们的时间就更充裕,成功的可能性就越大,给国家造成的损失就越小。”

    看着面前这名稍显稚嫩,但自信满满的面孔,讲解者怔了怔,难道他能很快的解决这个大麻烦吗?不太可能吧!

    张毅看着渐渐远去的讲解者,禁不住轻松的笑了笑:对你们来说,这可能是个大难题。对我来说,呵呵!

    拿着下发的文件,他仔细看了一遍,对于现在的他来说,尽管还做不到过目不忘,但也差不多了,里面的算法和变量说明,他基本全部记了下来。

    算法采用了枚举法,最基本的算法之一,枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。在c语言中,枚举算法一般使用while循环实现。使用枚举算法解题的基本思路如下:确定枚举对象、枚举范围和判定条件。逐一列举可能的解,验证每个解是否是问题的解。

    枚举法是能解决问题,但问题是,这种算法的效率太低,追求的是精确值。

    关键是碎片的数量太多,如果靠这种精确的计算的话,等撞击发生了,计算还未必能完成。

    上面要求的,并不是完全避免撞击,只是利用有限的卫星燃料,进行最小幅度的变轨,规避对卫星伤害最大的撞击。所以枚举法不适合做为计算机程序的基础算法。

    脑海中,在已经开发的脑域中,脑波搜索如雷达一般,不断的快速扫描着。

    算法有很多,但却未必适合现在的情况,无论怎么说,枚举法是绝对不符合要求。

    有了,这种算法不错,在github的浩如烟海的源代码库中,他找到了一种合适的算法。

    贪心算法:从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出一个近似解。这个近似解就无限接近于精确值。

    首先建立数学模型来描述问题。然后把求解的问题分成若干个子问题。对每一子问题求解,得到子问题的局部最优解。把子问题的局部最优解合并成原来解问题的一个解。

    这样的算法,最大限度的利用计算机多线程的性能,以最快的速度来解决问题。最是适合现在这种状况。

    拿出稿纸,速度飞快的,完成了算法的流程图。

    有了算法,就有了程序的灵魂。考虑到天体运行时的差之毫厘,谬之千里,轨道的参数变量都采用了双精度浮点型,最大程度的保证了计算的精确性。

    打开计算机,运行桌面上早已经安装好的tubor c编译器,并没有直接开始写源程序,只是新建了一个.h的库文件,把脑域开发中,得到的一个计算天体运行的库文件,几乎如复制一般,将脑海中搜索到的代码,复制到眼前的计算机上,检查一遍后,做了加密和反编译处理。

    有了这个库文件,几乎所有天体运行时,所需要的函数都一一包含在内,他要做的,只是确定变量,调用库函数,完成程序框图所要求的功能。就像写文章,提纲和框架都齐全了,无非就是让它血肉丰满起来而已。

    程序编写的如行云流水一般。不到一天的时间,就基本处于完成状态了。

    考虑到程序bug会造成的严重后果,张毅小心翼翼的,用自己的测试程序,严格测试了很多遍,修正了一些潜在的bug,尽管这些bug,基本不可能会出现,但不怕一万,就怕万一。

    事实上,依他现在的脑域开发水平,和超强的记忆力,再加上远超所有人的c语言编程水平,不太可能会出现程序bug。

    尽管已经完成了程序,他却并没有提交上去,这么快的速度解决问题,上面会不会把自己当小白鼠一样给解剖了,还是安全第一。

    刚好利用多余的时间,张毅完成了教育版的微硬输入法,和教育版的微硬压缩软件。