精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

初學者指南:什么是算法?11行偽代碼給你講明白

開發 前端 算法
算法(algorithm)就是一個過程,是一種特殊的過程。它必須描述為一個有限步驟序列,且必須在有限時間內結束。每個步驟必須是良好定義的,達到人類可用一支筆和一張紙執行它的程度。

 本文轉載自微信公眾號「大數據DT(ID:hzdashuju)」,作者帕諾斯·盧里達斯(Panos Louridas) 。轉載本文請聯系大數據DT(ID:hzdashuju)公眾號。

 

算法(algorithm)就是一個過程,是一種特殊的過程。它必須描述為一個有限步驟序列,且必須在有限時間內結束。每個步驟必須是良好定義的,達到人類可用一支筆和一張紙執行它的程度。

算法基于我們提供給它的輸入做一些事情,并生成反映其所做工作的一些輸出。算法1-1實現了我們前面描述的過程。

  • 算法1-1 一個簡單的股票跨度算法

SimpleStockSpan(quotes)→spans

  • 輸入: quotes,保存n個股票報價的數組
  • 輸出: spans,保存n個股票跨度的數組
  1. spans←CreateArray(n) 
  2. for i←0 to n do 
  3.     k←1 
  4.     span_end ← FALSE 
  5.     while i-k ≥ 0 and not span_end do 
  6.        if quotes[i-k] ≤ quotes[i] then 
  7.            k←k+1 
  8.        else 
  9.            span_end ← TRUE 
  10.     spans[i] ← k 
  11. return spans 

算法1-1展示了如何描述算法。我們并不使用某種計算機語言,因為那樣會迫使我們處理與算法邏輯無關的實現細節,我們使用的是某種偽代碼(pseudocode)形式。

偽代碼是一種介于真正的程序代碼和非形式化描述之間的形式。它使用一種結構化格式,并采用一組具有特定含義的詞匯。但是,偽代碼不是真正的計算機代碼。它并不是為了被計算機執行,而是易于被人類理解。

順便提一下,程序也應能被人類理解,但并非所有程序都是如此——有很多正在運行的計算機程序寫得很糟糕,難以理解。

每個算法都有一個名字,接受一些輸入,并生成一些輸出。在本書中,算法的名字將采用駱駝拼寫法(CamelCase),輸入會寫在括號中,輸出用一個→指示。接下來的幾行將會對算法的輸入和輸出進行描述。可以用算法的名字緊接放在括號中的輸入來調用(call)算法。

一旦算法編寫好,就可以將其作為一個黑盒來處理,可以給它一些輸入,黑盒則會返回算法的輸出。當用一種程序設計語言實現一個算法時,它就是一個具名的計算機代碼片段——函數(function)。在一個計算機程序中,我們調用實現算法的函數。

某些算法不生成輸出,當然也就不會顯式返回結果。取而代之的是,它們的行為影響上下文的某部分。例如,我們可能提供給算法一個空間,供其寫入結果。在此情況下,在傳統意義上算法并非返回輸出結果,但無論如何算法是有輸出的,即它影響上下文發生的變化。

某些程序設計語言會區分顯式返回結果的具名程序代碼片段——稱為函數(function),以及不返回結果但可能有其他副作用的具名程序代碼片段——稱為過程(procedure)。這種差異來源于數學,數學上的函數是必須返回值的。對我們來說,當一個算法編碼為實際程序時,既可以是一個函數也可以是一個過程。

我們的偽代碼中使用一些用粗體表示的關鍵字,如果你對計算機和程序設計語言的工作方式有所了解,這些關鍵字的含義就是不言自明的了。

我們使用字符←表示賦值,用等號(=)表示相等比較。我們采用常用的五個符號(+,-,/,×,·)表示四種數學運算,后兩個符號都表示乘法,這兩個符號我們都會使用,基于美學考慮進行選擇。我們將不會使用任何關鍵字或符號對偽代碼分塊,分塊是通過縮進來表示的。

