国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法的特性和空間復(fù)雜度---數(shù)據(jù)結(jié)構(gòu)

這篇具有很好參考價(jià)值的文章主要介紹了算法的特性和空間復(fù)雜度---數(shù)據(jù)結(jié)構(gòu)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?

目錄

前言:

1.算法

1.1算法的特性

1.2設(shè)計(jì)算法

2.空間復(fù)雜度

3.學(xué)習(xí)復(fù)雜度的意義


?博主CSDN:啊蘇要學(xué)習(xí)

? ? ?專欄分類:數(shù)據(jù)結(jié)構(gòu)?

? 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是一件有趣的事情,希望讀者能在我的博文切實(shí)感受到數(shù)據(jù)之間存在的關(guān)系,在對數(shù)據(jù)元素進(jìn)行操作的時(shí)候,能心中有數(shù),腦中有畫!?


?

前言:

? 在前面我們已經(jīng)講過時(shí)間復(fù)雜度了,空間復(fù)雜度也幾乎是八九不離十,我們這節(jié)主要來講講一個(gè)好的算法需要滿足什么樣的特點(diǎn)。

1.算法

? 算法實(shí)際上就是一組一組的操作,在計(jì)算機(jī)上表現(xiàn)為一組指令,讓計(jì)算機(jī)按照我們想要的邏輯進(jìn)行運(yùn)算,并能有效的解決實(shí)際問題

1.1算法的特性

? 算法具有五個(gè)特性,輸入和輸出、有限性和可行性以及確定性。

  • ? 輸入和輸出是提供數(shù)據(jù)和返回結(jié)果的代名詞,一個(gè)算法可以沒有輸入,也可以有多個(gè)輸入,取決于具體需求。但輸出是必須有的,如果一個(gè)算法沒有將其計(jì)算的結(jié)果返給我們使用,那還要這個(gè)算法干嘛呢?
  • 有限性指的是實(shí)現(xiàn)解決問題算法的指令是有限的,執(zhí)行完后自動會結(jié)束程序,并且條指令,每個(gè)步驟所用的時(shí)長都在可以接收的時(shí)間內(nèi)
有限性指兩方面
指令的數(shù)量是有限的 指令執(zhí)行時(shí)間可接受
  • 可行性是指在實(shí)現(xiàn)算法的整個(gè)過程中,每一個(gè)步驟的是合理、可以實(shí)現(xiàn)的、也就是不會出錯(cuò),可以得到正確的結(jié)果。
  • 確定性,算法的每一個(gè)步驟只能有一種結(jié)果,不管在什么樣的環(huán)境下、在什么編譯器上,運(yùn)行算出來的結(jié)果是唯一的。

1.2設(shè)計(jì)算法

? 1.設(shè)計(jì)算法,需要我們能夠正確的表達(dá)邏輯,以解決實(shí)際問題,這個(gè)要求我們對算法的設(shè)計(jì)要有正確性

? 算法的正確性指算法具有完整的結(jié)構(gòu),包括輸入、輸出、和加工處理數(shù)據(jù)的過程中是唯一性的,最終能夠得到正確的答案。

? 算法正確的四大層次:

  1. 算法程序沒有語法上的錯(cuò)誤(沒有語法錯(cuò)誤時(shí)最基礎(chǔ)的)
  2. 算法對于合理數(shù)據(jù)的輸入能夠得出正確的結(jié)果
  3. 算法能對不恰當(dāng)?shù)臄?shù)據(jù)輸入返回令人滿意的信息反饋(而不是輸入不合理的數(shù)據(jù)后就跑出一些隨意的值)
  4. 算法對精心挑選的具有鉆牛角尖性質(zhì)的數(shù)據(jù)仍能處理得出滿足要求的輸入結(jié)果。

? 對于這四種境界,層次1是最低端的,層次4在一般情況下是很難達(dá)到的,我們退而求其次,第3層是能滿足大部分要求并且被我們當(dāng)成是算法是否正確的標(biāo)準(zhǔn)。

? 算法的可讀性算法設(shè)計(jì),不是為了讓人讀不懂,而是為了具有可讀性,便于交流,以及后期的維護(hù)。

? 一個(gè)算法,如果只能給敲這段代碼的人和計(jì)算機(jī)理解,那么從技術(shù)角度上來看,可能這個(gè)人是大神,別人看不懂,要不就是敲的令人看不懂。一般沒注釋的代碼,都需要花費(fèi)別人很多時(shí)間去理解。我們不追求花里胡哨,簡單易懂,質(zhì)量高的代碼才是我們追求的!

