演算法一詞源於
⑴ 電腦發展史
發展歷史
(1)大型主機階段
20世紀40-50年代,是第一代電子管計算機。經歷了電子管數字計算機、晶體管數字計算機、集成電路數字計算機和大規模集成電路數字計算機的發展歷程,計算機技術逐漸走向成熟。;
(2)小型計算機階段
20世紀60-70年代,是對大型主機進行的第一次「縮小化」,可以滿足中小企業事業單位的信息處理要求,成本較低,價格可被接受;
(3)微型計算機階段
20世紀70-80年代,是對大型主機進行的第二次「縮小化」,1976年美國蘋果公司成立,1977年就推出了AppleII計算機,大獲成功。1981年IBM推出IBM-PC,此後它經歷了若干代的演進,佔領了個人計算機市場,使得個人計算機得到了很大的普及;
(4)客戶機/伺服器
即C/S階段。隨著1964年IBM與美國航空公司建立了第一個全球聯機訂票系統,把美國當時2000多個訂票的終端用電話線連接在了一起,標志著計算機進入了客戶機/伺服器階段,這種模式至今仍在大量使用。在客戶機/伺服器網路中,伺服器是網路的核心,而客戶機是網路的基礎,客戶機依靠伺服器獲得所需要的網路資源,而伺服器為客戶機提供網路必須的資源。C/S結構的優點是能充分發揮客戶端PC的處理能力,很多工作可以在客戶端處理後再提交給伺服器,大大減輕了伺服器的壓力;
(5)Internet階段
也稱互聯網、網際網路、網際網階段。互聯網即廣域網、區域網及單機按照一定的通訊協議組成的國際計算機網路。互聯網始於1969年,是在ARPA(美國國防部研究計劃署)制定的協定下將美國西南部的大學(UCLA(加利福尼亞大學洛杉磯分校)、Stanford Research Institute(史坦福大學研究學院)、UCSB(加利福尼亞大學)和University of Utah(猶他州大學))的四台主要的計算機連接起來。此後經歷了文本到圖片,到現在語音、視頻等階段,寬頻越來越快,功能越來越強。互聯網的特徵是:全球性、海量性、匿名性、交互性、成長性、扁平性、即時性、多媒體性、成癮性、喧嘩性。互聯網的意義不應低估。它是人類邁向地球村堅實的一步;
(6)雲計算時代
從2008年起,雲計算(Cloud Computing)概念逐漸流行起來,它正在成為一個通俗和大眾化(Popular)的詞語。雲計算被視為「革命性的計算模型」,因為它使得超級計算能力通過互聯網自由流通成為了可能。企業與個人用戶無需再投入昂貴的硬體購置成本,只需要通過互聯網來購買租賃計算力,用戶只用為自己需要的功能付錢,同時消除傳統軟體在硬體,軟體,專業技能方面的花費。雲計算讓用戶脫離技術與部署上的復雜性而獲得應用。雲計算囊括了開發、架構、負載平衡和商業模式等,是軟體業的未來模式。它基於Web的服務,也是以互聯網為中心。
⑵ 大數據的發展,伴隨的將是軟體工程師的漸退,演算法工程師的崛起
大數據在人類 歷史 長河的各個時期一直存在著,只是要等到技術發展到一定階段,它才開始嶄露頭角。而它的未來又在哪裡?來自 Intercom 的工程師 Cathal Horan 表達了他對大數據的看法,他認為,未來屬於演算法,而不是代碼。以下內容翻譯自 Cathal 在 hackernoon 網站發表的博文,已獲得翻譯授權。原文鏈接:The future is algorithms, not code。
「大數據時代」的稱號並不能為當今世界所獨享,數據充斥著人類文明 歷史 長河的各個時期。縱觀這些 歷史 時期,通過從離散到抽象的轉換,我們就會明白為什麼演算法比代碼重要。
說到大數據……
如果我們把整個人類 歷史 看成一天,那麼我們只能從晚上 11 點 7 分開始說起。這是安靜的一天。但是在隨後的一丁點時間里,我們積攢了很多知識和故事,並打算將它們傳達給其他人。你可以想像最開始人類通過對話的形式將知識代代相傳,從父輩傳給子輩,從老師傳給學生。但是整個 社會 的知識量增長迅速,以至於最初的對話形式無法傳達這么多的信息。
我們需要將這些信息編撰成冊進行保存和傳播。通過書寫的方式將知識編撰成冊代表著這些時期在技術上的重大轉變。事實上,蘇格拉底(柏拉圖「斐德羅篇」里的角色)認為這種技術轉變比不上最初的對話形式,擔心它會降低我們開發智慧和知識的能力。所以很自然地,我不認為蘇格拉底會喜歡電視。
問題的核心是,對話代表了一種離散的溝通手段。你知道你的交談對象是誰,而且參與對話的人通過論證和反證的方式進行直接的互動。反過來,書本是一種抽象的溝通手段,作者和讀者之間不存在直接的互動。作者並不知道誰讀了他的書,也不知道有多少人、在什麼時候、在哪裡讀了他的書。有時候,我們可能知道潛在的讀者群體是誰,然後根據讀者群體進行內容裁剪。不過大多數時候,書本都只是一種抽象的傳播知識和學習新技能的手段。
等腰三角形的大數據
當我們從簡單的計算形式轉變為由定理、符號和演算法組成的抽象形式(我們現在稱其為數學),就開啟了另一個大數據時代。第一批有記載的計算發生在公元前 2500 年的美索不達米亞。當時,美索不達米亞人需要計算出一谷倉的糧食能夠養活多少人。
或許你想知道人類 歷史 上的其他大數據時期,不過我想直接跳到 20 世紀,看看代碼如何成為現代技術領域的重要組成部分(如果你有其他大數據時期的資料,可以聯系我 @cathalhoran,我相信它們會很有趣)。
代碼的崛起
1945 年,當 Grace Hopper 開始在 Harvard Mark I 計算機上工作時,編碼(或者說編程,不過我們不打算在這里區分它們有什麼不同)這項工作的重要性就開始凸顯出來。在這之前,電腦(如果可以這么叫它的話)充其量只是個計算工具。以二戰為例,當時的大炮需要藉助矩陣進行輔助瞄準。矩陣是一些方程式的計算結果,這些方程式使用數百種不同的計算因子,比如距離、海拔、風速、溫度、濕度,等等。電腦(computer)這個名字的由來也是很偶然的,人們用它描述在二戰中操作計算機的女性,她們被稱為「computer」。操作員們必須使用打孔卡和曲柄來處理方程式。一個打孔卡需要 170 個人月才能完成。
這個與我們之前討論的事情有什麼相似之處?美索不達米亞人使用黏土矩陣來進行計算,而到了 20 世紀,計算媒介變成了編碼。雖然已經有了長足的進步,不過編碼仍然是一種離散的操作,因為它執行的是具體的計算任務,只是效率上有所提升而已。編碼解放了人工操作,讓我們可以處理更多的數據。
演算法與代碼
演算法 :一系列用於描述一個問題解決方案的步驟,符合正確性和有限性的標准。是與具體實現相互獨立的抽象計算步驟。
代碼 :一系列計算機指令。它們是計算的具體實現,使用一種特定的編程語言,運行在一個特定的平台上。
人們可以藉助這種直接向計算機發送編碼指令的方式來實現更為復雜的指令序列,並以演算法的形式呈現出來。演算法比編碼的出現要早得多。穆斯林數學家 Al-Khawarizm 早在公元 820 年就對解決線性方程和二次方程式的演算法進行了描述。演算法一詞來源於這位數學家的拉丁文名字「Algoritmi」,而「algebra」則來源於「al-jabr」,Al-Khawarizm 用它來解決二次方程式問題。演算法由一系列有限的計算或指令組成,並產生一個結果。正如我們所知道的那樣,代碼是向計算機發出指令的一種方式,很適合用於實現演算法。它們只不過是一系列按照一定次序執行的操作。
與早期的大數據時期一樣,我們這個時代的信息量也在增長。根據摩爾定律,我們在編碼的設計和使用方面所作的改進換來了性能的提升,從而能夠應付不斷增長的數字化需求。你可以繼續編寫代碼從資料庫查詢相關的資源列表。這些操作的離散特徵仍然被保留了下來,因為人們仍然在通過編寫代碼告訴硬體應該做哪些事情。就算操作變得越來越復雜,它仍然只是人類的編碼指令。不過,演算法已經開始展露頭角,正在創造一個抽象的新時代。
演算法的崛起
所以說,演算法和代碼之間有很大的不同。代碼可以用來實現演算法,而且代碼的實現方式會影響到性能。例如,如果你要從一個序列里找出最大或最小的元素,那麼二叉堆的性能相比其他的數據結構要好很多。不過,你已經沒有必要通過編寫代碼來實現一個演算法,就像沒有必要通過聽音樂來寫歌一樣。
雖然每個人都知道摩爾定律的魔力,驅動數字經濟發展的性能改進遵循的就是摩爾定律,但鮮有人知道, 在很多領域,演算法所產生的性能改進已經超過了硬體所帶來的性能提升。 實際上,2010 年的一份官方報告表明,演算法已經為很多領域帶來了顯著的性能提升,比如語音識別、神經語言處理和物流。
「更加令人感到吃驚但同時又令人難以理解的是,在很多領域,演算法為性能帶來的提升已經遠遠超過了處理器速度提升所帶來的性能改進。」—— 面向總統和國會的報告:設計數字的未來
抽象演算法
我們現在擁有大量的數據,這意味著我們不能再用離散的思維來思考問題。大數據促使我們轉變思維。它促使我們向後退一步,去尋找能夠處理數據洪流的方法。按照傳統的方式,你可能會根據一些指定的模式或參數編寫代碼來查詢數據。例如,你可能想從資料庫中查找在過去兩周買過 2 件商品並且支付超過 30 歐元的顧客,因為你想聯繫到這些顧客,並向他們推薦一些優惠活動。你使用這個模式來查找匹配的數據。不過大數據卻正好相反,你先有了數據,然後查找可以匹配這些數據的模式。
想想看,有這么多的數據,但是我們卻找不到匹配的模式,所以我們要回退一步。我們通過集群、分類、機器學習和其他新的支撐技術來尋找模式,而能夠幫助我們做到這點的是演算法,不是代碼。要找到隱藏在暗處的模式,跨出這一步是必需的。與光譜一樣,有一些波長的光線我們是看不到的,而超過一定數據量之後的模式我們也是看不到的,它就是大數據。
我們不僅可以從中搜索到模式,它還能夠生成做這些事情所需要的代碼。Pedro Domingos 在「The Master Algorithm」一書中描述了如何使用「學習者演算法」來創建新的演算法,這些演算法可以反過來為我們編寫我們所需要的代碼,「通過機器學習,計算機可以自己編程,我們就可以解放了」。為了實現這個目標,我們需要更好地理解這些演算法的原理,以及如何讓它們與我們的需求相匹配。否則,我們就無法向抽象轉變。
「工業的發展讓手工勞動自動化,信息的發展讓腦力勞動自動化,而機器學習則讓它自己自動化。如果沒有機器學習,程序員就會成為發展瓶頸。而有了機器學習,發展的速度就會加快。」—— Pedro Domingos,「The Master Algorithm 」
思考演算法
不過,不管如何從離散轉變成抽象,我們仍然需要程序員,但這不是重點。並不是說代碼已經變得不重要了,也不是說代碼就不會再帶來任何改進。重點在於,我們要開始思考演算法,這不僅僅是數學家或學者的事情。我們周邊充斥著各種演算法,以致於我們不需要知道如何編寫代碼來使用它們,或者理解它們。現在,有一些人通過新的演算法對不同的領域進行優化和改進,他們使用了遺傳編程(genetic programming)和大數據技術。人們甚至創造了更好的優化技術,他們觀察金屬的冷卻過程,並通過演算法對其進行建模(被稱為模擬退火演算法,這就是我們應該從演算法角度開始考慮問題的一個最好的例子)。
編碼作為新數字經濟的關鍵技能,就像學習如何閱讀一樣,已經模糊了我們對演算法的理解。演算法正逐漸成為我們生活的組成部分,從電影推薦到新聞過濾和尋找合作夥伴。我們要更好地理解它們,這樣才能更好地理解和掌控我們的未來
⑶ 什麼叫演算法什麼叫計算機演算法
一、演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。
二、計算機演算法是以一步接一步的方式來詳細描述計算機如何將輸入轉化為所要求的輸出的過程,或者說,演算法是對計算機上執行的計算過程的具體描述。
⑷ 演算法的基本特徵是
演算法
3分鍾了解今日頭條演算法原理(科普版)
02:43
什麼是演算法
04:28
概述
歷史發展
演算法分類
演算法特徵
演算法要素
演算法評定
目錄
1摘要
2基本信息
3概述
4歷史發展
5演算法分類
6演算法特徵
7演算法要素
數據的運算和操作
演算法的控制結構
8演算法評定
9描述方式
10史料記載
11基本方法
12參考資料
演算法是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制;它是求解問題類的、機械的、統一的方法,常用於計算、數據處理(英語:Data processing)和自動推理。可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
基本信息
中文名
演算法
外文名
Algorithm
拼音
suanfa
出處
數學 計算機
定義
是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制
展開全部
概述
求解問題類的、機械的、統一的方法,它由有限多個步驟組成,對於問題類中的每個給定的具體問題,機械地執行這些步驟就可以得到問題的解答。演算法的這種特性,使得計算不僅可以由人,而且可以由計算機來完成。用計算機解決問題的過程可以分成三個階段:分析問題、設計演算法和實現演算法。[1]
歷史發展
中國古代的籌算口決與珠算口決及其執行規則就是演算法的雛形,這里,所解決的問題類是算術運算。古希臘數學家歐幾里得在公元前3世紀就提出了一個演算法,來尋求兩個正整數的最大公約數,這就是有名的歐幾里得演算法,亦稱輾轉相除法。中國早已有「算術「、「演算法」等詞彙,但是它們的含義是指當時的全部數學知識和計算技能,與現代演算法的含義不盡相同。英文algorithm(演算法)一詞也經歷了一個演變過程,最初的拼法為algorism或algoritmi,原意為用阿拉伯數字進行計算的過程。這個詞源於公元 9世紀波斯數字家阿爾·花拉子米的名字的最後一部分。[1]
在古代,計算通常是指數值計算。現代計算已經遠遠地突破了數值計算的范圍,包括大量的非數值計算,例如檢索、表格處理、判斷、決策、形式邏輯演繹等。
在20世紀以前,人們普遍地認為,所有的問題類都是有演算法的。20世紀初,數字家們發現有的問題類是不存在演算法的,遂開始進行能行性研究。在這一研究中,現代演算法的概念逐步明確起來。30年代,數字家們提出了遞歸函數、圖靈機等計算模型,並提出了丘奇-圖靈論題(見可計算性理論),這才有可能把演算法概念形式化。按照丘奇-圖靈論題,任意一個演算法都可以用一個圖靈機來實現,反之,任意一個圖靈機都表示一個演算法。
按照上述理解,演算法是由有限多個步驟組成的,它有下述兩個基本特徵:每個步驟都明確地規定要執行何種操作;每個步驟都可以被人或機器在有限的時間內完成。人們對於演算法還有另一種不同的理解,它要求演算法除了上述兩個基本特徵外,還要具有第三個基本特徵:雖然有些步驟可能被反復執行多次,但是在執行有限多次之後,就一定能夠得到問題的解答。也就是說,一個處處停機(即對任意輸入都停機)的圖靈機才表示一個演算法,而每個演算法都可以被一個處處停機的圖靈機來實現[1]
演算法分類
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法。[1]
演算法可以宏泛的分為三類:
有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。
有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。
無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。[1]
演算法特徵
1、輸入項:一個演算法有零個或多個輸入,以刻畫運算對象的初始情況。例如,在歐幾里得演算法中,有兩個輸入,即m和n。[1]
2、確定性:演算法的每一個步驟必須要確切地定義。即演算法中所有有待執行的動作必須嚴格而不含混地進行規定,不能有歧義性。例如,歐幾里得演算法中,步驟1中明確規定「以m除以n,而不能有類似以m除n以或n除以m這類有兩種可能做法的規定。
3、有窮性:一個演算法在執行有窮步滯後必須結束。也就是說,一個演算法,它所包含的計算步驟是有限的。例如,在歐幾里得演算法中,m和n均為正整數,在步驟1之後,r必小於n,若r不等於0,下一次進行步驟1時,n的值已經減小,而正整數的遞降序列最後必然要終止。因此,無論給定m和n的原始值有多大,步驟1的執行都是有窮次。
4、輸出:演算法有一個或多個的輸出,即與輸入有某個特定關系的量,簡單地說就是演算法的最終結果。例如,在歐幾里得演算法中只有一個輸出,即步驟2中的n。
5、能行性:演算法中有待執行的運算和操作必須是相當基本的,換言之,他們都是能夠精確地進行的,演算法執行者甚至不需要掌握演算法的含義即可根據該演算法的每一步驟要求進行操作,並最終得出正確的結果。[1]
⑸ algorithm與arithmatic的區別,到底那個詞在英文中是演算法的意思
詞性不同,algorithm是名詞,algorithmic是形容詞.
algorithm
[英]['ælɡərɪðəm][美][ˈælɡəˌrɪðəm]
n.運演算法則; 演演算法; 計算程序;
An algorithm then scrapes the web for relevant historical content--newsclippings, pictures, video footage.
記錄完故事後,Story Coach的演算法會在互聯網上搜索與故事相關的歷史資料——新聞片段、圖片、視頻等.
algorithmic
[英]ˌælgə'rɪðmɪk [美]ˌælgə'rɪðmɪk
adj. 演算法的,規則系統的
[例句]Professional criminals are increasingly likely to outflank legitimate companies in competing for google 's algorithmic attention , security professionals say.
網路安全專家表示,在爭取谷歌(google)搜索演算法的關注度方面,職業犯罪分子越來越可能比合法公司智高一籌.
⑹ 人工智慧演算法的來源源於哪裡
人工智慧用的比較多的語言有:Python、JAVA 和相關語言、C/C++、JavaScript、R語言。
人工智慧是需要人力、腦力、開發、高等技術與不斷的研究和嘗試等等一系列超高難度的作業才能完成的科技產品。當然這種研究是得到國家和人們大力支持的發展。它的發展對國際影響力是非常大的。人工智慧也可以定義為高仿人類,雖然不可能會像人一樣具有靈敏的反應和思考能力,但人工知能是按照人類的思想結構等等的探索而開發的研究。
人工智慧的開發最主要的目的就是為了替人類做復雜、有危險難度、重復枯燥等的工作,所以人工智慧是以人類的結構來設計開發的,人工智慧在得到較好的開發後國家也是全力給予支持。人工智慧的開發主要也是為了幫助和便利人類的生活。所以人工智慧的定義一直以來都是以「協助人類」而存在的。人工智慧概念的火熱促進了不少行業的興起,比如域名,許多相關的.top域名已經被注冊。
以後可能在很多傳統行業,比如銀行,會有人工智慧幫你得到更好的收益。信用卡或其他的貸款會由人工智慧來決定哪些人士可以安全地放貸,而且會還錢。然後再往下人工智慧可以開始動了,就可以進入工業機器人、商業機器人,終進入家庭機器人。
⑺ 演算法是什麼急!!!!
演算法 Algorithm
演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
演算法的設計要求
1)正確性(Correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序對幾組輸入數據能夠得出滿足規格要求的結果;
C.程序對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入數據能夠得出滿足規格要求的結果;
D.程序對一切合法的輸入數據都能產生滿足規格要求的結果。
2)可讀性(Readability)
演算法的第一目的是為了閱讀和交流;
可讀性有助於對演算法的理解;
可讀性有助於對演算法的調試和修改。
3)高效率與低存儲量
處理速度快;存儲容量小
時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統一、折中。
演算法的描述 演算法的描述方式(常用的)
演算法描述 自然語言
流程圖 特定的表示演算法的圖形符號
偽語言 包括程序設計語言的三大基本結構及自然語言的一種語言
類語言 類似高級語言的語言,例如,類PASCAL、類C語言。
演算法的評價 演算法評價的標准:時間復雜度和空間復雜度。
1)時間復雜度 指在計算機上運行該演算法所花費的時間。用「O(數量級)」來表示,稱為「階」。
常見的時間復雜度有: O(1)常數階;O(logn)對數階;O(n)線性階;O(n^2)平方階
2)空間復雜度 指演算法在計算機上運行所佔用的存儲空間。度量同時間復雜度。
時間復雜度舉例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
「演算法」一詞最早來自公元 9世紀 波斯數學家比阿勒·霍瓦里松的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一台機器,這台機器被我們稱之為 圖靈機 。圖靈的思想對演算法的發展起到了重要的作用。
演算法是 計算機 處理信息的本質,因為 計算機程序 本質上是一個演算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或列印學生的成績單。 一般地,當演算法在處理信息時,數據會從輸入設備讀取,寫入輸出設備,可能保存起來以供以後使用。
這是演算法的一個簡單的例子。
我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小 可以將下面的演算法形象地稱為「撿豆子」:
首先將第一顆豆子(數列中的第一個數字)放入口袋中。
從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式演算法,用近似於 編程語言 的 偽代碼 表示
給定:一個數列「list",以及數列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變數。
List[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 List[counter] 表示數列中的第5項。
<= 用於表示「小於或等於」。
演算法的分類
(一)基本演算法 :
1.枚舉
2.搜索:
深度優先搜索
廣度優先搜索
啟發式搜索
遺傳演算法
(二)數據結構的演算法
(三)數論與代數演算法
(四)計算幾何的演算法:求凸包
(五)圖論 演算法:
1.哈夫曼編碼
2.樹的遍歷
3.最短路徑 演算法
4.最小生成樹 演算法
5.最小樹形圖
6.網路流 演算法
7.匹配演算法
(六)動態規劃
(七)其他:
1.數值分析
2.加密演算法
3.排序 演算法
4.檢索演算法
5.隨機化演算法
⑻ 演算法是指解決問題的一種方法或一個過程對嗎
正確
演算法是指解決問題的方法或過程,它包含一系列步驟,用來將輸入數據轉換成輸出結果。
⑼ 什麼是演算法,都什麼,舉個例子,謝謝
根據我個人的理解:
演算法就是解決問題的具體的方法和步驟,所以具有以下性質:
1、有窮性: 一個演算法必須保證執行有限步之後結束(如果步驟無限,問題就無法解決)
2、確切性:步驟必須明確,說清楚做什麼。
3、輸入:即解決問題前我們所掌握的條件。
4、輸出:輸出即我們需要得到的答案。
5、可行性:邏輯不能錯誤,步驟必須有限,必須得到結果。
演算法通俗的講:就是解決問題的方法和步驟。在計算機發明之前便已經存在。只不過在計算機發明後,其應用變得更為廣泛。通過簡單的演算法,利用電腦的計算速度,可以讓問題變得簡單。
譬如:計算 1×2×3×4。。。。×999999999×1000000000
如果人為計算,可想而知,即使你用N卡車的紙張都很難計算出來,即使算出來了,也很難保證其准確性。
如果用VB演算法:
dim a as integer
a=1
For i =1 to 1000000000
a=a*i
next i
input a
就這樣,簡單的演算法,通過計算機強大的計算能力,問題就解決了。
關於這段演算法的解釋:i每乘一次,其數值都會增大1,一直乘到1000000000,這樣,就將從1到1000000000的每個數都乘了。而且每乘一次,就將結束賦給a,這樣,a就代表了前面的相乘的所有結果,一直乘到1000000000。最後得到的a,就是我們想要的。
〓以下是網路復制過來的,如果你有足夠耐心,可以參考一下。
演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法= 程序》,可見演算法在計算機科學界與計算機應用界的地位。
[編輯本段]演算法的復雜度
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
時間復雜度
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
空間復雜度
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
詳見網路詞條"演算法復雜度"
[編輯本段]演算法設計與分析的基本方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關系,從而達到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,並從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合並。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於計算機科學和工程領域。
7.迭代法
迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。
[編輯本段]演算法分類
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法。
[編輯本段]舉例
經典的演算法有很多,如:"歐幾里德演算法"。
[編輯本段]演算法經典專著
目前市面上有許多論述演算法的書籍,其中最著名的便是《計算機程序設計藝術》(The Art Of Computer Programming) 以及《演算法導論》(Introction To Algorithms)。
[編輯本段]演算法的歷史
「演算法」即演演算法的大陸中文名稱出自《周髀算經》;而英文名稱Algorithm 來自於9世紀波斯數學家al-Khwarizmi,因為al-Khwarizmi在數學上提出了演算法這個概念。「演算法」原為"algorism",意思是阿拉伯數字的運演算法則,在18世紀演變為"algorithm"。歐幾里得演算法被人們認為是史上第一個演算法。 第一次編寫程序是Ada Byron於1842年為巴貝奇分析機編寫求解解伯努利方程的程序,因此Ada Byron被大多數人認為是世界上第一位程序員。因為查爾斯·巴貝奇(Charles Babbage)未能完成他的巴貝奇分析機,這個演算法未能在巴貝奇分析機上執行。 因為"well-defined procere"缺少數學上精確的定義,19世紀和20世紀早期的數學家、邏輯學家在定義演算法上出現了困難。20世紀的英國數學家圖靈提出了著名的圖靈論題,並提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。圖靈機的出現解決了演算法定義的難題,圖靈的思想對演算法的發展起到了重要作用的。
⑽ 6×23×25怎麼簡便演算法
按計算器。
演算法」一詞起源於將 Muhammad ibn Musa al-Khwarizmi的名字拉丁化,這是 演算法書的第一步。
所以簡便演算法要進場。