W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當我們聽到“算法”這個詞時,很自然地會想到數(shù)學。然而實際上,許多算法并不涉及復(fù)雜數(shù)學,而是更多地依賴于基本邏輯,這些邏輯在我們的日常生活中處處可見。
在正式探討算法之前,有一個有趣的事實值得分享:你已經(jīng)在不知不覺中學會了許多算法,并習慣將它們應(yīng)用到日常生活中了。下面,我將舉幾個具體例子來證實這一點。
例一:查閱字典。在字典里,每個漢字都對應(yīng)一個拼音,而字典是按照拼音字母順序排列的。假設(shè)我們需要查找一個拼音首字母為 r 的字,通常會按照圖 1-1 所示的方式實現(xiàn)。
圖 1-1 查字典步驟
查閱字典這個小學生必備技能,實際上就是著名的二分查找算法。從數(shù)據(jù)結(jié)構(gòu)的角度,我們可以把字典視為一個已排序的“數(shù)組”;從算法的角度,我們可以將上述查字典的一系列操作看作是“二分查找”。
例二:整理撲克。我們在打牌時,每局都需要整理撲克牌,使其從小到大排列,實現(xiàn)流程如圖 1-2 所示。
圖 1-2 撲克排序步驟
上述整理撲克牌的方法本質(zhì)上是“插入排序”算法,它在處理小型數(shù)據(jù)集時非常高效。許多編程語言的排序庫函數(shù)中都存在插入排序的身影。
例三:貨幣找零。假設(shè)我們在超市購買了 69 元的商品,給了收銀員 100 元,則收銀員需要找我們 31 元。他會很自然地完成如圖 1-3 所示的思考。
圖 1-3 貨幣找零過程
在以上步驟中,我們每一步都采取當前看來最好的選擇(盡可能用大面額的貨幣),最終得到了可行的找零方案。從數(shù)據(jù)結(jié)構(gòu)與算法的角度看,這種方法本質(zhì)上是“貪心”算法。
小到烹飪一道菜,大到星際航行,幾乎所有問題的解決都離不開算法。計算機的出現(xiàn)使我們能夠通過編程將數(shù)據(jù)結(jié)構(gòu)存儲在內(nèi)存中,同時編寫代碼調(diào)用 CPU 和 GPU 執(zhí)行算法。這樣一來,我們就能把生活中的問題轉(zhuǎn)移到計算機上,以更高效的方式解決各種復(fù)雜問題。
Tip
如果你對數(shù)據(jù)結(jié)構(gòu)、算法、數(shù)組和二分查找等概念仍感到一知半解,請繼續(xù)往下閱讀,這本書將引導你邁入數(shù)據(jù)結(jié)構(gòu)與算法的知識殿堂。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: