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