PHP 中巧用數(shù)組降低程序的時間復雜度發(fā)布者:本站 時間:2020-05-06 16:05:12
通常開發(fā)人員在寫程序的時候,往往是把已經(jīng)設(shè)計好或者構(gòu)思好的運算邏輯,直接用編程語言翻譯出來。程序能順利編譯通過,那是很令人高興的事情。如果此時程序的運行時間還能接受,就會沉浸在寫代碼的成就感當中,常常在這個過程中忽略代碼的優(yōu)化。只有當程序運行速度受到影響時,才回過頭去考慮優(yōu)化的事情。
什么是算法的時間復雜度
時間復雜度是開發(fā)人員用來衡量應用程序算法優(yōu)劣的主要因素??陀^地說,算法的優(yōu)劣除了和時間復雜度有關(guān),還與空間復雜度密切相關(guān)。而隨著設(shè)備硬件配置的不斷提升,對中小型應用程序來說,對算法的空間復雜度的要求也寬松了不少。不過,在當今 Web2.0 時代,對應用程序的時間復雜度卻有了更高的要求。
什么是算法的時間復雜度呢?概要來說,是指從算法中選取一個能代表算法的原操作,以原操作重復執(zhí)行的次數(shù)作為算法的時間量度。影響時間復雜度的因素有兩個:一是原操作的執(zhí)行時間,二是原操作因控制結(jié)構(gòu)引起的執(zhí)行次數(shù)。要把算法的時間復雜度降下來,降低原操作的執(zhí)行次數(shù)是較為容易的方法,也是主要方法。本文所講述的方法,是通過巧用 PHP 的數(shù)組,降低原操作的執(zhí)行次數(shù),從而達到降低算法時間復雜度的需求,和大家分享。
算法的時間量度記作 T(n)=O(f(n)),它表示算法中基本操作重復執(zhí)行的次數(shù)是問題規(guī)模 n 的某個函數(shù) f(n),也就是說隨著問題規(guī)模 n 的增大,算法執(zhí)行時間的增長率和 f(n) 的增長率相同。多數(shù)情況下,我們把最深層循環(huán)內(nèi)的語句作為原操作來討論算法的時間復雜度,因為它的執(zhí)行次數(shù)和包含它的語句的頻度相同。一般情況下,對一個問題只需選擇一種基本操作來討論算法的時間復雜度即可。有時也需要同時考慮多種基本操作。
在 Web 開發(fā)中,通常一個功能的執(zhí)行時間或響應時間,不僅僅跟服務器的響應能力、處理能力有關(guān),還涉及第三方工具的交互時間,如對數(shù)據(jù)庫的鏈接時間和對數(shù)據(jù)進行存取的時間。因而在選定原操作是,需要綜合考慮應用程序各方面的因素,以最大影響程序執(zhí)行時間的操作為原操作,來衡量算法的時間復雜度。也就是說,需要程序員在編寫代碼的時候,對重要操作的執(zhí)行時間能有基本的認識。
常見程序中的時間復雜度分析
我們先看一個例子,假設(shè) Web 程序的開發(fā)語言是 PHP,后臺采用 DB2 數(shù)據(jù)庫,PHP 通過 PEAR::DB 數(shù)據(jù)抽象層來實現(xiàn)對數(shù)據(jù)庫的訪問。
實例
數(shù)據(jù)庫中有學生表 Students(見表 1),班級表 Classes(見表 2),學生成績表 Scores(見表 3),需要在 Web 頁面中顯示出本次考試數(shù)學成績超過 90 分的同學姓名和所在班級。
選擇我們,優(yōu)質(zhì)服務,不容錯過
1. 優(yōu)秀的網(wǎng)絡(luò)資源,強大的網(wǎng)站優(yōu)化技術(shù),穩(wěn)定的網(wǎng)站和速度保證
2. 15年上海網(wǎng)站建設(shè)經(jīng)驗,優(yōu)秀的技術(shù)和設(shè)計水平,更放心
3. 全程省心服務,不必擔心自己不懂網(wǎng)絡(luò),更省心。
------------------------------------------------------------
24小時聯(lián)系電話:021-58370032