仔細的聽着周圍人的議論,但聽來聽去,他才明白,問題就集中在一點上:那就是下載頻道裏提供的免費版本,功能太少,但微硬軟件合輯又太貴,教授們買得起,但學生們,有很多可買不起。
張毅低了頭,仔細思索了一下,前世時,如微軟、auto desk這樣的軟件公司,都出過相應的教育版本的軟件,價格比普通零售版本便宜很多,不但可以拉來大量的學生用戶,將來,這些學生,走向工作崗位後,也會向工作單位推薦所熟悉的軟件,這樣的做法,各取所需,社會反響也很好。
抬起頭,向着圍在周圍的教授和學生們說:“我可以在這裏給大家一個承諾,此間事了後,我會馬上推出教育版的軟件,專門對應各位學生和老師們,價格會比較便宜,甚至會有別的好處。
周圍的人聽到這些,情不自禁鼓起掌來。
搞出教育版軟件容易,但是,怎麼分辨是不是學生或者老師,就比較麻煩了,現在的學校,很少有學生和老師使用.edu的郵箱,畢竟,上網的人太少了。電子郵箱也沒有太大的使用價值。
直到住進招待所後,他還在苦思冥想,到底用什麼辦法,才能鑑別教育版用戶和非教育版用戶呢?
他的腦海裏不斷的回想着後世,各種各樣的反盜版套路。
第二天,衆人喫過早飯,來到了上京大學的一個會議室裏。
會議室裏,已經坐了一部分人,有穿軍裝的軍人,頭髮花白的教授,還有一些大腹便便的官員。
衆人依次落坐後,工作人員拉上了窗簾,幻燈機打出了幾個示意圖,看得出,這是一個計算天體之間軌道的課題,依張毅後世的眼光來看,似乎是涉及到一些太空碎片,這些碎片每時每刻都在不規則旋轉,可能會撞擊到軌道上的飛行器。
講解員是一名年輕的軍官他介紹:這是地球同步軌道上的,已經報廢的衛星碎片,這些衛星碎片無時無刻,都在威脅着正常運行的衛星。
召集大家的目的,就是爲了能找出一種算法,並把這種算法形成一個公式,利用計算機選擇對衛星威脅相對小一些的碎片,來計算衛星的變軌速度和角度等等,最大程度的保證衛星的健康運行。
張毅聽着這些專有名詞,就感覺頭暈暈的,前世,他那有接觸這種航空航天領域的機會,公開的媒體也沒人敢公佈這些,對他來說,是完全陌生的領域。
在座的很多教授和學生,也是一臉懵逼,專業完全不對口有沒有。
似乎是看出了大家的尷尬,講解者緊接着解釋道,考慮到大家對航空航天不太瞭解,我們就總結了此次計算軌道,所需要的變量,並對這些變量進行了一些優化,相應的算法思路,我們也有了路線,但難點就在於,這樣複雜的天體軌道運算,用人工來進行演算,效率太低,處理速度太慢,根本無法滿足實際需要。
美國和前蘇聯使用的是fortran語言來計算軌道變化,fortran,亦譯爲福傳,它是世界上最早出現的計算機高級程序設計語言,廣泛應用於科學和工程計算領域。
fortran語言版本過多,新版本對舊版本的兼容性是一個大問題,可能會對以後的擴展和使用造成大的影響。
考慮到fortran語言的不確定性太多,諮詢過多位專家後,決定採用intel彙編和c語言來描述數學模型和算法。
下面會將粗略的算法流程圖,發給大家,大家可以提出修改意見。
相信大家也已經注意到了,招待所的每一個房間裏,都分配了一臺電腦,並且都已經連接上了互聯網,有什麼需求請直接告訴樓道口的保安。
在些期間的所有事情,都是保密的,未經許可,絕對不可以和外界聯絡,不能外出,不允許外來的訪客,招待所處於封閉狀態。
講解者說完後,就要轉身離開,一名保安攔住他,指了指張毅,耳語了一番。
他馬上轉身走回到張毅身邊,客氣的問道:“這位同學,你帶着手機是嗎?”
“是的!”張毅邊回答,邊拿出了手機。
“不好意思,手機我們暫時幫你保管可以嗎?”
張毅看到這樣的情景,心裏止不住的吐槽:我可以說不嗎?
聳了聳肩膀,關掉手機,遞給對方。
拿到這部手機時,講解者有些詫異,很明顯的,這部手機有別於市面上的,那種超級大磚頭,顯得小巧玲瓏多了,相信也價格不菲,真是看不出,這麼小的年齡的大學生,就能買這麼好的手機,想來,是一名富二代吧!
就在講解人即將轉身離開時,張毅突然問道:“如果能快速完成這個程序的話,是不是就能早點離開?”
“當然,早一點完成,咱們的時間就更充裕,成功的可能性就越大,給國家造成的損失就越小。”
看着面前這名稍顯稚嫩,但自信滿滿的面孔,講解者怔了怔,難道他能很快的解決這個大麻煩嗎?不太可能吧!
張毅看着漸漸遠去的講解者,禁不住輕鬆的笑了笑:對你們來說,這可能是個大難題。對我來說,呵呵!
拿着下發的文件,他仔細看了一遍,對於現在的他來說,儘管還做不到過目不忘,但也差不多了,裏面的算法和變量說明,他基本全部記了下來。
算法採用了枚舉法,最基本的算法之一,枚舉算法的思想是:將問題的所有可能的答案一一列舉,然後根據條件判斷此答案是否合適,保留合適的,丟棄不合適的。在c語言中,枚舉算法一般使用while循環實現。使用枚舉算法解題的基本思路如下:確定枚舉對象、枚舉範圍和判定條件。逐一列舉可能的解,驗證每個解是否是問題的解。
枚舉法是能解決問題,但問題是,這種算法的效率太低,追求的是精確值。
關鍵是碎片的數量太多,如果靠這種精確的計算的話,等撞擊發生了,計算還未必能完成。
上面要求的,並不是完全避免撞擊,只是利用有限的衛星燃料,進行最小幅度的變軌,規避對衛星傷害最大的撞擊。所以枚舉法不適合做爲計算機程序的基礎算法。
腦海中,在已經開發的腦域中,腦波搜索如雷達一般,不斷的快速掃描着。
算法有很多,但卻未必適合現在的情況,無論怎麼說,枚舉法是絕對不符合要求。
有了,這種算法不錯,在github的浩如煙海的源代碼庫中,他找到了一種合適的算法。
貪心算法:從問題的某一個初始解出發,逐步逼近給定的目標,以便儘快求出更好的解。當達到算法中的某一步不能再繼續前進時,就停止算法,給出一個近似解。這個近似解就無限接近於精確值。
首先建立數學模型來描述問題。然後把求解的問題分成若干個子問題。對每一子問題求解,得到子問題的局部最優解。把子問題的局部最優解合併成原來解問題的一個解。
這樣的算法,最大限度的利用計算機多線程的性能,以最快的速度來解決問題。最是適合現在這種狀況。
拿出稿紙,速度飛快的,完成了算法的流程圖。
有了算法,就有了程序的靈魂。考慮到天體運行時的差之毫釐,謬之千裏,軌道的參數變量都採用了雙精度浮點型,最大程度的保證了計算的精確性。
打開計算機,運行桌面上早已經安裝好的tubor c編譯器,並沒有直接開始寫源程序,只是新建了一個.h的庫文件,把腦域開發中,得到的一個計算天體運行的庫文件,幾乎如複製一般,將腦海中搜索到的代碼,複製到眼前的計算機上,檢查一遍後,做了加密和反編譯處理。
有了這個庫文件,幾乎所有天體運行時,所需要的函數都一一包含在內,他要做的,只是確定變量,調用庫函數,完成程序框圖所要求的功能。就像寫文章,提綱和框架都齊全了,無非就是讓它血肉豐滿起來而已。
程序編寫的如行雲流水一般。不到一天的時間,就基本處於完成狀態了。
考慮到程序bug會造成的嚴重後果,張毅小心翼翼的,用自己的測試程序,嚴格測試了很多遍,修正了一些潛在的bug,儘管這些bug,基本不可能會出現,但不怕一萬,就怕萬一。
事實上,依他現在的腦域開發水平,和超強的記憶力,再加上遠超所有人的c語言編程水平,不太可能會出現程序bug。
儘管已經完成了程序,他卻並沒有提交上去,這麼快的速度解決問題,上面會不會把自己當小白鼠一樣給解剖了,還是安全第一。
剛好利用多餘的時間,張毅完成了教育版的微硬輸入法,和教育版的微硬壓縮軟件。