1. 程式人生 > >為什麼要學習演算法和資料結構

為什麼要學習演算法和資料結構

這篇是AlgoXY的Preface或者說是Introduction.

經常有程式設計師詢問:“演算法有用麼?”,“我工作以來從來沒有用過任何演算法”,“硬體越來越快,不用演算法我的程式也能工作吧?”。”STL提供了那麼多演算法和資料結構,我能呼叫就可以了,不用管他們的實現了吧?“

本文給出兩個趣題,第一道題目展示演算法的威力,第二道題目展示資料結構的威力。

第一道題目是在一組ID中,找出最小的沒有被使用的ID,雖然暴力解法能找出答案,但是面對百萬級的ID數目,暴力解法實際上花費的時間使用者根本沒法忍受。通過這個題目,我們感性展示一下演算法的威力;

第二道題目是找出第1500個只含有2,3,5因子的數字,暴力解法看似能找到答案,但實際上花費的時間根本無法忍受。通過這個題目,我們感性展示一下資料結構的威力;

最後,本文還有一個觀點,那就是通常教科書中演算法和資料結構多為imperative的,很少有純functional的。而後者可以使得很多演算法和資料結構變得非常的簡單,直觀,容易理解。

原文地址:https://sites.google.com/site/algoxy/introduction
PDF:https://sites.google.com/site/algoxy/introduction/preface-en.pdf
原始碼:https://github.com/liuxinyu95/AlgoXY

內容由GNU FDL保護,原始碼由GNU GPLv3保護

相關推薦

為什麼學習演算法資料結構

這裡有一些想法。可能你會發現這個問題在任何演算法書的序言中回答,但無論如何,這是我的看法。 1)不受資料結構程式語言的約束 沒有對各種資料結構的瞭解,很容易限制在語言直接提供的資料結構方面思考解決方案。 如果您是Java程式設計師,您可能會考慮解決方案,只

為什麼學習演算法資料結構

這篇是AlgoXY的Preface或者說是Introduction.經常有程式設計師詢問:“演算法有用麼?”,“我工作以來從來沒有用過任何演算法”,“硬體越來越快,不用演算法我的程式也能工作吧?”。”STL提供了那麼多演算法和資料結構,我能呼叫就可以了,不用管他們的實現了吧?

檢視動畫學習演算法資料結構(一)()

轉載請註明原出處:http://blog.csdn.net/lrs123123/article/details/43114619 這是一個寫給自己複習溫習的博文,不喜勿噴 一、排序板塊 ①氣泡排序(BubbleSort) 動畫展示: java程式碼: public

學習Hadoop對演算法資料結構要求高嗎?

一般海量資料的處理都是自定義儲存結構,實現自己的演算法,這是業界的通用處理思路。這對我們普通程式設計師而言要求還是很高的。Hadoop的優點就是進行了封裝,我們寫的演算法都是偏向於業務的,不需要創造演算法。因此大可放心。但是,大家以後工作的公司可能不使用Hadoop去處理大

Java實現一部分簡單的排序演算法資料結構(學習筆記20171022002)

參考網路資料,複習用Java實現排序演算法:氣泡排序、直接選擇排序、直接插入排序、快速排序。資料結構:單鏈表、棧。 一眼就看明白的程式碼就把註釋省略了。 package sort; import java.lang.reflect.Array; import java.

查詢演算法 淺談演算法資料結構: 七 二叉查詢樹 淺談演算法資料結構: 十一 雜湊表

閱讀目錄 1. 順序查詢 2. 二分查詢 3. 插值查詢 4. 斐波那契查詢 5. 樹表查詢 6. 分塊查詢 7. 雜湊查詢   查詢是在大量的資訊中尋找一個特定的資訊元素,在計算機應用中,查詢是常用的基本運算,例如編譯程式中符號表的查詢。本文

淺談演算法資料結構: 五 優先順序佇列與堆排序

在很多應用中,我們通常需要按照優先順序情況對待處理物件進行處理,比如首先處理優先順序最高的物件,然後處理次高的物件。最簡單的一個例子就是,在手機上玩遊戲的時候,如果有來電,那麼系統應該優先處理打進來的電話。 在這種情況下,我們的資料結構應該提供兩個最基本的操作,一個是返回最高優先

拒絕調包俠,不需要高階演算法資料結構技巧