在這個算法中,我們使用了數組(array)。數組是一種保存數據的結構,它允許我們按特定方式操縱其中的數據。我們保存數據并允許在其保存的數據上執行特定操作的結構稱為數據結構(data structure)。因此數組是一種數據結構。

數組之于計算機,就像對象序列之于人類。數組是元素的有序序列,這些元素存儲在計算機內存中。為了獲得保存元素所需的空間并創建一個保存n個元素的數組,可調用算法1-1第1行中的CreateArray算法。

 

如果你熟悉數組,可能就會奇怪創建數組怎么還需要一個算法。但實際情況的確如此。為了獲得保存數據的一塊內存,你必須至少在計算機中搜索可用內存并標記它為數組所用。

CreateArray(n)調用做了所需的一切,它返回一個可容納n個元素的數組,初始時其中沒有元素,只有保存元素所需的空間。算法負責調用CreateArray(n)來將實際數據填充到數組中。

對數組A,我們用A[i]表示其第i個元素,訪問該元素也是用該符號。一個元素在數組中的位置,如A[i]中的i,被稱為索引(index)。一個n個元素的數組A包含元素A[0],A[1],…,A[n-1]。

這可能令你吃驚,因為其首元素是第0個,而尾元素是第n-1個,可能你的預期是第1個和第n個。但是,大多數計算機語言中的數組都是如此,你最好現在就熟悉這種機制。這非常常見,當遍歷一個大小為n的數組時,我們是從位置0遍歷到位置n-1。

在我們的算法中,當我們說某個對象的取值是從數x到數y(假定x小于y)時,意思是從x到y(但不包含)的所有值,參見算法第2行。

我們假定無論i的值是什么,訪問第i個元素都花費相同的時間。因此訪問A[0]與訪問A[n-1]需要相同的時間。這是數組的一個非常重要的特性:對元素的訪問是一致的,都花費常量時間。當我們通過索引訪問數組元素時,數組不需要搜索此元素。

關于算法描述中的符號表示,我們用小寫字母表示算法中的變量。但當變量表示一個數據結構時,我們會使用大寫字母來令其突出,如數組A。但這并非必要。當我們希望給變量起一個包含很多單詞的名字時,我們會使用下劃線(_),如a_connector。這是必要的,因為計算機不理解由一組空格分隔的單詞構成單個變量名的方式。

算法1-1使用數組保存數值。數組可以保存任何類型的項,在我們的偽代碼中每個數組只能保存單一類型的項。大多數程序設計語言中也都是如此。

例如,可以創建十進制數數組、分數數組、表示人的項的數組以及另一個表示地址的項的數組,但不可以創建一個既包含十進制數又包含表示人的項的數組。至于“表示人的項”會是什么,由編程所使用的語言所決定。所有程序設計語言都提供表示有意義的東西的方法。

一種特別有用的數組是字符數組。一個字符數組表示一個字符串(string),即一個字母序列、一個數序列、一個單詞序列、一個句子序列等。與所有數組一樣,我們可以用索引單獨引用數組中的單個字符。如果我們有一個字符串s=“Hello,World”,則s[0]為字母“H”而s[11]為字母“d”。

 

總結一下,數組就是一個保存相同類型項的序列的數據結構。數組支持兩種操作:

  • CreateArray(n)創建一個能保存n個元素的數組。數組未初始化,即它不保存任何實際元素,但保存元素所需的空間已預留,可用來保存元素。
  • 正如我們已經看到的,對一個數組A,A[i]訪問其第i個元素,而且訪問數組中任何元素都花費相同時間。若i<0,則試圖訪問A[i]會產生錯誤。

我們回到算法1-1。如前所述,算法第2~10行是一個循環,即一個反復執行的代碼塊。如果我們有n天的報價的話,循環執行n次,每次計算一個跨度。變量i表示我們正在計算跨度的當前這一天。初始時,處于第0天這一最早的時間點。每次執行第2行代碼時,就會推進循環到第1,2,…,n-1天。

