一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識分享(上)

jf_78858299 ? 來源:阿里開發(fā)者 ? 作者: 復(fù)醉 ? 2023-04-06 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有哪些常見的數(shù)據(jù)結(jié)構(gòu)?基本操作是什么?常見的排序算法是如何實(shí)現(xiàn)的?各有什么優(yōu)缺點(diǎn)?本文簡要分享算法基礎(chǔ)、常見的數(shù)據(jù)結(jié)構(gòu)以及排序算法。

一 前言

1 為什么要學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)?

  • 解決特定問題。
  • 深度優(yōu)化程序性能的基礎(chǔ)。
  • 學(xué)習(xí)一種思想:如何把現(xiàn)實(shí)問題轉(zhuǎn)化為計(jì)算機(jī)語言表示。

2 業(yè)務(wù)開發(fā)要掌握到程度?

  • 了解常見數(shù)據(jù)結(jié)構(gòu)和算法,溝通沒有障礙。
  • 活學(xué)活用:遇到問題時(shí)知道要用什么數(shù)據(jù)結(jié)構(gòu)和算法去優(yōu)化。

二 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)

1 什么是數(shù)據(jù)結(jié)構(gòu)?

數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織、管理和存儲格式,其使用目的是為了高效的訪問和修改數(shù)據(jù)。

數(shù)據(jù)結(jié)構(gòu)是算法的基石。如果把算法比喻成美麗靈動(dòng)的舞者,那么數(shù)據(jù)結(jié)構(gòu)就是舞者腳下廣闊而堅(jiān)實(shí)的舞臺。

2 物理結(jié)構(gòu)和邏輯結(jié)構(gòu)的區(qū)別?

物理結(jié)構(gòu)就像人的血肉和骨骼,看得見,摸得著,實(shí)實(shí)在在,如數(shù)組、鏈表。

邏輯結(jié)構(gòu)就像人的思想和精神,它們看不見、摸不著,如隊(duì)列、棧、樹、圖。

3 線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)的區(qū)別?

  • 線性:元素之間的關(guān)系是一對一的,如棧、隊(duì)列。
  • 非線性:每個(gè)元素可能連接0或多個(gè)元素,如樹、圖。

三 算法基礎(chǔ)

1 什么是算法?

  • 數(shù)學(xué):算法是用于解決某一類問題的公式和思想。
  • 計(jì)算機(jī):一系列程序指令,用于解決特定的運(yùn)算和邏輯問題。

2 如何衡量算法好壞?

  • 時(shí)間復(fù)雜度:運(yùn)行時(shí)間長短。
  • 空間復(fù)雜度:占用內(nèi)存大小。

3 怎么計(jì)算時(shí)間復(fù)雜度?

大O表示法(漸進(jìn)時(shí)間復(fù)雜度):把程序的相對執(zhí)行時(shí)間函數(shù)T(n)簡化為一個(gè)數(shù)量級,這個(gè)數(shù)量級可以是n、n^2、logN等。

推導(dǎo)時(shí)間復(fù)雜度的幾個(gè)原則:

  • 如果運(yùn)行時(shí)間是常數(shù)量級,則用常數(shù)1表示。
  • 只保留時(shí)間函數(shù)中的最高階項(xiàng)。
  • 如果最高階項(xiàng)存在,則省去最高項(xiàng)前面的系數(shù)。

時(shí)間復(fù)雜度對比:O(1) > O(logn) > O(n) > O(nlogn) > O(n^2)。

不同時(shí)間復(fù)雜度算法運(yùn)行次數(shù)對比:

圖片

4 怎么計(jì)算空間復(fù)雜度?

常量空間 O(1):存儲空間大小固定,和輸入規(guī)模沒有直接的關(guān)系。

線性空間 O(n):分配的空間是一個(gè)線性的集合,并且集合大小和輸入規(guī)模n成正比。

二維空間 O(n^2):分配的空間是一個(gè)二維數(shù)組集合,并且集合的長度和寬度都與輸入規(guī)模n成正比。

遞歸空間 O(logn):遞歸是一個(gè)比較特殊的場景。雖然遞歸代碼中并沒有顯式的聲明變量或集合,但是計(jì)算機(jī)在執(zhí)行程序時(shí),會(huì)專門分配一塊內(nèi)存空間,用來存儲“方法調(diào)用棧”。執(zhí)行遞歸操作所需要的內(nèi)存空間和遞歸的深度成正比。

5 如何定義算法穩(wěn)定性?

穩(wěn)定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

