TODO:算法的初步理解之枚舉算法
算法是軟件的精髓备燃。
反觀計(jì)算機(jī)行業(yè)出身的人員碉克,對于軟件開發(fā)更多局限于與數(shù)據(jù)庫的交互,即增并齐、刪漏麦、改客税、查。在做數(shù)據(jù)庫交互主要用的算法是枚舉算法撕贞。枚舉算法的思想是更耻,將問題的所有可能的答案一一列舉,然后根據(jù)條件判斷此答案是否合適捏膨,保留合適的秧均,丟棄不合適的。如圖枚舉算法流程:
經(jīng)典的枚舉算法有“百錢買百雞”号涯,公雞每只5元目胡,母雞每只3元,小雞3只1元诚隙,用100元可以買100只雞讶隐,問公雞,母雞久又,小雞各多少只巫延?這就是已知部分答案,求解未知問題地消。下面小O用Golang來簡單實(shí)現(xiàn)炉峰,詳細(xì)看源碼注釋。
輸出的結(jié)果:
其中的趣味慢慢品嘗吧脉执。有興趣的朋友可以把x疼阔,y,z的值改為0半夷,會有意想不到的結(jié)果婆廊。這是golang語言的特性,值得注意巫橄,以免入坑淘邻。會算出這樣的結(jié)果哈
枚舉算法是編程中最常見的,在已知的答案范圍內(nèi)不斷的去判斷符合的條件湘换,并輸出結(jié)果宾舅。簡單粗暴,有些破解軟件就是使用這樣的算法彩倚,進(jìn)行暴力破解筹我,不斷嘗試,最終獲得答案帆离。缺點(diǎn)就是運(yùn)算量比較大蔬蕊,解題效率不高,在不超過200萬次的枚舉范圍可以嘗試使用枚舉算法哥谷。
最近看到很多公司都在招聘算法工程師袁串,有視覺算法概而,搜索算法,推薦算法囱修,地理編碼匹配算法等赎瑰。隨著科技的不斷進(jìn)步,算法的作用不斷走進(jìn)我們的現(xiàn)實(shí)中破镰,而不是在科研中了餐曼。
wxgzh:ludong86