有问有答 | 算法和数据结构精华问答
戳藍(lán)字“CSDN云計(jì)算”關(guān)注我們哦!
所有的算法,乃至數(shù)學(xué)在實(shí)際運(yùn)用中都是要根據(jù)不同的數(shù)據(jù)來選擇不同的方法,所以一般學(xué)習(xí)過算法和數(shù)據(jù)結(jié)構(gòu)的人都會(huì)越發(fā)的認(rèn)識(shí)到,數(shù)據(jù)才是程序的中心,只有找到了一個(gè)組織數(shù)據(jù)的最佳方式,算法的運(yùn)用才會(huì)事半功倍。
1
Q:很多時(shí)候的研究內(nèi)容是算法改進(jìn),請(qǐng)問算法改進(jìn)常見的切入點(diǎn)是什么呢?怎么著手進(jìn)行算法改進(jìn)呢?如何判斷算法改進(jìn)是否成功?
A:算法改進(jìn)最重要的是要找到原算法的瓶頸所在,然后做針對(duì)性的改進(jìn)。計(jì)算機(jī)科學(xué)家安德魯艾派爾改進(jìn)優(yōu)化程序性能的例子屬于是程序性能調(diào)優(yōu)上的經(jīng)典案例,可以發(fā)現(xiàn)其中數(shù)據(jù)結(jié)構(gòu)和算法的調(diào)整起到了至關(guān)重要的作用。改進(jìn)(算法采用的)數(shù)據(jù)結(jié)構(gòu)本身也是改進(jìn)算法的一種形式。最終,可以用新算法同原算法做對(duì)比試驗(yàn)來證明新方法更厲害。安德魯?shù)脑囼?yàn)中,他把原來需要計(jì)算1年的程序改到了只用1天!1年VS1天,效果是顯而易見的。
Q:假設(shè)遇到一個(gè)現(xiàn)實(shí)問題,怎樣選擇合適的數(shù)據(jù)結(jié)構(gòu)和算法?是不是現(xiàn)實(shí)世界的所有問題的解決方法都已經(jīng)存在相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法了?
A:因?yàn)樗惴ê蛿?shù)據(jù)結(jié)構(gòu)是相輔相成的關(guān)系,二者無法相互脫離而單獨(dú)存在。所以所謂面對(duì)一個(gè)現(xiàn)實(shí)問題如何選擇數(shù)據(jù)結(jié)構(gòu),就可以變成,面對(duì)一個(gè)現(xiàn)實(shí)問題如何設(shè)計(jì)一個(gè)算法。當(dāng)針對(duì)問題解決而設(shè)計(jì)出算法之后,數(shù)據(jù)結(jié)構(gòu)就自然而然的蘊(yùn)含在算法之中了(因?yàn)橄鄳?yīng)的結(jié)構(gòu)將是你算法所必須的)。此外,現(xiàn)實(shí)世界的所有問題的解決方法都已經(jīng)存在相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法了,答案是否定的。仍然還是有很多問題,可能也有相應(yīng)的結(jié)構(gòu)來支持算法,但是人們?nèi)匀辉趯で蟾咝У慕Y(jié)構(gòu),而且這個(gè)過程從未停止。一個(gè)典型的例子就是多維數(shù)據(jù)訪問(Multi-dimensional?data?access)問題中的高級(jí)數(shù)據(jù)結(jié)構(gòu)問題。
Q:算法與數(shù)據(jù)結(jié)構(gòu)有什么關(guān)系?
A:計(jì)算機(jī)是一門研究用計(jì)算機(jī)進(jìn)行信息表示和處理的科學(xué)。這里面涉及到兩個(gè)問題:信息的表示,信息的處理。而信息的表示和組織又直接關(guān)系到處理信息的程序的效率。隨著計(jì)算機(jī)的普及,信息量的增加,信息范圍的拓寬,使許多系統(tǒng)程序和應(yīng)用程序的規(guī)模很大,結(jié)構(gòu)又相當(dāng)復(fù)雜。因此,為了編寫出一個(gè)“好”的程序,必須分析待處理的對(duì)象的特征及各對(duì)象之間存在的關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)這門課所要研究的問題。眾所周知,計(jì)算機(jī)的程序是對(duì)信息進(jìn)行加工處理。在大多數(shù)情況下,這些信息并不是沒有組織,信息(數(shù)據(jù))之間往往具有重要的結(jié)構(gòu)關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。數(shù)據(jù)的結(jié)構(gòu),直接影響算法的選擇和效率。計(jì)算機(jī)解決一個(gè)具體問題時(shí),大致需要經(jīng)過下列幾個(gè)步驟:首先要從具體問題中抽象出一個(gè)適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法(Algorithm),最后編出程序、進(jìn)行測試、調(diào)整直至得到最終解答。尋求數(shù)學(xué)模型的實(shí)質(zhì)是分析問題,從中提取操作的對(duì)象,并找出這些操作對(duì)象之間含有的關(guān)系,然后用數(shù)學(xué)的語言加以描述。計(jì)算機(jī)算法與數(shù)據(jù)的結(jié)構(gòu)密切相關(guān),算法無不依附于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。運(yùn)算是由計(jì)算機(jī)來完成,這就要設(shè)計(jì)相應(yīng)的插入、刪除和修改的算法?。也就是說,數(shù)據(jù)結(jié)構(gòu)還需要給出每種結(jié)構(gòu)類型所定義的各種運(yùn)算的算法。
Q:為什么要有數(shù)據(jù)結(jié)構(gòu)?
A:因?yàn)橐獙F(xiàn)實(shí)世界或者抽象理論中的各種數(shù)據(jù)保存在計(jì)算機(jī)外存(光盤、硬盤、U盤……)或內(nèi)存(ROM、RAM、SRAM……)里面的二進(jìn)制字節(jié)數(shù)組中。然后讓CPU這個(gè)只會(huì)執(zhí)行預(yù)先保存好的加減乘除移位條件轉(zhuǎn)移等機(jī)器指令的家伙按照人的意志去處理這些數(shù)據(jù)。至于具體如何處理就是所謂算法。
Q:如何學(xué)好算法和數(shù)據(jù)結(jié)構(gòu)?
A:想象一下你有一條非常非常長的紙條。這張紙條只能寫一行字。現(xiàn)在要你把一些描述現(xiàn)實(shí)世界的東西寫在這張紙條上。然后把這張紙條給別人。別人通過這張紙條重構(gòu)你所描述的世界,或者在里面查找、推演出自己所需要的信息。
1.這張紙條就是信息的載體,包括硬盤、內(nèi)存、磁盤、甚至磁帶...說白了他們都是一張轉(zhuǎn)著圈或者拐著彎的紙條。
2.給別人的過程就是讀寫硬盤過程、網(wǎng)絡(luò)傳輸過程等等......
3.數(shù)據(jù)結(jié)構(gòu)所解決的問題就是,怎么用一行字啰里八嗦的把這些東西描述出來,別人怎么讀懂這些啰里吧嗦的東西
4.編程,就是怎么解決3,怎么解決3之后解決重構(gòu)出來的世界的一些具體問題...
簡單的說,只要把你的世界觀從三維轉(zhuǎn)到一維,你就能學(xué)懂?dāng)?shù)據(jù)結(jié)構(gòu)了,結(jié)構(gòu)是人為的規(guī)則,書里講的數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)組織最基本的規(guī)則。還有各種各樣的數(shù)據(jù)標(biāo)準(zhǔn),文件格式,只不過是更高級(jí)別的數(shù)據(jù)組織規(guī)則。
---------------- ?完? --------------
1.微信群:
添加小編微信:color_ld,備注“進(jìn)群+姓名+公司職位”即可,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號(hào):color_ld。請(qǐng)備注投稿+姓名+公司職位。
推薦閱讀
云計(jì)算到底是怎么玩的?
企業(yè)云存儲(chǔ)建設(shè)之路
AI in 美團(tuán):吃喝玩樂背后的黑科技
開除“野狗”式程序員,團(tuán)隊(duì)的效率提高了
Windows 成“棄子”,Linux 終上位?
可替代Android的6大開源移動(dòng)操作系統(tǒng)
程序員求助:被領(lǐng)導(dǎo)強(qiáng)行要求寫B(tài)ug該怎么辦?網(wǎng)友的回答讓我笑翻
點(diǎn)擊“閱讀原文”,打開 CSDN App 閱讀更貼心!
總結(jié)
以上是生活随笔為你收集整理的有问有答 | 算法和数据结构精华问答的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sdfj是什么公司
- 下一篇: 期货交易时间怎么规定