不穩(wěn)定:如果a原本在b的前面,而a=b,排序之后 a 可能會(huì)出現(xiàn)在 b 的后面。

6 有哪些常見算法?

首先要明確:特定算法解決特定問題。

  • 字符串:暴力匹配、BM、KMP、Trie等。
  • 查找:二分查找、遍歷查找等。
  • 排序:冒泡排序、快排、計(jì)數(shù)排序、堆排序等。
  • 搜索:TFIDF、PageRank等。
  • 聚類分析:期望最大化、k-meanings、k-數(shù)位等。
  • 深度學(xué)習(xí):深度信念網(wǎng)絡(luò)、深度卷積神經(jīng)網(wǎng)絡(luò)、生成式對抗等。
  • 異常檢測:k最近鄰、局部異常因子等。
  • ......

其中,字符串、查找、排序算法是最基礎(chǔ)的算法。

四 常見數(shù)據(jù)結(jié)構(gòu)

1 數(shù)組

1)什么是數(shù)組?

數(shù)據(jù)是有限個(gè)相同類型的變量所組成的有序集合。數(shù)組中的每一個(gè)變量被稱為元素。

圖片

2)數(shù)組的基本操作?

讀取O(1)、更新O(1)、插入O(n)、刪除O(n)、擴(kuò)容O(n)。

2 鏈表

1)什么是鏈表?

鏈表是一種在物理上非連續(xù)、非順序的數(shù)據(jù)結(jié)構(gòu),由若干個(gè)節(jié)點(diǎn)組成。

單向鏈表的每一個(gè)節(jié)點(diǎn)又包含兩部分,一部分是存放數(shù)據(jù)的變量data,另一部分是指向下一個(gè)節(jié)點(diǎn)的指針next。

圖片

2)鏈表的基本操作?

讀取O(n)、更新O(1)、插入O(1)、刪除O(1)。

3)鏈表 VS 數(shù)組

數(shù)組:適合多讀、插入刪除少的場景。

鏈表:適用于插入刪除多、讀少的場景。

圖片

3 棧

1)什么是棧?

棧是一種線性邏輯數(shù)據(jù)結(jié)構(gòu),棧的元素只能后進(jìn)先出。最早進(jìn)入的元素存放的位置叫做棧底,最后進(jìn)入的元素存放的位置叫棧頂。

一個(gè)比喻,棧是一個(gè)一端封閉一端的開放的中空管子,隊(duì)列是兩端開放的中空管子。

圖片

2)如何實(shí)現(xiàn)棧?

數(shù)組實(shí)現(xiàn):

圖片

鏈表實(shí)現(xiàn):

圖片

3)棧的基本操作

入棧O(1)、出棧O(1)。

4)棧的應(yīng)用?

  • 回溯歷史,比如方法調(diào)用棧。
  • 頁面面包屑導(dǎo)航。

4 隊(duì)列

1)什么是隊(duì)列?

一種線性邏輯數(shù)據(jù)結(jié)構(gòu),隊(duì)列的元素只能后進(jìn)后出。隊(duì)列的出口端叫做隊(duì)頭,隊(duì)列的入口端叫做隊(duì)尾。

圖片

2)如何實(shí)現(xiàn)隊(duì)列?

數(shù)組實(shí)現(xiàn):

圖片

鏈表實(shí)現(xiàn):

圖片

3)隊(duì)列的基本操作?

入隊(duì) O(1)、出隊(duì) O(1)。

4)隊(duì)列的應(yīng)用

  • 消息隊(duì)列
  • 多線程的等待隊(duì)列
  • 網(wǎng)絡(luò)爬蟲的待爬URL隊(duì)列

5 哈希表

1)什么是哈希表?