前言 大多數工科學生或者剛剛入門近年來比較火的“人工智慧”相關演算法的同學,在選擇語言的時候,都會選擇MATLAB、Python、R等等這些高階語言,對自己所學的演算法進行實現和除錯。這些高階語言中,包含了實現複雜演算法的基礎數學演算法、基本統計演算法、基礎資料結構的實現,比如均值(mean)、方差(std

java中各種演算法資料結構的使用場景

一。通用資料結構:陣列,連結串列,樹,雜湊表 通用資料結構通過關鍵字的值來儲存並查詢資料,如報表,合同,記錄,業績等資料。通用資料結構可以用速度的快慢來分類,陣列和連結串列是最慢的,樹相對較快,雜湊表是最快的。請注意,並不是最快的就一定是最好的,因為最快的結構的

淺談演算法資料結構: 八 平衡查詢樹之2-3樹

前面介紹了二叉查詢樹(Binary Search Tree),他對於大多數情況下的查詢和插入在效率上來說是沒有問題的,但是他在最差的情況下效率比較低。本文及後面文章介紹的平衡查詢樹的資料結構能夠保證在最差的情況下也能達到lgN的效率,要實現這一目標我們需要保證樹在插入完成之後

淺談演算法資料結構: 九 平衡查詢樹之紅黑樹

前面一篇文章介紹了2-3查詢樹,可以看到,2-3查詢樹能保證在插入元素之後能保持樹的平衡狀態,最壞情況下即所有的子節點都是2-node,樹的高度為lgN,從而保證了最壞情況下的時間複雜度。但是2-3樹實現起來比較複雜,本文介紹一種簡單實現2-3樹的資料結構,即紅黑樹(

演算法資料結構

資料結構 堆 長度為n的陣列構建成最小堆的時間複雜度 B、B+樹、紅黑樹 說一下B+樹和二叉搜尋樹的區別? 說一下二叉搜尋樹和AVL樹、紅黑樹之間的差別 說下紅黑樹原理,紅黑樹你看虛擬碼的時候他有兩坨比較一樣的有沒有注意過 哪些情況下用棧 知道雜湊嗎?二叉樹比

演算法資料結構單鏈表的逆轉

public void reverse(SinglyList<T> list) { Node<T> p = list.head.next, succ = null, front = null; while (p != null) {

淺談演算法資料結構: 十 平衡查詢樹之B樹

前面講解了平衡查詢樹中的2-3樹以及其實現紅黑樹。2-3樹種,一個節點最多有2個key,而紅黑樹則使用染色的方式來標識這兩個key。 維基百科對B樹的定義為“在電腦科學中,B樹(B-tree)是一種樹狀資料結構,它能夠儲存資料、對其進行排序並允許以O(log n)的時間複雜度執行進行查詢、順序讀取、插入和刪

演算法資料結構】平衡查詢樹之B樹

  以B-樹的效能總是等價於二分查詢(與M值無關),也就沒有B樹平衡的問題;由於M/2的限制,在插入結點時,如果結點已滿,需要將結點分裂為兩個各佔M/2的結點;刪除結點時,需將兩個不足M/2的兄弟結點合併。 下面簡單說明分裂:    下面對B-樹進行實現 #pragma once //3階B樹 tem

挑戰程式設計競賽 演算法資料結構 第6章 遞迴分治法

仿照上述程式碼,本人編寫的C語言AC程式碼如下: //ALDS1_5_C:Koch Curve //2一個很致命的問題,將遞迴中的 s,t;區域性變數寫成全域性變數 //深刻感覺遞迴,還需要時間的積累。2017-9-29 AC #include <stdio.h> #include <ma

python演算法資料結構筆記--漢諾塔問題超詳細遞迴過程圖解(堆疊資料結構

兩個盤子時:1移動到B,2移動到A,1移動到C N個盤子時:n-1移動到B,n移動到A,n-1移動到C 3個盤子為例子,如何將問題歸納為同類的子問題 我們的目標是的第一步先將1,2號盤子移動到B 當3號盤不存在,把B,C柱換個位置,問題轉化為將2個盤子藉助C移動到B子的問題。 要將1,2

《常見演算法資料結構》優先佇列(2)——二叉堆

二叉堆 本系列文章主要介紹常用的演算法和資料結構的知識,記錄的是《Algorithms I/II》課程的內容,採用的是“演算法(第4版)”這本紅寶書作為學習教材的,語言是java。這本書的名

演算法資料結構書籍推薦

資料結構 資料結構與演算法分析_Java語言描述(第2版) 演算法 計算機演算法基礎 演算法導論 程式設計之法_面試和演算法心得 coding 程式設計師程式碼面試指南_IT名企演算法與資料結構題目最優解 LeetCode/LintCode

挑戰程式設計競賽2 演算法資料結構 讀後感

介紹 本篇主要是講《挑戰程式設計競賽2 演算法和資料結構》書的讀後感和部分題目的再次解讀、程式設計。包括書中的部分程式碼和一些個人的見解。如果想深入瞭解,建議去網上買一本回來看,比較適合學習演算法的初學者。 章節 第一章 第一章主要