我們使用變量(variable)k指示當前跨度的長度——在我們的偽代碼中,變量就是一個引用某些數據的名字,那些數據的內容,或者更精確地說,變量的值(value),在算法執行的過程中是可以改變的,變量這個術語因而得名。當我們開始計算一個跨度時,k的值總是1,我們是在第3行設置這個初值的。

我們還使用了一個指示變量(indicator variable)span_end。指示變量取值TRUE或FALSE,指出某事成立或不成立。當我們到達一個跨度的末端時,變量span_end的值將為真。

在開始計算每個跨度時,span_end為假,如第4行所示。第5~9行的內層循環計算跨度的長度。第5行告訴我們,只要跨度還未結束,就回退盡可能長的時間。我們能回退多遠由條件i-k≥0決定:回退到索引i-k指示的這一天檢查跨度是否結束,而索引不能為0,因為0對應第1天。

第6行檢查跨度是否結束。如果跨度未結束,則在第7行增加其長度。否則,我們注意到,第9行設置跨度結束,從而循環會在回到第5行后終止。

第2~10行的外層循環在第10行結束一次循環時,我們在此將k的值保存到數組spans的正確位置。在退出循環后的第11行,我們返回spans,它保存著算法的結果。

注意,初始時我們設定i=0和k=1。這意味著在最早的時刻第5行的條件必定為假。這是理所應當的,因為第0天的跨度只能為1。

此時此刻,記住我們曾說過的關于算法、筆和紙的內容。理解一個算法的最好方法就是去手動執行它。

在任何時候如果一個算法看起來有些復雜,或者你不確定是否已完全理解它,就用紙和筆寫下執行它求解某個例子的過程。這種方法會節省你很多時間,雖然它看起來有點老套。如果對算法1-1還有不明確的地方,馬上嘗試這種方法,當算法已完全清晰后再回到這里。

關于作者:帕諾斯·盧里達斯(Panos Louridas),曼徹斯特大學軟件工程博士,現為雅典經濟與商業大學管理科學與技術系副教授。在加入高校之前,曾在投資銀行擔任高級軟件工程師。

本文摘編自《真實世界的算法:初學者指南》,經出版方授權發布。

 

 

責任編輯:武曉燕 來源: 大數據DT
相關推薦

2022-04-24 15:21:01

MarkdownHTML

2023-02-19 15:31:09

架構軟件開發代碼

2010-06-13 11:13:38

UML初學者指南

2022-07-22 13:14:57

TypeScript指南

2023-07-28 07:31:52

JavaScriptasyncawait

2022-03-28 09:52:42

JavaScript語言

2021-05-10 08:50:32

網絡管理網絡網絡性能

2023-07-03 15:05:07

預測分析大數據

2021-05-06 09:00:00

JavaScript靜態代碼開發

2022-09-05 15:36:39

Linux日志記錄syslogd

2023-02-10 08:37:28

2012-03-14 10:56:23

web app

2022-10-10 15:28:45

負載均衡

2020-09-08 19:03:41

Java代碼初學者

2014-04-01 10:20:00

開源Rails

2024-04-28 10:56:34

Next.jsWeb應用搜索引擎優化

2020-08-16 13:10:46

TensorFlow深度學習數據集

2013-04-08 16:35:52

Adobe Edge

2010-08-26 15:47:09

vsftpd安裝

2013-03-06 10:40:58

Adobe Edge HTML5
點贊
收藏

51CTO技術棧公眾號