一種邏輯數(shù)據(jù)結(jié)構(gòu),提供了鍵(key)和值(value)的映射關(guān)系。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)結(jié)構(gòu)算法分析(Java版)(pdf)

    數(shù)據(jù)結(jié)構(gòu)算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java數(shù)據(jù)結(jié)構(gòu)算法中文第
    發(fā)表于 12-20 21:22

    數(shù)據(jù)結(jié)構(gòu)算法分析

    數(shù)據(jù)結(jié)構(gòu)算法分析
    發(fā)表于 06-05 10:46

    請問學(xué)習(xí)stm32以及ucos ii ucgui需要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法之類的知識嗎?

    學(xué)習(xí)stm32以及ucos ii ucgui是否需要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法之類的知識。
    發(fā)表于 06-09 23:22

    數(shù)據(jù)結(jié)構(gòu)的幾個(gè)重要知識點(diǎn)

    ,也就掌握好了數(shù)據(jù)處理的算法,良好的數(shù)據(jù)結(jié)構(gòu)對于軟件系統(tǒng)的執(zhí)行效率、數(shù)據(jù)存儲效率都非常重要。棧的模型以上簡單了解了什么是數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 02-27 15:01

    數(shù)據(jù)結(jié)構(gòu)預(yù)算法核心知識點(diǎn)總結(jié)概述

    數(shù)據(jù)結(jié)構(gòu)預(yù)算法核心知識點(diǎn)總結(jié)概述最近有看一些大佬的專欄,受益匪淺。深刻的覺察到我們要想成為一個(gè)偉大的程序員,或者說小一點(diǎn),成為一個(gè)厲害的程序員,基礎(chǔ)知識是核心競爭力也是我們不斷向上提升
    發(fā)表于 12-21 08:00

    數(shù)據(jù)結(jié)構(gòu)算法習(xí)題

    數(shù)據(jù)結(jié)構(gòu)算法習(xí)題,ACM專用,刷題初期按照這個(gè)地方刷很好
    發(fā)表于 03-03 18:25 ?0次下載

    數(shù)據(jù)結(jié)構(gòu)算法

    全國C語言考試公共基礎(chǔ)知識點(diǎn)——數(shù)據(jù)結(jié)構(gòu)算法,該資料包含了有關(guān)數(shù)據(jù)結(jié)構(gòu)算法的全部知識點(diǎn)。
    發(fā)表于 03-30 14:27 ?0次下載

    數(shù)據(jù)結(jié)構(gòu)算法分析

    一部淺顯易懂的介紹數(shù)據(jù)結(jié)構(gòu)算法的書籍。
    發(fā)表于 07-14 17:12 ?0次下載

    算法數(shù)據(jù)結(jié)構(gòu)——接口

    第三章為算法數(shù)據(jù)結(jié)構(gòu),本文為3.2.3 接口。
    的頭像 發(fā)表于 09-19 17:41 ?8915次閱讀
    <b class='flag-5'>算法</b>與<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>——接口

    大牛分享平時(shí)如何學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法

    數(shù)據(jù)結(jié)構(gòu)算法的地位對于一個(gè)程序員來說不言而喻。今天這篇文章不是來勸你們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法的,也不是來和你們說數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 11-02 11:25 ?3242次閱讀

    數(shù)據(jù)結(jié)構(gòu)算法知識點(diǎn)有哪些?

    數(shù)據(jù)結(jié)構(gòu)算法知識點(diǎn)有哪些?
    的頭像 發(fā)表于 01-10 15:22 ?8519次閱讀

    數(shù)據(jù)結(jié)構(gòu)算法分析中的二叉樹與堆有關(guān)知識匯總

    該資料包括數(shù)據(jù)結(jié)構(gòu)算法分析中的二叉樹與堆有關(guān)的一些知識
    發(fā)表于 11-03 09:37 ?0次下載

    程序設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)(嵌入式)

    編程的基礎(chǔ)-算法和數(shù)據(jù)結(jié)構(gòu)入門資料免費(fèi)下載。
    發(fā)表于 04-18 09:35 ?1次下載

    算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識分享(中)

    有哪些常見的數(shù)據(jù)結(jié)構(gòu)?基本操作是什么?常見的排序算法是如何實(shí)現(xiàn)的?各有什么優(yōu)缺點(diǎn)?本文簡要分享算法基礎(chǔ)、常見的數(shù)據(jù)結(jié)構(gòu)以及排序算法。
    的頭像 發(fā)表于 04-06 16:48 ?825次閱讀
    <b class='flag-5'>算法</b><b class='flag-5'>和數(shù)據(jù)結(jié)構(gòu)</b><b class='flag-5'>基礎(chǔ)知識</b>分享(中)

    算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識分享(下)

    有哪些常見的數(shù)據(jù)結(jié)構(gòu)?基本操作是什么?常見的排序算法是如何實(shí)現(xiàn)的?各有什么優(yōu)缺點(diǎn)?本文簡要分享算法基礎(chǔ)、常見的數(shù)據(jù)結(jié)構(gòu)以及排序算法。
    的頭像 發(fā)表于 04-06 16:48 ?959次閱讀
    <b class='flag-5'>算法</b><b class='flag-5'>和數(shù)據(jù)結(jié)構(gòu)</b><b class='flag-5'>基礎(chǔ)知識</b>分享(下)