1.2.2 了解計(jì)算設(shè)備的性能
一旦完全了解了待處理的問題,我們還要搞清楚將要運(yùn)行算法的計(jì)算設(shè)備的性能。如今,類馮·諾依曼的機(jī)器(約翰·馮·諾依曼、A.博克斯和H.戈?duì)査固褂?946年合作提出的一種計(jì)算機(jī)體系結(jié)構(gòu))仍是計(jì)算機(jī)的主流,我們使用的大多數(shù)算法的代碼仍然注定要運(yùn)行在這種系統(tǒng)上。這個(gè)體系結(jié)構(gòu)的根本在于隨機(jī)存取機(jī)(random-access machine,RAM)。它最主要的假設(shè)是:指令逐條運(yùn)行,每次執(zhí)行一步操作。相應(yīng)地,設(shè)計(jì)在這種機(jī)器上運(yùn)行的算法稱為順序算法(sequential algorithm)。
一些更新式的計(jì)算機(jī)打破了RAM模型的核心假設(shè),它們可以在同一時(shí)間執(zhí)行多條操作,即并行計(jì)算。能夠利用這種計(jì)算能力的算法稱為并行算法(parallel algorithm)。盡管如此,在可預(yù)見的未來,RAM模型下的算法設(shè)計(jì)和分析的經(jīng)典技術(shù)仍然是算法學(xué)的基礎(chǔ)。
在算法當(dāng)中是否需要考慮計(jì)算機(jī)的計(jì)算速度和存儲(chǔ)容量呢?如果把設(shè)計(jì)算法作為科學(xué)實(shí)驗(yàn),答案可以說是“否”:就像我們將在2.1節(jié)講到的,絕大多數(shù)計(jì)算機(jī)科學(xué)家傾向于以一種獨(dú)立于特定機(jī)型的方式來研究算法。如果把算法作為實(shí)用工具來設(shè)計(jì),答案可能取決于所要解決的問題。今天,即使是一臺(tái)很“慢”的計(jì)算機(jī),它的速度也是快得不可思議的。所以,在很多情況下,我們并不需要擔(dān)心計(jì)算機(jī)的速度無(wú)法勝任所要處理的任務(wù)。然而,總有一些重要的問題,它們?cè)揪褪欠浅?fù)雜的,可能不得不處理海量的數(shù)據(jù),或者處理一些對(duì)時(shí)間很敏感的應(yīng)用。在這些情況下,認(rèn)識(shí)到特定計(jì)算機(jī)系統(tǒng)的速度和存儲(chǔ)限制是非常必要的。