算法設計原則是什么?
原則:首先說設計的算法必須是"正確的",其次應有很好的"可讀性",還必須具有"健壯性",最后應考慮所設計的算法具有"高效率與低存儲量"。
所謂算法是正確的,除了應該滿足算法說明中寫明的"功能"之外,應對各組典型的帶有苛刻條件的輸入數據得出正確的結果。
在算法是正確的前提下,算法的可讀性是擺在第一位的,這在當今大型軟件需要多人合作完成的環境下是換重要的,另一方面,晦澀難讀的程序易于隱藏錯誤而難以調試。算法的效率指的是算法的執行時間,算法的存儲量指的是算法執行過程中所需最大存儲空間。
算法是程序設計的另一個不可缺的要素,因此在討論數據結構的同時免不了要討論相應的算法。這里有兩重意思,即算法中的操作步驟為有限個,且每個步驟都能在有限時間內完成。
確定性表現在對算法中每一步的描述都沒有二義性,只要輸入相同,初始狀態相同,則無論執行多少遍,所得結果都應該相同。
可行性指的是,序列中的每個操作都是可以簡單完成的,其本身不存在算法問題,例如,"求x和y的公因子"就不夠基本。
輸入值即為算法的操作對象,但操作的對象也可以由算法自身生成,如"求100以內的素數",操作對象是自然數列,可以由變量逐個增1生成。
算法的健壯性指的是,算法應對非法輸入的數據作出恰當反映或進行相應處理,一般情況下,應向調用它的函數返回一個表示錯誤或錯誤性質的值。
算法設計有哪些方法
算法設計常用的幾種方法是
1.
窮舉法
2.
貪心法
3.
分治法
4.
回溯法
5.
分枝限界法
6.
動態規劃法
算法設計讀后感精選
《算法設計》是一本由Jon Kleinberg / Éva Tardos著作,人民郵電出版社出版的平裝圖書,本書定價:119.00元,頁數:503,特精心從網絡上整理的一些讀者的讀后感,希望對大家能有幫助。
《算法設計》讀后感(一):算法
有點像導論一樣的書,沒有算法具體實現的代碼,每學完一部分知識后,書中會有一些例題和練習題,適合想要對計算機算法進行整體,深入,了解的人,這本書所包含的算法很多,很全,比較深(對于我這樣的菜雞)。書中的圖文都很清晰,閱讀起來很舒服。整本書還是比較大和厚,帶起來不太方便,適合墊顯示器。
《算法設計》讀后感(二):算法設計
先看看作者吧,Jon Kleinberg是美國國家科學院(NAS)、美國國家工程院(NAE)、美國人文與科學院(AAAS)三料院士,在計算機科學領域是“傳說級”的人物。而且他還獲得過國際數學家大會頒發“奈望林納獎”,這個獎是數學家大會為了表彰信息科學方面的重要數學貢獻而設的。英文版已經讀過一版,終于新出中文版了,令人期待
《算法設計》讀后感(三):最全面的習題解答
這本書不光細節滿滿,每章后面的帶解答練習更是點睛之筆,一般書中的習題答案要么是最后解,要么簡單的分析,這本書的建議解答幾乎把每一個點都寫在書中,讓人更容易理解其意。
本書帶入的算法研究,始于各種計算應用程序中出現的問題,構建在對算法設計技術理解基礎之上,最終得到這些問題的有效解決方案。
《算法設計》讀后感(四):作者是擁有豐富算法經驗的科學家,《算法設計》成為了華盛頓大學等眾多高校的課程教材。
《Algorithm Design》已經暢銷15年了。
算法書數量繁多,應該如何挑選呢?異步君今天給大家推薦的算法書,在美亞擁有4.5星的高評分,贏得讀者認可。更值得一提的是,這本書還是國外多所知名高校選用的算法教材。 這本書就是《算法設計》,不能說所有程序員都看過這本書,但它作為大學里的算法教材,絕對是新手入門的經典好書。 從書名來看,似乎是算法和「設計」結合在一起,于是,很多人認為這可能并不是一本入門級的算法書。但其實這本書涉及的知識非常豐富,既可以作為初學者的第一本算法書,也可以作為高手程序員鞏固的基礎教材。為什么會和”設計“相結合呢?還要從這本書的兩位作者對算法的理念說起。
1、科學家眼中的算法設計技術
《算法設計》的作者是來自美國的喬恩•克萊因伯格(以下簡稱喬恩)和匈牙利的伊娃•塔多斯(以下簡稱伊娃)。關于算法問題,他們提出了這樣的觀點: “算法問題構成了計算機科學的核心,但它們很少以整潔、精確的數學問題的形式出現。與之相反的是,它們往往有許多雜亂的、應用程序特定的細節,這些細節由一些至關重要和一些無關緊要的東西糾纏在一起。” 因此他們認為,算法問題由兩個基本部分組成:一是得到數學上整潔的問題核心,二是根據問題結構確定適當的算法設計技術。這兩個部分相互影響:越能自如地運用各種可能的設計技術,也就越能認識到世上混亂問題中的整潔形式描述。在最有效的情況下,算法思想不但能提供適當問題的解決方案,而且它們構成了一種語言,可以讓學習算法的程序員們清晰地表達基本問題。 于是,喬恩和伊娃決定將設計計算帶入到算法研究。 他們很清楚,設計過程一般始于各種計算應用程序中出現的問題,構建在對算法設計技術理解的基礎之上,最終得到這些問題的有效解決方案。 所以,他們試圖探討算法思想在計算機科學中的作用,并將這些思想與一些精確制定的問題聯系起來。他們為這些“問題”設計算法并進行分析。 基于這樣的研究,《算法設計》一書應運而生。喬恩和伊娃將這本書的目標定為:如何在不同計算領域的復雜問題中識別算法問題的清晰描述形式,并針對由此產生的問題,給出如何設計有效算法的建議。 為此,他們將研究成果重新梳理,從最簡單的初始方法甚至于最終的解決方案,以幫助大家更好地理解復雜的算法。讀過這本書的讀者都會感覺:這本書不是描述從問題陳述到算法的最直接路徑,但是可以直接反映出程序員們真正思考這些問題的方式。
2、經典著作背后的科學家
喬恩•克萊因伯格(Jon Kleinberg)
喬恩是美國的計算機科學家,在1996年獲得了麻省理工學院的博士學位,目前是康奈爾大學計算機科學教授。從1995年開始,喬恩在IBM研究院做起了研究,主攻網絡與信息組合結構的數學分析與建模。 喬恩曾獲得帕卡德基金會和斯隆基金會的研究基金,他的研究集中在算法上,特別是與網絡結構和信息相關的算法,以及這些算法在信息科學、優化、數據挖掘及計算生物學等方面的應用。他利用信息中心和權威信息進行網絡分析的工作,對形成最新一代因特網搜索引擎的基礎起了很大的作用。 在計算機領域,喬恩獲獎無數。美國國家科學基金會事業獎、海軍研究局青年研究員獎、IBM杰出創新獎等知名獎項都被他收入囊中。 另一位作者伊娃也是康奈爾大學的計算機科學教授,同時還是一名數學家。
伊娃•塔多斯(Éva Tardos)
1981年,伊娃在導師András Frank的指導下,于匈牙利的羅蘭大學攻讀博士學位。在2006年,伊娃開始擔任康奈爾大學計算機科學系的院長。2007年,伊娃當選為美國國家工程院、文理科學院和美國哲學學會的院士。同時她也是ACM院士。伊娃是富爾克森獎、喬治·B·丹齊格獎、哥德爾獎和EATCS獎的獲得者。在2019年,伊娃還被授予了IEEE約翰·馮·諾依曼獎章。伊娃的研究興趣主要集中在圖和網絡問題的算法設計和分析上。她因在網絡流算法和網絡問題的近似算法方面的工作而聞名。其中包含算法博弈論,這是一個新興領域,關注為自私用戶設計系統和算法。
3、不一樣的算法書
這本書是一本關于算法設計和分析的經典教材,兩位作者圍繞算法設計進行組織,將算法的理論跟實際問題結合起來,對每種算法技術用多個典型范例進行分析,具有極高的啟發性。 書中有大量篇幅專門用于算法問題的形式描述,以及針對該問題的算法設計和分析。這種寫作優勢在于可以采用適當的設計技術開發算法,證明算法的性質并分析其效率。 除了內容覆蓋面廣以外,這本書最大的特色就是有200多道精彩的習題,以及PSPACE問題、參數復雜性等內容。
《算法設計》相較于其他算法書,最大的區別也在于此。這是喬恩和伊娃在康奈爾大學教學課程的一部分,幾乎所有問題都在課外作業中被開發,或者在課堂測驗進行了考試。他們將問題視為本書的一個重要組成部分,并且讓問題集的結構與他們對內容的整體方法保持一致。 其中大部分內容包含了一些問題的詳細文字描述,這些問題出現在計算機科學應用領域或其他地方。部分問題也是他們在教材中討論的問題的實踐:建立必要的符號和形式化,設計算法,然后分析這個算法并證明它是正確的。 為了幫助解決這些問題,他們在每章中都加入了一節,名為“帶解答的練習”,討論一個或多個問題,并描述了如何形式化一個解。因此,專門針對每個帶解答的練習的討論,要比簡單編寫完整、正確的解決方案所需的時間長得多。 實際上,與本書的其余部分一樣,這些節中的討論應該看成是試圖讓人們了解一個更大的過程,通過這個過程可以考慮這種類型的問題,并最終形成精確解的詳細說明。 值得一提的是,由于這本書被國外高校廣泛采用,因此喬恩和伊娃對學習方面的建議更偏向于大學生。 他們建議初學者閱讀本書之前應該先學習基于編程的計算機科學基礎課程,并且已編寫過實現基本算法的程序,操作過離散結構(樹和圖),并應用過基本的數據結構(如數組、列表、隊列和堆棧)。
按照上述思路,他們利用了許多計算機科學和相關領域的問題來開發基本的算法設計技術。包括系統和網絡的應用程序(緩存、交換、互聯網上的域間路由),人工智能(規劃、博弈、霍普菲爾德網絡),計算機視覺(圖像分割),數據挖掘(變更點檢測、聚類),運籌學(航線調度),以及計算生物學(序列比對、RNA 二級結構)。
喬恩和伊娃合著的《算法設計》,圍繞算法設計進行組織,對多個算法技術的典型范例解構剖析,并讓算法與實際問題相結合。可以說,這確實是一本不可多得的經典算法書!
算法的常用設計方法有哪些
算法設計是一件非常困難的工作,經常采用的算法設計技術主要有迭代法、窮舉搜索法、遞推法、貪婪法、回溯法、分治法、動態規劃法等等。
另外,為了更簡潔的形式設計和藐視算法,在算法設計時又常常采用遞歸技術,用遞歸描述算法。
設計算法的原則
設計算法的原則:
1、正確性:算法的正確性是指算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需要、能夠得到問題的正確答案。
2、可讀性:設計算法的目的,一方面是為了讓計算機執行,但還有一個重要的目的就是為了便于他人的閱讀,讓人理解和交流,自己將來也可閱讀。如果可讀性不好,時間長了自己都不知道寫了什么,可讀性是評判算法(也包括實現它的程序代碼)好壞很重要的標志。
3、健壯性:當輸入的數據非法時,算法應當恰當地做出反應或進行相應處理,而不是莫名其妙的輸出結果。并且處理出錯的方法不應是中斷程序的執行,而應是返回一個表示錯誤或錯誤性質的值,以便于在更高的抽象層次上進行處理。
4、高效率與低存儲量:通常,算法的效率指的是算法的執行時間;算法的存儲量指的是算法執行過程中所需要的最大存儲空間,兩者的復雜度都與問題的規模有關。算法分析的任務是對設計的每一個具體的算法,利用數學工具,討論其復雜度,探討具體算法對問題的適應性。
擴展資料:
算法的“正確”通常在用法上有很大的差別,大體分為以下4個層次:
1、算法程序沒有語法錯誤;
2、算法程序能夠根據正確的輸入的值得到滿足要求的輸出結果;
3、算法程序能夠根據錯誤的輸出的值滿足規格說明的輸出結果;
4、算法程序對于精心設計、極其刁難的測試數據都能滿足要求的輸出結果。
對于這4層含義,層次要求最低,因為僅僅沒有語法錯誤實在談不上是好的算法。而層次(4)是最困難的,人們幾乎不可能逐一驗證所有的輸入都得到正確的結果。因此,算法的正確性在大部分情況下都不可能用程序來證明,而是用數學方法證明的。