? 算法的健壯性當(dāng)輸入的數(shù)據(jù)不合理的時(shí)候,會有特殊的情況處理,要么是給程序員提示出錯(cuò),要么拋出異常報(bào)錯(cuò)而不是編寫的代碼隱晦性的存在錯(cuò)誤,但不是致命的,單獨(dú)跑沒問題,當(dāng)在工程里將代碼合在一起的時(shí)候,跑起來程序就掛了,這時(shí)要找錯(cuò)誤那簡直是程序員噩夢。

? 算法的時(shí)間效率高、存儲量低算法的時(shí)間復(fù)雜度要盡可能的小,時(shí)間效率要追求高。存儲量低,不希望算法在執(zhí)行的時(shí)候?qū)?nèi)存空間的開銷太多。

? 算法的特性和算法的設(shè)計(jì)怎么記?我們這樣記:算法設(shè)計(jì)里有個(gè)正確性,這個(gè)正確性要求算法是一個(gè)完整的算法。那么就要有輸入輸出,結(jié)果要想正確,計(jì)算過程肯定是唯一的,我們怎么得出結(jié)果是正確的呢?那是因?yàn)樗惴ň哂杏邢扌?計(jì)算機(jī)在短時(shí)間內(nèi)跑的出結(jié)果讓我們看到是正確的)和可行性(在計(jì)算機(jī)中可以實(shí)現(xiàn))

? 博主相信讀者多看幾遍,算法的特性就記下來了~,而算法設(shè)計(jì)的要求其實(shí)比較容易理解滴。

2.空間復(fù)雜度

? 前面我們講過算法的時(shí)間復(fù)雜度,這里我們補(bǔ)充一下算法的空間復(fù)雜度。

? 鏈接:時(shí)間復(fù)雜度

? 在以前,計(jì)算機(jī)的內(nèi)存是很小的,內(nèi)存很珍貴,當(dāng)時(shí)考慮的更多是空間復(fù)雜度,現(xiàn)在存儲空間是足夠了的,我們追求的是時(shí)間上的效率, 當(dāng)然空間開銷小也是需要的,畢竟在大數(shù)據(jù)時(shí)代,即使內(nèi)存變多了,也不是讓我們來浪費(fèi)的理由。

? 空間復(fù)雜度:并不是算占用的字節(jié)數(shù),而是算創(chuàng)建變量的個(gè)數(shù)。

void BubbleSort(int* a, int n)//冒泡排序
{
    assert(a);
    for(size_t end = n; end > 0; end--)
    {
        int exchange = 0;
    
        for(size_t i = 1; i < end; i++)
        {
            if(a[i-1]>a[i])
            {
                Swap(&a[i-1], &a[i]);
                exchange = 1;
            }
        }
    }
    if(exchange == 0)
        break;
}

? 這里我們看看創(chuàng)建了多少個(gè)變量,形參部分有整型指針a、整型變量n,還有size_t類型end變量、size_t類型i變量、整型變量exchange變量總共五個(gè)。是常數(shù),所以空間復(fù)雜度是O(1)

? 空間復(fù)雜度和時(shí)間復(fù)雜度的都是同樣用大O漸進(jìn)表示法。

? exchange在進(jìn)入循環(huán)時(shí)創(chuàng)建,出了循環(huán)時(shí)被銷毀。在這個(gè)重復(fù)的過程中,是不是應(yīng)該像計(jì)算時(shí)間復(fù)雜度那樣按次數(shù)來算空間中變量的創(chuàng)建次數(shù)嗎?不是的,次數(shù)在時(shí)間上有累計(jì),在空間上不累計(jì)。

? 空間復(fù)雜度是在創(chuàng)建最多額外變量時(shí)候,變量的個(gè)數(shù)才是空間復(fù)雜度的數(shù),也就是要在變量最多的時(shí)候,計(jì)算這個(gè)時(shí)候占的空間多少。

long long* Fib(size_t n)
{
    if(n == 0)
        return NULL;
    long long* fibarray = (long long*)malloc((n+1) * sizeof(long long));
    fibarray[0] = 0;
    fibarray[1] = 1;
    for(int i = 2; i <= n; i++)
    {
        fibarray[i] = fibarray[i-1] + fibarray[i-2];
    }
    return fibarray;
}