精品免费国产| 97色在线观看免费视频| 国产精品中文在线| 精品伦一区二区三区| 日本理论片午伦夜理片在线观看| 久久久久国内| 日韩中文在线视频| 成人在线视频免费播放| 欧美成人app| 亚洲综合色成人| 涩涩日韩在线| 视频二区在线观看| 激情综合网激情| 日本久久久久久久久| 欧美成人一二三区| 日韩欧美精品综合| 亚洲精品久久久久久久久| 91欧美视频在线| 国产调教在线| 亚洲日本韩国一区| 日本在线观看一区| 日韩一区二区三区不卡| 另类小说一区二区三区| 97视频在线观看视频免费视频 | 五月天综合激情| 91精品综合久久久久久久久久久| 91久久精品一区二区| 毛片在线视频观看| 午夜美女福利视频| 麻豆精品新av中文字幕| 国产91成人video| 九九热国产在线| 天天影视综合| 色av中文字幕一区| 国产黄色大片免费看| 色先锋久久影院av| 精品久久久久久久一区二区蜜臀| 亚洲综合激情视频| 久久91超碰青草在哪里看| 欧美性猛交xxxx乱大交极品| 黄色大片中文字幕| 国产精品一区hongkong| 亚洲激情第一区| 99中文字幕| 国产精选久久久| 久久99在线观看| 国产热re99久久6国产精品| 免费黄色片视频| 日韩专区在线视频| 国产精品成人播放| 欧美日韩在线视频播放| 视频在线观看91| 日韩av电影免费观看高清| 日韩少妇高潮抽搐| 在线亚洲自拍| 欧美一级片久久久久久久| 在线观看亚洲天堂| 男人的天堂亚洲| 国产激情久久久久| 日本视频www色| 日韩高清一区二区| 国产精品久久久久免费a∨| 高潮毛片又色又爽免费| 秋霞电影网一区二区| 国产精品露脸av在线| 亚洲中文字幕一区二区| 国产美女娇喘av呻吟久久| 91手机在线观看| 黄色av网址在线| 99re热视频精品| 日韩国产精品一区二区三区| 香蕉视频免费在线播放| 亚洲欧美国产三级| 人妻少妇精品久久| 香蕉成人av| 4hu四虎永久在线影院成人| 下面一进一出好爽视频| 超碰97久久| 欧美另类z0zxhd电影| 国产免费中文字幕| 99久久人爽人人添人人澡| 日韩电影大片中文字幕| 蜜桃视频无码区在线观看| 精品伊人久久久| 国产一区二区三区在线观看视频| 黄色香蕉视频在线观看| 99在线观看免费视频精品观看| 91成品人片a无限观看| 中文字幕乱码人妻无码久久| 国产精品一区二区视频| 乱一区二区三区在线播放| chinese偷拍一区二区三区| 成人av网址在线| 欧洲视频一区二区三区| 超碰人人在线| 日韩欧美成人精品| 亚洲制服中文字幕| 亚洲69av| 亚洲成人中文字幕| 欧美黄色高清视频| 亚洲大胆视频| 久久久久久久一| 亚洲中文字幕无码爆乳av| 国产一区二区在线观看视频| 久久99蜜桃综合影院免费观看| 亚洲国产成人一区二区| 国产在线看一区| 精品网站在线看| www久久日com| 91成人免费在线| 天堂www中文在线资源| 99精品美女| 国产99在线|中文| 亚洲精品无码专区| 亚洲欧洲三级电影| 国产又大又硬又粗| 国产欧美自拍一区| 久久91精品国产91久久久| 中文在线免费看视频| 不卡av在线免费观看| 穿情趣内衣被c到高潮视频| 三级成人黄色影院| 日韩理论片久久| 国产一级做a爱免费视频| 狠狠色丁香久久综合频道| 国产欧美日韩中文| 国内精品在线视频| 精品久久中文字幕久久av| 亚洲综合在线一区二区| 日本欧美视频| 国产不卡精品视男人的天堂| 手机看片福利在线| 亚洲第一搞黄网站| 国产大学生av| 一区二区三区在线观看免费| 国产免费一区二区三区香蕉精| 免费看国产片在线观看| 亚洲综合激情另类小说区| 免费网站在线观看黄| 色婷婷一区二区三区| 国产美女久久精品| 麻豆tv入口在线看| 欧美精品国产精品| 182在线观看视频| 国产一区91精品张津瑜| 亚洲一区美女| 欧美人与性动交α欧美精品济南到 | 欧美一区二区三区精美影视| 欧美巨大丰满猛性社交| 日韩电影中文字幕av| 日韩 欧美 中文| 2023国产精品| 国产欧美高清在线| 国产一区二区三区电影在线观看| 日韩av色综合| 高清av在线| 亚洲免费看黄网站| 一级黄色免费毛片| 欧美日韩国产免费观看| 国产精品久久久久免费| 24小时免费看片在线观看| 亚洲国产成人精品一区二区| 亚洲 欧美 视频| 久久久综合激的五月天| 欧美成人dvd在线视频| 性xxxxfreexxxxx欧美丶| 国产偷亚洲偷欧美偷精品| 6080午夜伦理| 国产精品色哟哟| 天天做天天躁天天躁| 97se亚洲| 国产ts一区二区| 午夜在线视频| 日韩免费在线观看| 日韩在线视频免费播放| 欧美激情一区二区三区四区| 视频免费1区二区三区| 欧美精品日本| 美日韩精品免费| 久久久国产精品网站| 久久久久久com| 麻豆国产在线播放| 欧美一级高清片| 欧美一级特黄视频| 1000精品久久久久久久久| av漫画在线观看| 久久久久国产精品一区三寸| a级网站在线观看| 欧洲亚洲视频| 91天堂在线观看| 蜜桃视频动漫在线播放| 久久精品2019中文字幕| 天堂av在线免费观看| 亚洲精品中文在线影院| 中文字幕av观看| 激情欧美日韩一区二区| 你懂的av在线| 91av精品| 日本在线成人一区二区| 给我免费播放日韩视频| 国产精品免费视频久久久| 欧美性猛片xxxxx免费中国| 一区二区三区无码高清视频| 亚洲国产精品suv| 欧美视频日韩视频在线观看| 国产乡下妇女做爰毛片| 中文字幕欧美一区| 成人黄色免费网址| www.性欧美| 国产人妻精品久久久久野外| 三级一区在线视频先锋 | 麻豆免费在线| 久热在线中文字幕色999舞| 色播色播色播色播色播在线| 欧美一级片免费看| 伊人免费在线观看| 日韩欧美中文字幕在线观看| 精品一级少妇久久久久久久| 中文字幕在线观看一区| 中文字幕第20页| 91蜜桃婷婷狠狠久久综合9色| 免费观看黄网站| 狠狠色狠狠色综合日日91app| 大肉大捧一进一出好爽动态图| 亚洲成人原创| 欧美日韩福利在线| 欧美激情视频一区二区三区免费| 一区一区视频| 水蜜桃久久夜色精品一区| 成人黄色免费片| 日本在线视频www鲁啊鲁| 中文字幕日韩欧美| 青草久久伊人| 亚洲精选一区二区| 五月激情丁香婷婷| 亚洲国产精品va在线| 性生活三级视频| 欧美一区二区免费观在线| 国产又粗又猛又黄| 欧美日本一区二区三区| 最近中文字幕在线观看| 91成人网在线| 中文字幕乱码人妻二区三区| 精品视频资源站| 一区二区三区午夜| 欧美另类高清zo欧美| 亚洲专区第一页| 欧美美女黄视频| 国产精品女人久久久| 在线播放日韩导航| 国产女人爽到高潮a毛片| 91精品国产综合久久久久久久 | 欧美三日本三级少妇99| 精品国产乱码久久久久久婷婷 | 婷婷四房综合激情五月| 热久久天天拍国产| 精品一区二区成人免费视频| 一本精品一区二区三区| 中文字幕人妻熟女人妻洋洋| 欧美日韩一区二区国产| 免费一级特黄特色毛片久久看| 日韩午夜黄色| 农村妇女精品一二区| 免费人成精品欧美精品| 亚洲男人天堂av在线| 国产精品自拍毛片| 性色av蜜臀av浪潮av老女人| 久久久蜜桃精品| 羞羞在线观看视频| 亚洲一区二区三区四区五区黄| 久久狠狠高潮亚洲精品| 在线视频亚洲一区| 国产色综合视频| 亚洲黄页网在线观看| 粉嫩av一区| 欧美成人一区在线| 亚洲欧美电影| 91精品啪aⅴ在线观看国产| 在线一区二区三区视频| 欧美日韩精品免费观看视一区二区| 成人激情视频| 欧美精品自拍视频| 日日夜夜精品视频免费| 中文字幕在线视频一区二区| 91视频免费看| www.5588.com毛片| 一本色道久久加勒比精品 | 久久人体av| 国产乱码精品一区二区三区卡| 国产一区2区| 免费人成自慰网站| 免费欧美日韩国产三级电影| 美女扒开腿免费视频| 国产精品伦一区| 国产成人无码精品亚洲| 在线不卡一区二区| 九色在线视频蝌蚪| 久久久久久久999| 欧美美女被草| 欧美一区二区三区精美影视| 国内精品99| 污版视频在线观看| 99re8在线精品视频免费播放| 天堂网av2018| 色哟哟在线观看一区二区三区| 国产99对白在线播放| 欧美日韩亚洲综合| 人妻无码中文字幕| 日韩在线观看免费全| 在线视频超级| 国产精品视频免费观看| 偷拍欧美精品| 午夜视频你懂的| 91在线观看高清| 欧美精品色哟哟| 欧美日韩精品欧美日韩精品| 天天干天天色天天| 九九热在线精品视频| 久久久免费人体| 午夜精品电影在线观看| 国产精品嫩草99av在线| 精品国产免费久久久久久婷婷| 国产精品乱码久久久久久| 亚洲色成人www永久网站| 亚洲成人免费网站| 国产色婷婷在线| 亚洲japanese制服美女| 欧美国产小视频| 一区二区三区网址| 欧美激情中文字幕| 无码人妻丰满熟妇精品| 国产视频久久久久久久| 美女91在线看| 久久国产精品亚洲va麻豆| 韩日视频一区| 国产清纯白嫩初高中在线观看性色| 亚洲精选免费视频| 国产99对白在线播放| 欧美成年人视频网站欧美| 亚洲国产精选| 国产精品av免费| 国产乱码精品一区二区三区五月婷| 精品人妻伦九区久久aaa片| 91精品在线免费| 伊人福利在线| 91网免费观看| 亚洲日本成人| 色综合色综合色综合色综合| 国产香蕉久久精品综合网| av片免费观看| 在线观看欧美www| 欧美jizz18| 香蕉视频免费版| 粉嫩13p一区二区三区| 黄色小视频在线免费看| 亚洲第一网站男人都懂| 看黄在线观看| 日韩精品久久久免费观看| 日本中文字幕一区二区视频 | 成人午夜激情免费视频| 欧美一区国产在线| 中文在线观看免费视频| 福利一区福利二区微拍刺激| 国产原创av在线| 成人a免费视频| 国产精品草草| 一区二区三区少妇| 欧美曰成人黄网| 国产激情在线观看| 国产超碰91| 日日欢夜夜爽一区| 日本中文在线视频| 精品久久国产字幕高潮| 美脚恋feet久草欧美| 亚洲蜜桃av| 国产成人鲁色资源国产91色综| 日韩免费观看一区二区| 在线观看精品自拍私拍| 色妞ww精品视频7777| 蜜臀久久99精品久久久酒店新书 | 色婷婷久久综合中文久久蜜桃av| 日韩中文字幕免费视频| 99热这里只有精品首页| 久热免费在线观看| 一区二区三区国产| 国产露出视频在线观看| 97操在线视频| 日本人妖一区二区| 久久精品www人人爽人人| 亚洲人成在线观看| 日韩一区二区三区色| 91黄色小网站| 一区二区高清视频在线观看| 男女视频在线观看免费| av一区二区三区四区电影| 美腿丝袜在线亚洲一区| 男人天堂中文字幕| 麻豆国产精品va在线观看不卡 | 欧美h视频在线观看| 91一区二区三区在线播放|