當(dāng)人們提到“算法”一詞,往往就會(huì)把它們當(dāng)成專屬于“人工智能”的范疇,很多專業(yè)的計(jì)算機(jī)人士也是,提起算法就頭疼,不知道如何學(xué)習(xí)算法,慢慢的對(duì)算法就會(huì)失去興趣,算法不僅僅是計(jì)算機(jī)行業(yè)特有的,在我們的生活中也處處存在著算法,算法是專注于解決問題的過程和方法。
既然提到了算法是解決問題的方法,哪方法也是有好有壞的,算法是在特定問題下解決問題的方法,證明一個(gè)算法的好壞,就要看它的時(shí)間復(fù)雜度和空間復(fù)雜度。
通過一個(gè)實(shí)例來說明算法的好壞,假如李四是班長,老師叫李四統(tǒng)計(jì)下本班的人數(shù)是多少?
李四非常自信的一個(gè)、兩個(gè)、三個(gè)的數(shù)了起來,然后報(bào)告老師,本班總共8人,老師說人數(shù)少,可以這樣數(shù),然后人數(shù)過大,是不是就非常浪費(fèi)時(shí)間了,那你的時(shí)間復(fù)雜度是不是就大了,想想還有沒更好的辦法!。
基于這個(gè)想法,可不可以以兩個(gè)一組,進(jìn)行來分,最后看下綜合是多少組乘于它組的總?cè)藬?shù),是不是就是它的總?cè)藬?shù),那可不可以以十人一組或者二十人一組呢,這樣是不可取的,因?yàn)槎嗳艘唤M還是要數(shù)的,最后時(shí)間復(fù)雜度還是要增大的。
結(jié)合以上兩個(gè)算法可以得出,組的概念還是有用,哪能不能更高效大的方法呢?如果在人數(shù)較多的情況下,可不可以按照房間的概念來區(qū)分的,假設(shè)每個(gè)房間可以容納20人,看最后一個(gè)容納多少人,前面每個(gè)房間數(shù)乘于容納的人數(shù)再加上最后一個(gè)房間容納的人數(shù)之和,就可以得到最終的人數(shù)。
以房間號(hào)計(jì)算的方式,雖然可以快速計(jì)算出結(jié)果,但是它所消耗的空間復(fù)雜度是大的,反而有點(diǎn)得不償失的,如果不考慮消耗的內(nèi)存大小,可以考慮使用這種方式。
思考這樣一個(gè)問題,如果可以投入一點(diǎn)的成本,是不是可以降低它的時(shí)間復(fù)雜度和空間復(fù)雜度呢?!
其實(shí),如果可以購買一些記事本,每次來校的學(xué)生都要進(jìn)行登記,我們只需要計(jì)算記事本的人數(shù)和有多少個(gè)記事本,是不是可以更快,而且高效的計(jì)算出學(xué)生的總?cè)藬?shù)呢?
以上幾種算法都可以達(dá)到想要的結(jié)果,但是考慮到實(shí)際應(yīng)用的場景以及后期更好的性能輸出,還是要考慮它的時(shí)間復(fù)雜度和空間復(fù)雜度作為一個(gè)好算法的衡量標(biāo)準(zhǔn),其次就是他的可讀性。
關(guān)鍵詞: 什么是算法