? 計(jì)算斐波那契數(shù)列的空間復(fù)雜度:size_t n 是一個(gè)變量,malloc開辟了n+1個(gè)元素的數(shù)組大小,? ? int i也是一個(gè)變量,這里面總共的變量數(shù)是N+3。大O表示法,對空間復(fù)雜度貢獻(xiàn)值最大的是N,所以空間復(fù)雜度是O(N)

? 一般情況下,我們都是開辟常數(shù)個(gè)變量或是開辟N個(gè)元素的數(shù)組,對應(yīng)的空間復(fù)雜度是O(1)和O(N)。

? 用遞歸求階乘的空間復(fù)雜度:

算法的特性和空間復(fù)雜度---數(shù)據(jù)結(jié)構(gòu)

? 在算階乘的時(shí)候,我們求N的階乘,就需要調(diào)用N次函數(shù),每次函數(shù)都會創(chuàng)建常量個(gè)變量,最終空間復(fù)雜度為O(N)。

? 注意:所有的空間在程序結(jié)束后歸還操作系統(tǒng);在往下遞歸的時(shí)候,前面的函數(shù)還沒結(jié)束,信息仍保留著,只有在回歸,回溯的時(shí)候才一個(gè)一個(gè)銷毀。

3.學(xué)習(xí)復(fù)雜度的意義

? 不管是時(shí)間復(fù)雜度也好,空間復(fù)雜度也罷。我們?yōu)槭裁匆獙W(xué)這些東西,我只要能寫出代碼,能跑起出正確結(jié)果就OK了,學(xué)這個(gè)干嘛?如果你在問這個(gè),只能說你對還沒在玩"計(jì)算機(jī)"。

  • 首先,我們在刷題的時(shí)候,經(jīng)常會有時(shí)間復(fù)雜度的限制、空間復(fù)雜度的限制。學(xué)完后我們就懂題目應(yīng)該怎么做
  • 其次,學(xué)完這些復(fù)雜度能夠促進(jìn)我們思考更好的算法,解決現(xiàn)有的效率低,占用存儲量大的算法,在這探索的過程中開拓新思維,相當(dāng)于在玩的感覺。

? OK,學(xué)到這里,我們對數(shù)據(jù)結(jié)構(gòu)里的基礎(chǔ)知識都掌握了,接下來的數(shù)據(jù)結(jié)構(gòu)知識主要是寫代碼題了,跟博主一起學(xué)吧!


結(jié)語:希望讀者讀完能有所收獲!對數(shù)據(jù)結(jié)構(gòu)有進(jìn)一步的認(rèn)識!?

? 讀者對本文不理解的地方,或是發(fā)現(xiàn)文章內(nèi)容上有誤等,請?jiān)谙路皆u論留言告訴博主喲~,也可以對博主提出一些文章改進(jìn)的建議,感激不盡!最后的最后!

? ?求點(diǎn)贊,求關(guān)注,你的點(diǎn)贊是我更新的動力,一起進(jìn)步吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-463144.html

