欢迎书友访问新御宅屋
首页我的一九九七 第四十二章 贪心算法

第四十二章 贪心算法

    仔细的听着周围人的议论,但听来听去,他才明白,问题就集中在一点上:那就是下载频道里提供的免费版本,功能太少,但微硬软件合辑又太贵,教授们买得起,但学生们,有很多可买不起。
    张毅低了头,仔细思索了一下,前世时,如微软、auto desk这样的软件公司,都出过相应的教育版本的软件,价格比普通零售版本便宜很多,不但可以拉来大量的学生用户,将来,这些学生,走向工作岗位后,也会向工作单位推荐所熟悉的软件,这样的做法,各取所需,社会反响也很好。
    抬起头,向着围在周围的教授和学生们说:“我可以在这里给大家一个承诺,此间事了后,我会马上推出教育版的软件,专门对应各位学生和老师们,价格会比较便宜,甚至会有别的好处。
    周围的人听到这些,情不自禁鼓起掌来。
    搞出教育版软件容易,但是,怎么分辨是不是学生或者老师,就比较麻烦了,现在的学校,很少有学生和老师使用.edu的邮箱,毕竟,上网的人太少了。电子邮箱也没有太大的使用价值。
    直到住进招待所后,他还在苦思冥想,到底用什么办法,才能鉴别教育版用户和非教育版用户呢?
    他的脑海里不断的回想着后世,各种各样的反盗版套路。
    第二天,众人吃过早饭,来到了上京大学的一个会议室里。
    会议室里,已经坐了一部分人,有穿军装的军人,头发花白的教授,还有一些大腹便便的官员。
    众人依次落坐后,工作人员拉上了窗帘,幻灯机打出了几个示意图,看得出,这是一个计算天体之间轨道的课题,依张毅后世的眼光来看,似乎是涉及到一些太空碎片,这些碎片每时每刻都在不规则旋转,可能会撞击到轨道上的飞行器。
    讲解员是一名年轻的军官他介绍:这是地球同步轨道上的,已经报废的卫星碎片,这些卫星碎片无时无刻,都在威胁着正常运行的卫星。
    召集大家的目的,就是为了能找出一种算法,并把这种算法形成一个公式,利用计算机选择对卫星威胁相对小一些的碎片,来计算卫星的变轨速度和角度等等,最大程度的保证卫星的健康运行。
    张毅听着这些专有名词,就感觉头晕晕的,前世,他那有接触这种航空航天领域的机会,公开的媒体也没人敢公布这些,对他来说,是完全陌生的领域。
    在座的很多教授和学生,也是一脸懵逼,专业完全不对口有没有。
    似乎是看出了大家的尴尬,讲解者紧接着解释道,考虑到大家对航空航天不太了解,我们就总结了此次计算轨道,所需要的变量,并对这些变量进行了一些优化,相应的算法思路,我们也有了路线,但难点就在于,这样复杂的天体轨道运算,用人工来进行演算,效率太低,处理速度太慢,根本无法满足实际需要。
    美国和前苏联使用的是fortran语言来计算轨道变化,fortran,亦译为福传,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。
    fortran语言版本过多,新版本对旧版本的兼容性是一个大问题,可能会对以后的扩展和使用造成大的影响。
    考虑到fortran语言的不确定性太多,咨询过多位专家后,决定采用intel汇编和c语言来描述数学模型和算法。
    下面会将粗略的算法流程图,发给大家,大家可以提出修改意见。
    相信大家也已经注意到了,招待所的每一个房间里,都分配了一台电脑,并且都已经连接上了互联网,有什么需求请直接告诉楼道口的保安。
    在些期间的所有事情,都是保密的,未经许可,绝对不可以和外界联络,不能外出,不允许外来的访客,招待所处于封闭状态。
    讲解者说完后,就要转身离开,一名保安拦住他,指了指张毅,耳语了一番。
    他马上转身走回到张毅身边,客气的问道:“这位同学,你带着手机是吗?”
    “是的!”张毅边回答,边拿出了手机。
    “不好意思,手机我们暂时帮你保管可以吗?”
    张毅看到这样的情景,心里止不住的吐槽:我可以说不吗?
    耸了耸肩膀,关掉手机,递给对方。
    拿到这部手机时,讲解者有些诧异,很明显的,这部手机有别于市面上的,那种超级大砖头,显得小巧玲珑多了,相信也价格不菲,真是看不出,这么小的年龄的大学生,就能买这么好的手机,想来,是一名富二代吧!
    就在讲解人即将转身离开时,张毅突然问道:“如果能快速完成这个程序的话,是不是就能早点离开?”
    “当然,早一点完成,咱们的时间就更充裕,成功的可能性就越大,给国家造成的损失就越小。”
    看着面前这名稍显稚嫩,但自信满满的面孔,讲解者怔了怔,难道他能很快的解决这个大麻烦吗?不太可能吧!
    张毅看着渐渐远去的讲解者,禁不住轻松的笑了笑:对你们来说,这可能是个大难题。对我来说,呵呵!
    拿着下发的文件,他仔细看了一遍,对于现在的他来说,尽管还做不到过目不忘,但也差不多了,里面的算法和变量说明,他基本全部记了下来。
    算法采用了枚举法,最基本的算法之一,枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。在c语言中,枚举算法一般使用while循环实现。使用枚举算法解题的基本思路如下:确定枚举对象、枚举范围和判定条件。逐一列举可能的解,验证每个解是否是问题的解。
    枚举法是能解决问题,但问题是,这种算法的效率太低,追求的是精确值。
    关键是碎片的数量太多,如果靠这种精确的计算的话,等撞击发生了,计算还未必能完成。
    上面要求的,并不是完全避免撞击,只是利用有限的卫星燃料,进行最小幅度的变轨,规避对卫星伤害最大的撞击。所以枚举法不适合做为计算机程序的基础算法。
    脑海中,在已经开发的脑域中,脑波搜索如雷达一般,不断的快速扫描着。
    算法有很多,但却未必适合现在的情况,无论怎么说,枚举法是绝对不符合要求。
    有了,这种算法不错,在github的浩如烟海的源代码库中,他找到了一种合适的算法。
    贪心算法:从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出一个近似解。这个近似解就无限接近于精确值。
    首先建立数学模型来描述问题。然后把求解的问题分成若干个子问题。对每一子问题求解,得到子问题的局部最优解。把子问题的局部最优解合并成原来解问题的一个解。
    这样的算法,最大限度的利用计算机多线程的性能,以最快的速度来解决问题。最是适合现在这种状况。
    拿出稿纸,速度飞快的,完成了算法的流程图。
    有了算法,就有了程序的灵魂。考虑到天体运行时的差之毫厘,谬之千里,轨道的参数变量都采用了双精度浮点型,最大程度的保证了计算的精确性。
    打开计算机,运行桌面上早已经安装好的tubor c编译器,并没有直接开始写源程序,只是新建了一个.h的库文件,把脑域开发中,得到的一个计算天体运行的库文件,几乎如复制一般,将脑海中搜索到的代码,复制到眼前的计算机上,检查一遍后,做了加密和反编译处理。
    有了这个库文件,几乎所有天体运行时,所需要的函数都一一包含在内,他要做的,只是确定变量,调用库函数,完成程序框图所要求的功能。就像写文章,提纲和框架都齐全了,无非就是让它血肉丰满起来而已。
    程序编写的如行云流水一般。不到一天的时间,就基本处于完成状态了。
    考虑到程序bug会造成的严重后果,张毅小心翼翼的,用自己的测试程序,严格测试了很多遍,修正了一些潜在的bug,尽管这些bug,基本不可能会出现,但不怕一万,就怕万一。
    事实上,依他现在的脑域开发水平,和超强的记忆力,再加上远超所有人的c语言编程水平,不太可能会出现程序bug。
    尽管已经完成了程序,他却并没有提交上去,这么快的速度解决问题,上面会不会把自己当小白鼠一样给解剖了,还是安全第一。
    刚好利用多余的时间,张毅完成了教育版的微硬输入法,和教育版的微硬压缩软件。


同类推荐: 风起云涌陈浩叶心仪重生:官运亨通高手下山,我家师姐太宠我了南璃萧景煜安南笙穆伏城重生之官屠娇软奴婢,又被强势王爷溺宠了全职热血高手