更新時(shí)間:2020-09-09 15:13:57 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1761次
假設(shè)有一道題目:有一組N個(gè)數(shù)而要確定其中第k個(gè)最大者,我們稱(chēng)之為選擇問(wèn)題,那么這個(gè)程序如何編寫(xiě)?最直觀地,至少有兩種思路:
1、將N個(gè)數(shù)讀入一個(gè)數(shù)組中,再通過(guò)某種簡(jiǎn)單的算法,比如冒泡排序法,以遞減順序?qū)?shù)組排序,則第k個(gè)位置上的元素就是我們需要的元素
2、稍微好一些的做法,將k個(gè)元素讀入數(shù)組并以遞減順序排序,接著將接下來(lái)的元素再逐個(gè)讀入,當(dāng)新元素被讀到時(shí),如果它小于數(shù)組中的第k個(gè)元素則忽略之,否則將其放到數(shù)組中正確的位置上,同時(shí)將數(shù)組中的一個(gè)元素?cái)D出數(shù)組,當(dāng)算法終止時(shí),位于第k個(gè)位置上的元素作為答案返回
這兩種算法都很簡(jiǎn)單,但是假設(shè)我們有一千萬(wàn)個(gè)元素的隨機(jī)文件和k=5000000進(jìn)行模擬將發(fā)現(xiàn),兩個(gè)算法盡管最終都可以給出正確答案,但是在合理時(shí)間內(nèi)均無(wú)法結(jié)束。因此,這兩種算法都不能被認(rèn)為是好的算法,因?yàn)閺膶?shí)際角度出發(fā),它們無(wú)法在合理的時(shí)間內(nèi)處理輸入的數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu)和算法分析的提出
在許多問(wèn)題中,一個(gè)很重要的觀念是:寫(xiě)出一個(gè)工作程序并不夠。如果這個(gè)程序在巨大的數(shù)據(jù)集上運(yùn)行,那么運(yùn)行時(shí)間就變成了重要的問(wèn)題,我們將在接下來(lái)的文章中看到對(duì)于大量的輸入如何估計(jì)程序的運(yùn)行時(shí)間,尤其是如何在未具體編碼的情況下比較兩個(gè)程序運(yùn)行的時(shí)間。我們還將看到徹底改進(jìn)程序速度以及確定程序瓶頸的方法,這些方法將使得我們能夠發(fā)現(xiàn)需要我們集中精力努力優(yōu)化的那些代碼段。
那么,首先,先了解一下什么是數(shù)據(jù)結(jié)構(gòu)和算法分析(特別指出,后文的例子均以Java代碼編寫(xiě))。
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式,是指數(shù)據(jù)相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率(這就是為什么我們要研究數(shù)據(jù)結(jié)構(gòu)的原因),數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)相關(guān)。
常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)有數(shù)組、棧、隊(duì)列、鏈表、樹(shù)、散列等,這些數(shù)據(jù)結(jié)構(gòu)將是本數(shù)據(jù)結(jié)構(gòu)的分類(lèi)中重點(diǎn)研究的對(duì)象。
算法分析
算法是為求解一個(gè)問(wèn)題需要遵循的、被清楚指定的簡(jiǎn)單指令的集合。對(duì)于一個(gè)問(wèn)題,一旦某種算法給定并且(以某種方式)被確定是正確的,那么重要的異步就是確定該算法將需要多少注入時(shí)間或空間等資源量的問(wèn)題。如果:
1、一個(gè)問(wèn)題的求解算法竟然需要長(zhǎng)達(dá)一年時(shí)間,那么這種算法就很難有什么用處
2、一個(gè)問(wèn)題需要若干個(gè)GB的內(nèi)存的算法,在當(dāng)前大多數(shù)機(jī)器上也是無(wú)法使用的
動(dòng)力節(jié)點(diǎn)Java數(shù)據(jù)結(jié)構(gòu)與算法視頻:
數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,數(shù)據(jù)結(jié)構(gòu)也是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式,通常情況下,良好的的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率,往往與性能、優(yōu)化話題相關(guān) 。
目錄
001.數(shù)據(jù)結(jié)構(gòu)&算法:數(shù)據(jù)
002.數(shù)據(jù)結(jié)構(gòu)&算法:數(shù)據(jù)元素
003.數(shù)據(jù)結(jié)構(gòu)&算法:數(shù)據(jù)對(duì)象
004.數(shù)據(jù)結(jié)構(gòu)&算法:概述
005.數(shù)據(jù)結(jié)構(gòu)&算法:線性關(guān)系
006.數(shù)據(jù)結(jié)構(gòu)&算法:樹(shù)形關(guān)系
007.數(shù)據(jù)結(jié)構(gòu)&算法:圖形關(guān)系
008.數(shù)據(jù)結(jié)構(gòu)&算法:數(shù)據(jù)關(guān)系小結(jié)
009.數(shù)據(jù)結(jié)構(gòu)&算法:抽象數(shù)據(jù)類(lèi)型
010.數(shù)據(jù)結(jié)構(gòu)&算法:算法及性能分析-什么是算法
011.數(shù)據(jù)結(jié)構(gòu)&算法:算法及性能分析-算法的基本特征
012.數(shù)據(jù)結(jié)構(gòu)&算法:算法及性能分析-算法的設(shè)計(jì)要求
013.數(shù)據(jù)結(jié)構(gòu)&算法:算法及性能分析-算法的時(shí)間復(fù)雜度
014.數(shù)據(jù)結(jié)構(gòu)&算法:算法及性能分析-算法的時(shí)間復(fù)雜度分析01
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java數(shù)據(jù)結(jié)構(gòu)與算法分析視頻”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)