你都用過演算法實現了項目中的哪些需求?
01-06
RT
想了解下演算法在程序中的妙用
實現了高速索引。對於一個 M x N 的輸入,把複雜度 O(M x N) 變成了 O(M + N ^ 2)。
由於 M 很大,N 很小,所以速度提高了了 10 ~ 30 倍。
但是老闆感覺他被羞辱了。所以沒有採用。
類似的故事還有很多。
所以。。。
更新:
謝謝各位關心。我已經不做計算機很多年了。不是說我遇到的某個老闆特別奇葩。感覺這是多數行業的基本型態,尤其涉及到利益問題。
成功的程序員強調演算法,效率的重要性。我感覺有一點倖存者偏差。
好了,我取關這個問題了。這個問題太複雜。我幫不了你們。祝各位好運。最近在做圖像空間人臉處理的,直接用了GrabCut演算法(微軟大法好_(:з」∠)_這個拆開的話其實就包含了混合高斯模型(利用EM迭代)、網路流演算法(用來迭代優化~)
嚴格來說,都是用數據結構解決的。
舉個最近的例子,前幾個星期根據分析,有個IList數據結構需求,裡面的元素是要求排好序的,絕大部分時間都在位置0插入元素(密集插入20w個,當然總有亂插的時候),而且每次插入的時候,都會大量使用IndexOf啊,根據下標取元素等操作。
Telerik用了標準的List但表現不好,你會怎麼改進?我是做複雜網路的,所以我用過的主要是圖相關的演算法。比如,做spreading analysis的基本思路就是BFS+剪枝策略。真心愛死這個演算法策略了,很多基於圖的啟發式搜索演算法我都是這樣做的。比如,網路最短路徑A*演算法等等。
最近做的工程需求抽象出模型用到的有.
有向圖DFS BFS遍歷,
克隆有向圖,求有向圖的逆圖,求有向圖A到B的路徑,拓撲排序.二叉樹後序和中序遍歷.排序.然後就深深感受...誰說演算法沒用,是平時寫的東西太弱了另外哪來那麼多API可以做這些,還不是要自己手寫- -在agv控制系統中,使用雙向鏈表的思想實現了路徑計算,使用隊列的思想實現的系統預判下一工作站的功能。實現很簡單,但是讓我這非科班程序員感受到了演算法在解決實際問題時發揮的巨大作用。
項目開發中實現類似電話撥號功能,涉及到T9鍵盤搜索聯繫人。
演算法的基本思路:
1.數據解析(基於一份枚舉了"全部"漢字所對應拼音的數據)2.數據匹配(深度搜索+廣度搜索)順便實現了全鍵盤搜索,使用場景還挺多的,便在github上開源了。
PinyinSearch(T9Search+QwertySearch)PS:後來PinyinSearch演算法被鎚子應用於鎚子桌面了。用ukf濾了歐拉角…fuzzy pid做了平衡…canny做了邊緣提取……菜鳥的升級之路。。
O(N)的鏈表LRU,優化成O(1)的單個Hashtable。
推薦閱讀:
※為什麼工程中都用紅黑樹,而不是其他平衡二叉樹?
※堆和樹有什麼區別?堆為什麼要叫堆,不叫樹呢?
※資料庫系統的實現中採用了哪些常用的數據結構?
※為什麼建立一個二叉堆的時間為O(N)而不是O(Nlog(N))?
※能否用通俗易懂的方法解釋下不相交集這種數據結構?