到了這里,關(guān)于算法的特性和空間復(fù)雜度---數(shù)據(jù)結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法就是定義良好的計(jì)算過程,他取一個(gè)或一組的值為輸入,并產(chǎn)生一個(gè)或一組值作為輸出。簡單來說算法就是一系列的計(jì)算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)化成輸出結(jié)果。 算法在

    2024年02月07日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    目錄 ? 一、前言 二、時(shí)間復(fù)雜度 2.1時(shí)間復(fù)雜度表示形式 2.1.1規(guī)則: 3.1如何計(jì)算時(shí)間復(fù)雜度 3.1.1線性階 3.1.2平方階 3.1.3對數(shù)階 常見的時(shí)間復(fù)雜度排序: 三、空間復(fù)雜度 3.1Java的基本類型內(nèi)存占用 數(shù)據(jù)結(jié)構(gòu)和算法是程序的靈魂,這是某位程序員大佬所言,學(xué)習(xí)了這門,我們便可

    2023年04月09日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    ??博客主頁:愛敲代碼的小楊. ?專欄:《Java SE語法》 ??感謝大家點(diǎn)贊????收藏?評論???,您的三連就是我持續(xù)更新的動力?? ??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步! 算法效率分為兩種:第一種是時(shí)間效率;第二種是空間效率。時(shí)間效率又稱為時(shí)間

    2024年01月20日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    ?? 目錄 一、數(shù)據(jù)結(jié)構(gòu)和算法 1.什么是數(shù)據(jù)結(jié)構(gòu)?? 2.什么是算法? 3.數(shù)據(jù)結(jié)構(gòu)和算法的重要性 二、算法的時(shí)間復(fù)雜度和空間復(fù)雜度 1.算法效率 2.算法的復(fù)雜度 3.復(fù)雜度在校招中的考察 4.時(shí)間復(fù)雜度 5.空間復(fù)雜度? 6.常見復(fù)雜度對比 7.復(fù)雜度的OJ練習(xí) ? ??內(nèi)容專欄:《數(shù)據(jù)結(jié)

    2023年04月24日
    瀏覽(44)
  • 數(shù)據(jù)結(jié)構(gòu) | 算法的時(shí)間復(fù)雜度和空間復(fù)雜度【詳解】

    數(shù)據(jù)結(jié)構(gòu) | 算法的時(shí)間復(fù)雜度和空間復(fù)雜度【詳解】

    數(shù)據(jù)結(jié)構(gòu)(Data Structure)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法(Algorithm):就是定義良好的計(jì)算過程,他取一個(gè)或一組的值為輸入,并產(chǎn)生出一個(gè)或一組值作為輸出。簡單來說算法就是一系列的計(jì)算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)

    2024年02月08日
    瀏覽(30)
  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度。 時(shí)間復(fù)雜度主要衡量一個(gè)算法的運(yùn)行快慢,而空間復(fù)雜度主要衡量一個(gè)算法運(yùn)行所需要的額外空間。 算法的時(shí)間復(fù)雜度 算法中的基本操作的執(zhí)行次數(shù),為算法的時(shí)間復(fù)雜度。 算法的

    2024年04月11日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)初階】算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    1.1 如何衡量一個(gè)算法的好壞 如何衡量一個(gè)算法的好壞呢? 比如對于以下斐波那契數(shù)列: 斐波那契數(shù)列的遞歸實(shí)現(xiàn)方式非常簡潔,但簡潔一定好嗎?那該如何衡量其好與壞呢? 1.2 算法的復(fù)雜度 算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此

    2024年02月08日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法篇】之時(shí)間復(fù)雜度與空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法篇】之時(shí)間復(fù)雜度與空間復(fù)雜度

    ??博客主頁: 小鎮(zhèn)敲碼人 ?? 歡迎關(guān)注:??點(diǎn)贊 ????留言 ??收藏 ??友友們暑假快樂,好久不見呀?。?!?????? ?? 有人曾經(jīng)問過我這樣一個(gè)問題,“人終其一身,執(zhí)著追求的東西究竟是什么?”我是這樣回答的,”我們終其一生都在尋找著那個(gè)和我們靈魂極其契合

    2024年02月12日
    瀏覽(27)
  • 從頭開始:數(shù)據(jù)結(jié)構(gòu)和算法入門(時(shí)間復(fù)雜度、空間復(fù)雜度)

    從頭開始:數(shù)據(jù)結(jié)構(gòu)和算法入門(時(shí)間復(fù)雜度、空間復(fù)雜度)

    ? ? 目錄 文章目錄 前言 1.算法效率 1.1 如何衡量一個(gè)算法的好壞 1.2 算法的復(fù)雜度 2.時(shí)間復(fù)雜度? 2.1 時(shí)間復(fù)雜度的概念 2.2 大O的漸進(jìn)表示法 2.3常見時(shí)間復(fù)雜度計(jì)算 3.空間復(fù)雜度 4.常見復(fù)雜度對比 總結(jié) 前言 ????????C語言的學(xué)習(xí)篇已經(jīng)結(jié)束,今天開啟新的篇章——數(shù)據(jù)結(jié)構(gòu)

    2024年02月14日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之路--算法的時(shí)間復(fù)雜度與空間復(fù)雜度(精講)

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之路--算法的時(shí)間復(fù)雜度與空間復(fù)雜度(精講)

    ? ? ?嗨嗨大家!本期帶來的內(nèi)容是:算法的時(shí)間復(fù)雜度與空間復(fù)雜度。 目錄 前言 一、算法效率 算法效率的衡量標(biāo)準(zhǔn) 二、時(shí)間復(fù)雜度 1 時(shí)間復(fù)雜度的定義 2 求解時(shí)間復(fù)雜度的步驟 2.1 找出算法中的基本語句:? 2.2計(jì)算基本語句執(zhí)行次數(shù)的數(shù)量級: 2.3大O階的漸進(jìn)表示法:

    2024年04月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包