-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專(zhuān)題列表 > 正文
深度哈希算法(深度哈希圖像檢索)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于深度哈希算法的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話(huà)答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶(hù)端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶(hù)遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話(huà)175-8598-2043,或添加微信:1454722008
本文目錄:
一、【深度知識(shí)】區(qū)塊鏈之加密原理圖示(加密,簽名)
先放一張以太坊的架構(gòu)圖:
在學(xué)習(xí)的過(guò)程中主要是采用單個(gè)模塊了學(xué)習(xí)了解的,包括P2P,密碼學(xué),網(wǎng)絡(luò),協(xié)議等。直接開(kāi)始總結(jié):
秘鑰分配問(wèn)題也就是秘鑰的傳輸問(wèn)題,如果對(duì)稱(chēng)秘鑰,那么只能在線下進(jìn)行秘鑰的交換。如果在線上傳輸秘鑰,那就有可能被攔截。所以采用非對(duì)稱(chēng)加密,兩把鑰匙,一把私鑰自留,一把公鑰公開(kāi)。公鑰可以在網(wǎng)上傳輸。不用線下交易。保證數(shù)據(jù)的安全性。
如上圖,A節(jié)點(diǎn)發(fā)送數(shù)據(jù)到B節(jié)點(diǎn),此時(shí)采用公鑰加密。A節(jié)點(diǎn)從自己的公鑰中獲取到B節(jié)點(diǎn)的公鑰對(duì)明文數(shù)據(jù)加密,得到密文發(fā)送給B節(jié)點(diǎn)。而B(niǎo)節(jié)點(diǎn)采用自己的私鑰解密。
2、無(wú)法解決消息篡改。
如上圖,A節(jié)點(diǎn)采用B的公鑰進(jìn)行加密,然后將密文傳輸給B節(jié)點(diǎn)。B節(jié)點(diǎn)拿A節(jié)點(diǎn)的公鑰將密文解密。
1、由于A的公鑰是公開(kāi)的,一旦網(wǎng)上黑客攔截消息,密文形同虛設(shè)。說(shuō)白了,這種加密方式,只要攔截消息,就都能解開(kāi)。
2、同樣存在無(wú)法確定消息來(lái)源的問(wèn)題,和消息篡改的問(wèn)題。
如上圖,A節(jié)點(diǎn)在發(fā)送數(shù)據(jù)前,先用B的公鑰加密,得到密文1,再用A的私鑰對(duì)密文1加密得到密文2。而B(niǎo)節(jié)點(diǎn)得到密文后,先用A的公鑰解密,得到密文1,之后用B的私鑰解密得到明文。
1、當(dāng)網(wǎng)絡(luò)上攔截到數(shù)據(jù)密文2時(shí), 由于A的公鑰是公開(kāi)的,故可以用A的公鑰對(duì)密文2解密,就得到了密文1。所以這樣看起來(lái)是雙重加密,其實(shí)最后一層的私鑰簽名是無(wú)效的。一般來(lái)講,我們都希望簽名是簽在最原始的數(shù)據(jù)上。如果簽名放在后面,由于公鑰是公開(kāi)的,簽名就缺乏安全性。
2、存在性能問(wèn)題,非對(duì)稱(chēng)加密本身效率就很低下,還進(jìn)行了兩次加密過(guò)程。
如上圖,A節(jié)點(diǎn)先用A的私鑰加密,之后用B的公鑰加密。B節(jié)點(diǎn)收到消息后,先采用B的私鑰解密,然后再利用A的公鑰解密。
1、當(dāng)密文數(shù)據(jù)2被黑客攔截后,由于密文2只能采用B的私鑰解密,而B(niǎo)的私鑰只有B節(jié)點(diǎn)有,其他人無(wú)法機(jī)密。故安全性最高。
2、當(dāng)B節(jié)點(diǎn)解密得到密文1后, 只能采用A的公鑰來(lái)解密。而只有經(jīng)過(guò)A的私鑰加密的數(shù)據(jù)才能用A的公鑰解密成功,A的私鑰只有A節(jié)點(diǎn)有,所以可以確定數(shù)據(jù)是由A節(jié)點(diǎn)傳輸過(guò)來(lái)的。
經(jīng)兩次非對(duì)稱(chēng)加密,性能問(wèn)題比較嚴(yán)重。
基于以上篡改數(shù)據(jù)的問(wèn)題,我們引入了消息認(rèn)證。經(jīng)過(guò)消息認(rèn)證后的加密流程如下:
當(dāng)A節(jié)點(diǎn)發(fā)送消息前,先對(duì)明文數(shù)據(jù)做一次散列計(jì)算。得到一個(gè)摘要, 之后將照耀與原始數(shù)據(jù)同時(shí)發(fā)送給B節(jié)點(diǎn)。當(dāng)B節(jié)點(diǎn)接收到消息后,對(duì)消息解密。解析出其中的散列摘要和原始數(shù)據(jù),然后再對(duì)原始數(shù)據(jù)進(jìn)行一次同樣的散列計(jì)算得到摘要1, 比較摘要與摘要1。如果相同則未被篡改,如果不同則表示已經(jīng)被篡改。
在傳輸過(guò)程中,密文2只要被篡改,最后導(dǎo)致的hash與hash1就會(huì)產(chǎn)生不同。
無(wú)法解決簽名問(wèn)題,也就是雙方相互攻擊。A對(duì)于自己發(fā)送的消息始終不承認(rèn)。比如A對(duì)B發(fā)送了一條錯(cuò)誤消息,導(dǎo)致B有損失。但A抵賴(lài)不是自己發(fā)送的。
在(三)的過(guò)程中,沒(méi)有辦法解決交互雙方相互攻擊。什么意思呢? 有可能是因?yàn)锳發(fā)送的消息,對(duì)A節(jié)點(diǎn)不利,后來(lái)A就抵賴(lài)這消息不是它發(fā)送的。
為了解決這個(gè)問(wèn)題,故引入了簽名。這里我們將(二)-4中的加密方式,與消息簽名合并設(shè)計(jì)在一起。
在上圖中,我們利用A節(jié)點(diǎn)的私鑰對(duì)其發(fā)送的摘要信息進(jìn)行簽名,然后將簽名+原文,再利用B的公鑰進(jìn)行加密。而B(niǎo)得到密文后,先用B的私鑰解密,然后 對(duì)摘要再用A的公鑰解密,只有比較兩次摘要的內(nèi)容是否相同。這既避免了防篡改問(wèn)題,有規(guī)避了雙方攻擊問(wèn)題。因?yàn)锳對(duì)信息進(jìn)行了簽名,故是無(wú)法抵賴(lài)的。
為了解決非對(duì)稱(chēng)加密數(shù)據(jù)時(shí)的性能問(wèn)題,故往往采用混合加密。這里就需要引入對(duì)稱(chēng)加密,如下圖:
在對(duì)數(shù)據(jù)加密時(shí),我們采用了雙方共享的對(duì)稱(chēng)秘鑰來(lái)加密。而對(duì)稱(chēng)秘鑰盡量不要在網(wǎng)絡(luò)上傳輸,以免丟失。這里的共享對(duì)稱(chēng)秘鑰是根據(jù)自己的私鑰和對(duì)方的公鑰計(jì)算出的,然后適用對(duì)稱(chēng)秘鑰對(duì)數(shù)據(jù)加密。而對(duì)方接收到數(shù)據(jù)時(shí),也計(jì)算出對(duì)稱(chēng)秘鑰然后對(duì)密文解密。
以上這種對(duì)稱(chēng)秘鑰是不安全的,因?yàn)锳的私鑰和B的公鑰一般短期內(nèi)固定,所以共享對(duì)稱(chēng)秘鑰也是固定不變的。為了增強(qiáng)安全性,最好的方式是每次交互都生成一個(gè)臨時(shí)的共享對(duì)稱(chēng)秘鑰。那么如何才能在每次交互過(guò)程中生成一個(gè)隨機(jī)的對(duì)稱(chēng)秘鑰,且不需要傳輸呢?
那么如何生成隨機(jī)的共享秘鑰進(jìn)行加密呢?
對(duì)于發(fā)送方A節(jié)點(diǎn),在每次發(fā)送時(shí),都生成一個(gè)臨時(shí)非對(duì)稱(chēng)秘鑰對(duì),然后根據(jù)B節(jié)點(diǎn)的公鑰 和 臨時(shí)的非對(duì)稱(chēng)私鑰 可以計(jì)算出一個(gè)對(duì)稱(chēng)秘鑰(KA算法-Key Agreement)。然后利用該對(duì)稱(chēng)秘鑰對(duì)數(shù)據(jù)進(jìn)行加密,針對(duì)共享秘鑰這里的流程如下:
對(duì)于B節(jié)點(diǎn),當(dāng)接收到傳輸過(guò)來(lái)的數(shù)據(jù)時(shí),解析出其中A節(jié)點(diǎn)的隨機(jī)公鑰,之后利用A節(jié)點(diǎn)的隨機(jī)公鑰 與 B節(jié)點(diǎn)自身的私鑰 計(jì)算出對(duì)稱(chēng)秘鑰(KA算法)。之后利用對(duì)稱(chēng)秘鑰機(jī)密數(shù)據(jù)。
對(duì)于以上加密方式,其實(shí)仍然存在很多問(wèn)題,比如如何避免重放攻擊(在消息中加入 Nonce ),再比如彩虹表(參考 KDF機(jī)制解決 )之類(lèi)的問(wèn)題。由于時(shí)間及能力有限,故暫時(shí)忽略。
那么究竟應(yīng)該采用何種加密呢?
主要還是基于要傳輸?shù)臄?shù)據(jù)的安全等級(jí)來(lái)考量。不重要的數(shù)據(jù)其實(shí)做好認(rèn)證和簽名就可以,但是很重要的數(shù)據(jù)就需要采用安全等級(jí)比較高的加密方案了。
密碼套件 是一個(gè)網(wǎng)絡(luò)協(xié)議的概念。其中主要包括身份認(rèn)證、加密、消息認(rèn)證(MAC)、秘鑰交換的算法組成。
在整個(gè)網(wǎng)絡(luò)的傳輸過(guò)程中,根據(jù)密碼套件主要分如下幾大類(lèi)算法:
秘鑰交換算法:比如ECDHE、RSA。主要用于客戶(hù)端和服務(wù)端握手時(shí)如何進(jìn)行身份驗(yàn)證。
消息認(rèn)證算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。
批量加密算法:比如AES, 主要用于加密信息流。
偽隨機(jī)數(shù)算法:例如TLS 1.2的偽隨機(jī)函數(shù)使用MAC算法的散列函數(shù)來(lái)創(chuàng)建一個(gè) 主密鑰 ——連接雙方共享的一個(gè)48字節(jié)的私鑰。主密鑰在創(chuàng)建會(huì)話(huà)密鑰(例如創(chuàng)建MAC)時(shí)作為一個(gè)熵來(lái)源。
在網(wǎng)絡(luò)中,一次消息的傳輸一般需要在如下4個(gè)階段分別進(jìn)行加密,才能保證消息安全、可靠的傳輸。
握手/網(wǎng)絡(luò)協(xié)商階段:
在雙方進(jìn)行握手階段,需要進(jìn)行鏈接的協(xié)商。主要的加密算法包括RSA、DH、ECDH等
身份認(rèn)證階段:
身份認(rèn)證階段,需要確定發(fā)送的消息的來(lái)源來(lái)源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA簽名)等。
消息加密階段:
消息加密指對(duì)發(fā)送的信息流進(jìn)行加密。主要采用的加密方式包括DES、RC4、AES等。
消息身份認(rèn)證階段/防篡改階段:
主要是保證消息在傳輸過(guò)程中確保沒(méi)有被篡改過(guò)。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。
ECC :Elliptic Curves Cryptography,橢圓曲線密碼編碼學(xué)。是一種根據(jù)橢圓上點(diǎn)倍積生成 公鑰、私鑰的算法。用于生成公私秘鑰。
ECDSA :用于數(shù)字簽名,是一種數(shù)字簽名算法。一種有效的數(shù)字簽名使接收者有理由相信消息是由已知的發(fā)送者創(chuàng)建的,從而發(fā)送者不能否認(rèn)已經(jīng)發(fā)送了消息(身份驗(yàn)證和不可否認(rèn)),并且消息在運(yùn)輸過(guò)程中沒(méi)有改變。ECDSA簽名算法是ECC與DSA的結(jié)合,整個(gè)簽名過(guò)程與DSA類(lèi)似,所不一樣的是簽名中采取的算法為ECC,最后簽名出來(lái)的值也是分為r,s。 主要用于身份認(rèn)證階段 。
ECDH :也是基于ECC算法的霍夫曼樹(shù)秘鑰,通過(guò)ECDH,雙方可以在不共享任何秘密的前提下協(xié)商出一個(gè)共享秘密,并且是這種共享秘鑰是為當(dāng)前的通信暫時(shí)性的隨機(jī)生成的,通信一旦中斷秘鑰就消失。 主要用于握手磋商階段。
ECIES: 是一種集成加密方案,也可稱(chēng)為一種混合加密方案,它提供了對(duì)所選擇的明文和選擇的密碼文本攻擊的語(yǔ)義安全性。ECIES可以使用不同類(lèi)型的函數(shù):秘鑰協(xié)商函數(shù)(KA),秘鑰推導(dǎo)函數(shù)(KDF),對(duì)稱(chēng)加密方案(ENC),哈希函數(shù)(HASH), H-MAC函數(shù)(MAC)。
ECC 是橢圓加密算法,主要講述了按照公私鑰怎么在橢圓上產(chǎn)生,并且不可逆。 ECDSA 則主要是采用ECC算法怎么來(lái)做簽名, ECDH 則是采用ECC算法怎么生成對(duì)稱(chēng)秘鑰。以上三者都是對(duì)ECC加密算法的應(yīng)用。而現(xiàn)實(shí)場(chǎng)景中,我們往往會(huì)采用混合加密(對(duì)稱(chēng)加密,非對(duì)稱(chēng)加密結(jié)合使用,簽名技術(shù)等一起使用)。 ECIES 就是底層利用ECC算法提供的一套集成(混合)加密方案。其中包括了非對(duì)稱(chēng)加密,對(duì)稱(chēng)加密和簽名的功能。
<meta charset="utf-8">
這個(gè)先訂條件是為了保證曲線不包含奇點(diǎn)。
所以,隨著曲線參數(shù)a和b的不斷變化,曲線也呈現(xiàn)出了不同的形狀。比如:
所有的非對(duì)稱(chēng)加密的基本原理基本都是基于一個(gè)公式 K = k G。其中K代表公鑰,k代表私鑰,G代表某一個(gè)選取的基點(diǎn)。非對(duì)稱(chēng)加密的算法 就是要保證 該公式 不可進(jìn)行逆運(yùn)算( 也就是說(shuō)G/K是無(wú)法計(jì)算的 )。 *
ECC是如何計(jì)算出公私鑰呢?這里我按照我自己的理解來(lái)描述。
我理解,ECC的核心思想就是:選擇曲線上的一個(gè)基點(diǎn)G,之后隨機(jī)在ECC曲線上取一個(gè)點(diǎn)k(作為私鑰),然后根據(jù)k G計(jì)算出我們的公鑰K。并且保證公鑰K也要在曲線上。*
那么k G怎么計(jì)算呢?如何計(jì)算k G才能保證最后的結(jié)果不可逆呢?這就是ECC算法要解決的。
首先,我們先隨便選擇一條ECC曲線,a = -3, b = 7 得到如下曲線:
在這個(gè)曲線上,我隨機(jī)選取兩個(gè)點(diǎn),這兩個(gè)點(diǎn)的乘法怎么算呢?我們可以簡(jiǎn)化下問(wèn)題,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那么我們只要能在曲線上計(jì)算出加法,理論上就能算乘法。所以,只要能在這個(gè)曲線上進(jìn)行加法計(jì)算,理論上就可以來(lái)計(jì)算乘法,理論上也就可以計(jì)算k*G這種表達(dá)式的值。
曲線上兩點(diǎn)的加法又怎么算呢?這里ECC為了保證不可逆性,在曲線上自定義了加法體系。
現(xiàn)實(shí)中,1+1=2,2+2=4,但在ECC算法里,我們理解的這種加法體系是不可能。故需要自定義一套適用于該曲線的加法體系。
ECC定義,在圖形中隨機(jī)找一條直線,與ECC曲線相交于三個(gè)點(diǎn)(也有可能是兩個(gè)點(diǎn)),這三點(diǎn)分別是P、Q、R。
那么P+Q+R = 0。其中0 不是坐標(biāo)軸上的0點(diǎn),而是ECC中的無(wú)窮遠(yuǎn)點(diǎn)。也就是說(shuō)定義了無(wú)窮遠(yuǎn)點(diǎn)為0點(diǎn)。
同樣,我們就能得出 P+Q = -R。 由于R 與-R是關(guān)于X軸對(duì)稱(chēng)的,所以我們就能在曲線上找到其坐標(biāo)。
P+R+Q = 0, 故P+R = -Q , 如上圖。
以上就描述了ECC曲線的世界里是如何進(jìn)行加法運(yùn)算的。
從上圖可看出,直線與曲線只有兩個(gè)交點(diǎn),也就是說(shuō) 直線是曲線的切線。此時(shí)P,R 重合了。
也就是P = R, 根據(jù)上述ECC的加法體系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0
于是乎得到 2 P = -Q (是不是與我們非對(duì)稱(chēng)算法的公式 K = k G 越來(lái)越近了)。
于是我們得出一個(gè)結(jié)論,可以算乘法,不過(guò)只有在切點(diǎn)的時(shí)候才能算乘法,而且只能算2的乘法。
假若 2 可以變成任意個(gè)數(shù)進(jìn)行想乘,那么就能代表在ECC曲線里可以進(jìn)行乘法運(yùn)算,那么ECC算法就能滿(mǎn)足非對(duì)稱(chēng)加密算法的要求了。
那么我們是不是可以隨機(jī)任何一個(gè)數(shù)的乘法都可以算呢? 答案是肯定的。 也就是點(diǎn)倍積 計(jì)算方式。
選一個(gè)隨機(jī)數(shù) k, 那么k * P等于多少呢?
我們知道在計(jì)算機(jī)的世界里,所有的都是二進(jìn)制的,ECC既然能算2的乘法,那么我們可以將隨機(jī)數(shù)k描 述成二進(jìn)制然后計(jì)算。假若k = 151 = 10010111
由于2 P = -Q 所以 這樣就計(jì)算出了k P。 這就是點(diǎn)倍積算法 。所以在ECC的曲線體系下是可以來(lái)計(jì)算乘法,那么以為這非對(duì)稱(chēng)加密的方式是可行的。
至于為什么這樣計(jì)算 是不可逆的。這需要大量的推演,我也不了解。但是我覺(jué)得可以這樣理解:
我們的手表上,一般都有時(shí)間刻度?,F(xiàn)在如果把1990年01月01日0點(diǎn)0分0秒作為起始點(diǎn),如果告訴你至起始點(diǎn)為止時(shí)間流逝了 整1年,那么我們是可以計(jì)算出現(xiàn)在的時(shí)間的,也就是能在手表上將時(shí)分秒指針應(yīng)該指向00:00:00。但是反過(guò)來(lái),我說(shuō)現(xiàn)在手表上的時(shí)分秒指針指向了00:00:00,你能告訴我至起始點(diǎn)算過(guò)了有幾年了么?
ECDSA簽名算法和其他DSA、RSA基本相似,都是采用私鑰簽名,公鑰驗(yàn)證。只不過(guò)算法體系采用的是ECC的算法。交互的雙方要采用同一套參數(shù)體系。簽名原理如下:
在曲線上選取一個(gè)無(wú)窮遠(yuǎn)點(diǎn)為基點(diǎn) G = (x,y)。隨機(jī)在曲線上取一點(diǎn)k 作為私鑰, K = k*G 計(jì)算出公鑰。
簽名過(guò)程:
生成隨機(jī)數(shù)R, 計(jì)算出RG.
根據(jù)隨機(jī)數(shù)R,消息M的HASH值H,以及私鑰k, 計(jì)算出簽名S = (H+kx)/R.
將消息M,RG,S發(fā)送給接收方。
簽名驗(yàn)證過(guò)程:
接收到消息M, RG,S
根據(jù)消息計(jì)算出HASH值H
根據(jù)發(fā)送方的公鑰K,計(jì)算 HG/S + xK/S, 將計(jì)算的結(jié)果與 RG比較。如果相等則驗(yàn)證成功。
公式推論:
HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG
在介紹原理前,說(shuō)明一下ECC是滿(mǎn)足結(jié)合律和交換律的,也就是說(shuō)A+B+C = A+C+B = (A+C)+B。
這里舉一個(gè)WIKI上的例子說(shuō)明如何生成共享秘鑰,也可以參考 Alice And Bob 的例子。
Alice 與Bob 要進(jìn)行通信,雙方前提都是基于 同一參數(shù)體系的ECC生成的 公鑰和私鑰。所以有ECC有共同的基點(diǎn)G。
生成秘鑰階段:
Alice 采用公鑰算法 KA = ka * G ,生成了公鑰KA和私鑰ka, 并公開(kāi)公鑰KA。
Bob 采用公鑰算法 KB = kb * G ,生成了公鑰KB和私鑰 kb, 并公開(kāi)公鑰KB。
計(jì)算ECDH階段:
Alice 利用計(jì)算公式 Q = ka * KB 計(jì)算出一個(gè)秘鑰Q。
Bob 利用計(jì)算公式 Q' = kb * KA 計(jì)算出一個(gè)秘鑰Q'。
共享秘鑰驗(yàn)證:
Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'
故 雙方分別計(jì)算出的共享秘鑰不需要進(jìn)行公開(kāi)就可采用Q進(jìn)行加密。我們將Q稱(chēng)為共享秘鑰。
在以太坊中,采用的ECIEC的加密套件中的其他內(nèi)容:
1、其中HASH算法采用的是最安全的SHA3算法 Keccak 。
2、簽名算法采用的是 ECDSA
3、認(rèn)證方式采用的是 H-MAC
4、ECC的參數(shù)體系采用了secp256k1, 其他參數(shù)體系 參考這里
H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:
在 以太坊 的 UDP通信時(shí)(RPC通信加密方式不同),則采用了以上的實(shí)現(xiàn)方式,并擴(kuò)展化了。
首先,以太坊的UDP通信的結(jié)構(gòu)如下:
其中,sig是 經(jīng)過(guò) 私鑰加密的簽名信息。mac是可以理解為整個(gè)消息的摘要, ptype是消息的事件類(lèi)型,data則是經(jīng)過(guò)RLP編碼后的傳輸數(shù)據(jù)。
其UDP的整個(gè)的加密,認(rèn)證,簽名模型如下:
二、數(shù)據(jù)庫(kù)技術(shù)知識(shí)數(shù)據(jù)結(jié)構(gòu)的算法
數(shù)據(jù)庫(kù)技術(shù)知識(shí)數(shù)據(jù)結(jié)構(gòu)的算法
對(duì)于將要參加計(jì)算機(jī)等級(jí)考試的考生來(lái)說(shuō),計(jì)算機(jī)等級(jí)考試的知識(shí)點(diǎn)輔導(dǎo)是非常重要的復(fù)習(xí)資料。以下是我收集的數(shù)據(jù)庫(kù)技術(shù)知識(shí)數(shù)據(jù)結(jié)構(gòu)的算法,希望大家認(rèn)真閱讀!
1、數(shù)據(jù):數(shù)據(jù)的基本單位是數(shù)據(jù)元素。數(shù)據(jù)元素可由一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)組成。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位
2、數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)、數(shù)據(jù)的運(yùn)算
3、主要的數(shù)據(jù)存儲(chǔ)方式:順序存儲(chǔ)結(jié)構(gòu)(邏輯和物理相鄰,存儲(chǔ)密度大)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
順序存儲(chǔ)結(jié)構(gòu):
順序存儲(chǔ)計(jì)算公式 Li=L0+(i-1)×K 順序結(jié)構(gòu)可以進(jìn)行隨機(jī)存取;插人、刪除運(yùn)算會(huì)引起相應(yīng)節(jié)點(diǎn)的大量移動(dòng)
鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu):a、指針域可以有多個(gè),可以指向空,比比順序存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)密度小
b、邏輯上相鄰的節(jié)點(diǎn)物理上不一定相鄰。 c、插人、刪除等不需要大量移動(dòng)節(jié)點(diǎn)
4、順序表:一般情況下,若長(zhǎng)度為n的順序表,在任何位置插入或刪除的概率相等,元素移動(dòng)的平均次數(shù)為n/2(插入)和(n-1)/2(刪除)。
5、鏈表:線性鏈表(單鏈表和雙向鏈表等等)和非線性鏈表
線性鏈表也稱(chēng)為單鏈表,其每個(gè)一節(jié)點(diǎn)中只包含一個(gè)指針域,雙鏈表中,每個(gè)節(jié)點(diǎn)中設(shè)置有兩個(gè)指針域。(注意結(jié)點(diǎn)的插入和刪除操作)
6、棧:“后進(jìn)先出”(LIFO)表。棧的應(yīng)用:表達(dá)式求解、二叉樹(shù)對(duì)稱(chēng)序周游、快速排序算法、遞歸過(guò)程的實(shí)現(xiàn)等
7、隊(duì)列:“先進(jìn)先出”線性表。應(yīng)用:樹(shù)的層次遍歷
8、串:由零個(gè)或多個(gè)字符組成的有限序列。
9、多維數(shù)組的順序存儲(chǔ):
10、稀疏矩陣的存儲(chǔ):下三角矩陣順序存儲(chǔ)
其他常見(jiàn)的存儲(chǔ)方法還有三元組法和十字鏈表法
11、廣義表:由零個(gè)或多個(gè)單元素或子表所組成的有限序列。廣義表的元素可以是子表,而子表的元素還可以是子表
12、樹(shù)型結(jié)構(gòu):非線性結(jié)構(gòu)。常用的樹(shù)型結(jié)構(gòu)有樹(shù)和二叉樹(shù)。
二叉樹(shù)與樹(shù)的區(qū)別:二叉樹(shù)不是樹(shù)的特殊情況,樹(shù)和二叉樹(shù)之間最主要的區(qū)別是:二叉樹(shù)的節(jié)點(diǎn)的子樹(shù)要區(qū)分左子樹(shù)和右子樹(shù),即使在節(jié)點(diǎn)只有一棵子樹(shù)的情況下也要明確指出該子樹(shù)是左子樹(shù)還是右子樹(shù)。
13、樹(shù)(森林)與二叉樹(shù)之間的轉(zhuǎn)換(要會(huì)轉(zhuǎn)換)
14、二叉樹(shù)和樹(shù)的周游(遍歷)
二叉樹(shù)的周游主要有以下3種方式:前序法(NLR)、對(duì)稱(chēng)序法(LNR)、后序法(LRN)
周游樹(shù)和樹(shù)林:深度優(yōu)先和按廣度優(yōu)先兩種方式進(jìn)行。深度優(yōu)先方式又可分為按先根次序和按后根次序周游
樹(shù)與二叉樹(shù)周游之間的對(duì)應(yīng)關(guān)系:按先根次序周游樹(shù)正好與按前序法周游樹(shù)對(duì)應(yīng)的二叉樹(shù)等同,后根次序周游樹(shù)正好與按對(duì)稱(chēng)序法周游對(duì)應(yīng)的`二叉樹(shù)等同
按廣度優(yōu)先方式就是層次次序周游
15、二叉樹(shù)的存儲(chǔ)和線索
二叉樹(shù)的存儲(chǔ)結(jié)構(gòu):二叉樹(shù)的llink一rlink法存儲(chǔ)表示
線索二叉樹(shù):在有n個(gè)節(jié)點(diǎn)的二叉樹(shù)的且llink - rlink法存儲(chǔ)表示中,必定有n+1個(gè)空指針域
16、哈夫曼樹(shù):一類(lèi)帶權(quán)路徑長(zhǎng)度最短的樹(shù)。樹(shù)的帶權(quán)路徑長(zhǎng)度為樹(shù)中所有葉子節(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和WPL。
17、查找:
(1)順序查找:平均查找長(zhǎng)度為(n +1 )/2次,時(shí)間復(fù)雜度為O(n)
(2)二分法查找:線性表節(jié)點(diǎn)必須按關(guān)鍵碼值排序,且線性表是以順序存儲(chǔ)方式存儲(chǔ)的。查找成功比較次數(shù)log2n,查找失敗比較次數(shù)log2n+1
(3)分塊查找:先是塊間查找,然后塊內(nèi)查找。
(4)散列表(哈希表Hash)的存儲(chǔ)和查找:處理沖突的方法:開(kāi)地址法(線性探測(cè)法)、拉鏈法等
負(fù)載因子(裝填因子)=表實(shí)際存儲(chǔ)的結(jié)點(diǎn)個(gè)數(shù)/表的最大能存儲(chǔ)結(jié)點(diǎn)個(gè)數(shù)(即表長(zhǎng))
二叉排序樹(shù):每個(gè)結(jié)點(diǎn)左子樹(shù)的所有關(guān)鍵碼值都小于該結(jié)點(diǎn)關(guān)鍵碼值,右子樹(shù)所有結(jié)點(diǎn)關(guān)鍵碼值都大于該結(jié)點(diǎn)關(guān)鍵碼值。對(duì)稱(chēng)周游二叉排序樹(shù),得到一個(gè)有序序列,時(shí)間復(fù)雜度O(log2n)
B樹(shù)和B+樹(shù):M階樹(shù),每個(gè)結(jié)點(diǎn)至多有M-1個(gè)關(guān)鍵碼,至少有M/2(取上界)-1個(gè)關(guān)鍵碼。B樹(shù)適合隨機(jī)查找,不適合順序查找。B+樹(shù)適合順序查找。
18、排序
直接插人排序、希爾排序、直接選擇排序、堆排序、起泡排序、快速排序等排序算法要了解。
直接選擇排序、希爾排序、快速排序和堆排序是不穩(wěn)定排序,其他排序?yàn)榉€(wěn)定排序
;三、2021年你讀了哪些覺(jué)得比較好的計(jì)算機(jī)書(shū)籍?
[美] 馬丁·福勒(Martin Fowler) 著,徐昊,鄭曄,熊節(jié) 譯
領(lǐng)域特定語(yǔ)言DSL,通過(guò)Java和C語(yǔ)言分析具體案例,講解DSL的構(gòu)造方式和通用原則,軟件開(kāi)發(fā)程序員的教程,馬丁·福勒新的力作。
《領(lǐng)域特定語(yǔ)言》是領(lǐng)域特定語(yǔ)言(Domain-Specific Language,DSL)領(lǐng)域的豐碑之作,由軟件開(kāi)發(fā)大師馬丁·福勒(Martin Fowler)歷時(shí)多年寫(xiě)作而成。
全書(shū)共57章,分為6個(gè)部分,全面介紹了DSL概念、DSL常見(jiàn)主題、外部DSL主題、內(nèi)部DSL主題、備選計(jì)算模型以及代碼生成等內(nèi)容,揭示了與編程語(yǔ)言無(wú)關(guān)的通用原則和模式,闡釋了如何通過(guò)DSL有效提高開(kāi)發(fā)人員的生產(chǎn)力以及增進(jìn)與領(lǐng)域?qū)<业挠行贤?,能為開(kāi)發(fā)人員選擇和使用DSL提供有效的決策依據(jù)和指導(dǎo)方法。
本書(shū)適合想要了解各種DSL及其構(gòu)造方式,理解其通用原則、模式和適用場(chǎng)景,以提高開(kāi)發(fā)生產(chǎn)力和溝通能力的軟件開(kāi)發(fā)人員閱讀。
[美] 肯尼思·,A.蘭伯特(Kenneth,A.,Lambert,) 著,肖鑒明 譯
數(shù)據(jù)結(jié)構(gòu)算法入門(mén)教程,基于Python語(yǔ)言進(jìn)行講解,國(guó)外高等院校教材升級(jí),書(shū)中包含大量習(xí)題和編程項(xiàng)目,隨書(shū)贈(zèng)送配套資源。
本書(shū)用 Python 語(yǔ)言來(lái)講解數(shù)據(jù)結(jié)構(gòu)及實(shí)現(xiàn)方法。全書(shū)首先概述 Python 編程的功能—這些功能是實(shí)際編程和解決問(wèn)題時(shí)所必需的;其次介紹抽象數(shù)據(jù)類(lèi)型的規(guī)范、實(shí)現(xiàn)和應(yīng)用,多項(xiàng)集類(lèi)型,以及接口和實(shí)現(xiàn)之間的重要差異;隨后介紹線性多項(xiàng)集、棧、隊(duì)列和列表;最后介紹樹(shù)、圖等內(nèi)容。本書(shū)附有大量的復(fù)習(xí)題和編程項(xiàng)目,旨在幫助讀者鞏固所學(xué)知識(shí)。
本書(shū)不僅適合高等院校計(jì)算機(jī)專(zhuān)業(yè)師生閱讀,也適合對(duì) Python 感興趣的讀者和程序員閱讀。
喬恩·克萊因伯格(Jon Kleinberg) 著,王海鵬 譯
用實(shí)際示例闡明枯燥的算法理論,更注重算法設(shè)計(jì)思維的培養(yǎng),適合作為算法入門(mén)書(shū)。
這是一本被眾多名校采用的算法設(shè)計(jì)課程教材,強(qiáng)調(diào)用實(shí)際示例闡明枯燥的算法理論,更注重算法設(shè)計(jì)思路而非算法復(fù)雜度分析。本書(shū)采用新穎的教學(xué)方式,通過(guò)分析真實(shí)世界的問(wèn)題來(lái)激發(fā)算法思想。兩位作者以一種清晰、直接的方式,指導(dǎo)學(xué)生自己分析和定義問(wèn)題,并從中找出適用于給定場(chǎng)景的算法設(shè)計(jì)原則。本書(shū)鼓勵(lì)讀者更深入地理解算法設(shè)計(jì)過(guò)程, 探索 算法在計(jì)算機(jī)科學(xué)的更廣闊領(lǐng)域中的應(yīng)用。
本書(shū)具有以下特色:
王爭(zhēng)著
20個(gè)數(shù)據(jù)結(jié)構(gòu)與算法,100個(gè)真實(shí)項(xiàng)目場(chǎng)景案例,300多幅算法手繪圖解
本書(shū)分為11章。第1章介紹復(fù)雜度分析方法。第2章介紹數(shù)組、鏈表、棧和隊(duì)列這些基礎(chǔ)的線性表數(shù)據(jù)結(jié)構(gòu)。第3章介紹遞歸編程技巧、8種經(jīng)典排序、二分查找及二分查找的變體問(wèn)題。第4章介紹哈希表、位圖、哈希算法和布隆過(guò)濾器。第5章介紹樹(shù)相關(guān)的數(shù)據(jù)結(jié)構(gòu),包括二叉樹(shù)、二叉查找樹(shù)、平衡二叉查找樹(shù)、遞歸樹(shù)和B+樹(shù)。第6章介紹堆,以及堆的各種應(yīng)用,包括堆排序、優(yōu)先級(jí)隊(duì)列、求Top K、求中位數(shù)和求百分位數(shù)。第7章介紹跳表、并查集、線段樹(shù)和樹(shù)狀數(shù)組這些比較高級(jí)的數(shù)據(jù)結(jié)構(gòu)。第8章介紹字符串匹配算法,包括BF算法、RK算法、BM算法、KMP算法、Trie樹(shù)和AC自動(dòng)機(jī)。第9章介紹圖及相關(guān)算法,包括深度優(yōu)先搜索、廣度優(yōu)先搜索、拓?fù)渑判?、Dijkstra算法、Floyd算法、A*算法、Z小生成樹(shù)算法、Z大流算法和Z大二分匹配等。第10章介紹4種算法思想,包括貪心、分治、回溯和動(dòng)態(tài)規(guī)劃。第11章介紹4個(gè)經(jīng)典項(xiàng)目中的數(shù)據(jù)結(jié)構(gòu)和算法的應(yīng)用,包括Redis、搜索引擎、鑒權(quán)限流和短網(wǎng)址服務(wù)。另外,附錄A為書(shū)中的思考題的解答。
[美] 阿爾·斯維加特(Al Sweigart) 著
Python編程從入門(mén)到實(shí)踐姊妹篇,零基礎(chǔ)自學(xué)Python教程書(shū)籍,提供配套同步教學(xué)視頻、在線編程環(huán)境!針對(duì)Python3.X版本更新
在本書(shū)中,你將學(xué)習(xí)利用Python編程在幾分鐘內(nèi)完成手動(dòng)需要幾小時(shí)的工作,無(wú)須事先具備編程經(jīng)驗(yàn)。通過(guò)閱讀本書(shū),你會(huì)學(xué)習(xí)Python的基本知識(shí), 探索 Python豐富的模塊庫(kù),并完成特定的任務(wù)(例如,從網(wǎng)站抓取數(shù)據(jù),讀取PDF和Word文檔等)。本書(shū)還包括有關(guān)輸入驗(yàn)證的實(shí)現(xiàn)方法,以及自動(dòng)更新CSV文件的技巧。一旦掌握了編程的基礎(chǔ)知識(shí),你就可以毫不費(fèi)力地創(chuàng)建Python程序,自動(dòng)化地完成很多繁瑣的工作,包括:
何華平 著
Python編程零基礎(chǔ)入門(mén)實(shí)踐教程,用Python處理Excel、Word、PPT、PDF、圖像文件,提升職場(chǎng)辦公效率,解決辦公難題,附贈(zèng)學(xué)習(xí)資源和教學(xué)視頻
這是一本關(guān)于如何利用Python提高日常辦公效率的書(shū),書(shū)中凝聚了作者多年的實(shí)踐經(jīng)驗(yàn)和獨(dú)特思考,旨在幫助讀者準(zhǔn)確、高效地完成大量高重復(fù)度的工作。
《學(xué)Python,不加班:輕松實(shí)現(xiàn)辦公自動(dòng)化》匯集了日常辦公和處理文檔時(shí)常見(jiàn)的問(wèn)題,通過(guò)實(shí)例的演示與講解,幫助讀者靈活有效地使用Python處理工作中遇到的問(wèn)題。全書(shū)共11章,涵蓋Python的各種應(yīng)用場(chǎng)景,具體包括文件管理自動(dòng)化,網(wǎng)絡(luò)信息自動(dòng)獲取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、圖片文件的自動(dòng)化處理,模擬鼠標(biāo)、鍵盤(pán)操控本地軟件,自動(dòng)化運(yùn)行管理等。本書(shū)力圖淡化編程中的抽象概念,貼合工作場(chǎng)景,注重實(shí)戰(zhàn)效果,通過(guò)對(duì)Python技術(shù)的巧妙講解,幫助讀者成為高效率的辦公室“超人”。
雷明 著
人工智能深度學(xué)習(xí)領(lǐng)域教程,AI程序員的數(shù)學(xué)參考書(shū),透徹理解機(jī)器學(xué)習(xí)算法,從數(shù)學(xué)層面搞懂核心算法原理的邏輯,python程序講解
本書(shū)的目標(biāo)是幫助讀者全面、系統(tǒng)地學(xué)習(xí)機(jī)器學(xué)習(xí)所必須的數(shù)學(xué)知識(shí)。全書(shū)由8章組成,力求精準(zhǔn)、最小地覆蓋機(jī)器學(xué)習(xí)的數(shù)學(xué)知識(shí)。包括微積分,線性代數(shù)與矩陣論,最優(yōu)化方法,概率論,信息論,隨機(jī)過(guò)程,以及圖論。本書(shū)從機(jī)器學(xué)習(xí)的角度講授這些數(shù)學(xué)知識(shí),對(duì)它們?cè)谠擃I(lǐng)域的應(yīng)用舉例說(shuō)明,使讀者對(duì)某些抽象的數(shù)學(xué)知識(shí)和理論的實(shí)際應(yīng)用有直觀、具體的認(rèn)識(shí)。 本書(shū)內(nèi)容緊湊,結(jié)構(gòu)清晰,深入淺出,講解詳細(xì)。可用作計(jì)算機(jī)、人工智能、電子工程、自動(dòng)化、數(shù)學(xué)等相關(guān)專(zhuān)業(yè)的教材與教學(xué)參考書(shū)。對(duì)人工智能領(lǐng)域的工程技術(shù)人員與產(chǎn)品研發(fā)人員,本書(shū)也有很強(qiáng)的參考價(jià)值。對(duì)于廣大數(shù)學(xué)與應(yīng)用的數(shù)學(xué)愛(ài)好者,本書(shū)亦為適合自學(xué)的讀本。
張逸 著
DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)教程,進(jìn)一步精化領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法體系,通過(guò)實(shí)戰(zhàn)案例演示統(tǒng)一過(guò)程的實(shí)施,可幫助讀者提高領(lǐng)域建模及軟件設(shè)計(jì)能力。
本書(shū)全面闡釋了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(domain-driven design,DDD)的知識(shí)體系,內(nèi)容覆蓋領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要模式與主流方法,并在此基礎(chǔ)上提出“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)統(tǒng)一過(guò)程”(domain-driven design unified process,DDDUP),將整個(gè)軟件構(gòu)建過(guò)程劃分為全局分析、架構(gòu)映射和領(lǐng)域建模3個(gè)階段。除給出諸多案例來(lái)闡釋領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)統(tǒng)一過(guò)程中的方法與模式之外,本書(shū)還通過(guò)一個(gè)真實(shí)而完整的案例全面展現(xiàn)了如何進(jìn)行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)統(tǒng)一過(guò)程的實(shí)施和落地。為了更好地運(yùn)用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)統(tǒng)一過(guò)程,本書(shū)還開(kāi)創(chuàng)性地引入了業(yè)務(wù)服務(wù)、菱形對(duì)稱(chēng)架構(gòu)、領(lǐng)域驅(qū)動(dòng)架構(gòu)、服務(wù)驅(qū)動(dòng)設(shè)計(jì)等方法與模式,總結(jié)了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)能力評(píng)估模型與參考過(guò)程模型。本書(shū)提出的一整套方法體系已在多個(gè)項(xiàng)目中推廣和落地。
劉遄 著
Linux入門(mén)教程書(shū)籍,基于Linux系統(tǒng)RHEL8編寫(xiě),每章帶有圖表及習(xí)題,知識(shí)點(diǎn)覆蓋紅帽認(rèn)證RHCE考試要求。
1.本書(shū)耗時(shí)近3年時(shí)間,修訂1500余次,內(nèi)容源自國(guó)內(nèi)每天訪問(wèn)量近60000人次的同名Linux培訓(xùn)課程;
2.在上一版的基礎(chǔ)上進(jìn)行了系統(tǒng)的更新,基于Linux系統(tǒng)RHEL 8編寫(xiě),適用于CentOS、Fedora、Ubuntu等主流衍生版本;
3.面向零基礎(chǔ)讀者,從Linux基礎(chǔ)知識(shí)講起,漸進(jìn)式地提高內(nèi)容難度。
《Linux就該這么學(xué)(第2版)》在上一版的基礎(chǔ)上進(jìn)行了大量的更新,基于紅帽RHEL 8系統(tǒng)編寫(xiě),且內(nèi)容適用于CentOS、Fedora等系統(tǒng)。本書(shū)共分為20章,內(nèi)容涵蓋了部署Linux系統(tǒng),常用的Linux命令,與文件讀寫(xiě)操作有關(guān)的技術(shù),使用Vim編輯器編寫(xiě)和修改配置文件,用戶(hù)身份與文件權(quán)限的設(shè)置,硬盤(pán)設(shè)備分區(qū)、格式化以及掛載等操作,部署RAID磁盤(pán)陣列和LVM,firewalld防火墻與iptables防火墻的區(qū)別和配置,使用ssh服務(wù)管理遠(yuǎn)程主機(jī),使用Apache服務(wù)部署靜態(tài)網(wǎng)站,使用vsftpd服務(wù)傳輸文件,使用Samba或NFS實(shí)現(xiàn)文件共享,使用BIND提供域名解析服務(wù),使用DHCP動(dòng)態(tài)管理主機(jī)地址,使用Postfix與Dovecot部署郵件系統(tǒng),使用Ansible服務(wù)實(shí)現(xiàn)自動(dòng)化運(yùn)維,使用iSCSI服務(wù)部署網(wǎng)絡(luò)存儲(chǔ),使用MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng),使用PXE+Kickstart無(wú)人值守安裝服務(wù),使用LNMP架構(gòu)部署動(dòng)態(tài)網(wǎng)站環(huán)境等。此外,本書(shū)的配套站點(diǎn)還深度點(diǎn)評(píng)了紅帽RHCSA、RHCE、RHCA認(rèn)證,方便讀者備考。
張?chǎng)涡?著
CSS3.0入門(mén)到進(jìn)階教程,前端博客"鑫空間-鑫生活"博主十年經(jīng)驗(yàn)沉淀之作,大量實(shí)戰(zhàn)案例且具有在線Demo演示,配套官方網(wǎng)站,隨時(shí)與作者溝通學(xué)習(xí)。
本書(shū)是“CSS世界三部曲”的最后一部。這是一本關(guān)于CSS的進(jìn)階讀物,專(zhuān)門(mén)講CSS3及其之后版本的新特性。在本書(shū)中,作者結(jié)合自己多年的從業(yè)經(jīng)驗(yàn),講解CSS基礎(chǔ)知識(shí),并充分考慮前端開(kāi)發(fā)者的需求,以CSS新特性的 歷史 背景為線索,去粗取精,注重細(xì)節(jié),深入淺出地介紹了上百個(gè)CSS新特性。此外,作者專(zhuān)門(mén)還為本書(shū)開(kāi)發(fā)了配套網(wǎng)站,用于書(shū)中實(shí)例效果的在線展示和問(wèn)題答疑。
本書(shū)的所有內(nèi)容都是作者經(jīng)過(guò)深入思考和 探索 后提煉出來(lái)的,知識(shí)點(diǎn)多且內(nèi)容豐富,注重技術(shù)細(xì)節(jié)、經(jīng)驗(yàn)分享和解決問(wèn)題的思路。本書(shū)的主要目標(biāo)是幫助前端開(kāi)發(fā)者突破CSS技能提升的瓶頸,非常適合具有一定CSS基礎(chǔ)的前端開(kāi)發(fā)者閱讀。
[美] 威廉·肖特斯(William Shotts) 著,門(mén)佳,李偉 譯
手把手教你學(xué)Linux操作系統(tǒng),腳本shell編程代碼書(shū)寫(xiě),系統(tǒng)管理編程運(yùn)維,學(xué)習(xí)使用bash(LinuxShell)編寫(xiě)完整的程序。
本書(shū)對(duì)Linux命令行進(jìn)行詳細(xì)的介紹,全書(shū)內(nèi)容包括4個(gè)部分,第一部分由Shell的介紹開(kāi)啟命令行基礎(chǔ)知識(shí)的學(xué)習(xí)之旅;第二部分講述配置文件的編輯,如何通過(guò)命令行控制計(jì)算機(jī);第三部分探討常見(jiàn)的任務(wù)與必備工具;第四部分全面介紹Shell編程,讀者可通過(guò)動(dòng)手編寫(xiě)Shell腳本掌握Linux命令的應(yīng)用,從而實(shí)現(xiàn)常見(jiàn)計(jì)算任務(wù)的自動(dòng)化。通過(guò)閱讀本書(shū),讀者將對(duì)Linux命令有更加深入的理解,并且可以將其應(yīng)用到實(shí)際的工作中。
本書(shū)適合Linux初學(xué)人員、Linux系統(tǒng)管理人員及Linux愛(ài)好者閱讀。
[美] 布萊恩·W.克尼漢(Brian,W.,Kernighan) 著,韓磊 譯
UNIX的誕生記與發(fā)展史,計(jì)算機(jī)先驅(qū)布萊恩·W.克尼漢繼C程序設(shè)計(jì)語(yǔ)言后又一力作,講述貝爾實(shí)驗(yàn)室的幕后故事,C/C++等重要發(fā)明的起源,探尋計(jì)算科學(xué)之光!
自1969年在貝爾實(shí)驗(yàn)室的閣樓上誕生以來(lái),Unix操作系統(tǒng)的發(fā)展遠(yuǎn)遠(yuǎn)超出其創(chuàng)造者們的想象。它帶動(dòng)了許多創(chuàng)新軟件的開(kāi)發(fā),影響了無(wú)數(shù)程序員,改變了整個(gè)計(jì)算機(jī)技術(shù)的發(fā)展軌跡。
本書(shū)不但書(shū)寫(xiě)Unix的 歷史 ,而且記錄作者的回憶,一探Unix的起源,試圖解釋什么是Unix,Unix是如何產(chǎn)生的,以及Unix為何如此重要。除此之外,本書(shū)以輕松的口吻講述了一群在貝爾實(shí)驗(yàn)室工作的發(fā)明天才的有趣往事,本書(shū)中每一個(gè)故事都是鮮為人知卻又值得傳播的寶貴資源。
本書(shū)適合對(duì)計(jì)算機(jī)或相關(guān) 歷史 感興趣的人閱讀。讀者不需要有太多的專(zhuān)業(yè)技術(shù)背景,就可以欣賞Unix背后的思想,了解它的重要性。
[印] 拉胡爾·沙瑪(Rahul Sharma)[芬]韋薩·凱拉維塔 著,鄧世超 譯
Rust系統(tǒng)編程指南自學(xué)教程書(shū)籍,學(xué)習(xí)Rust編程語(yǔ)言基礎(chǔ),掌握更高端的編程范式,成就高段位的編程極客。
本書(shū)內(nèi)容共17章,由淺入深地講解Rust相關(guān)的知識(shí),涉及基礎(chǔ)語(yǔ)法、軟件包管理器、測(cè)試工具、類(lèi)型系統(tǒng)、內(nèi)存管理、異常處理、高級(jí)類(lèi)型、并發(fā)模型、宏、外部函數(shù)接口、網(wǎng)絡(luò)編程、HTTP、數(shù)據(jù)庫(kù)、WebAssembly、GTK+框架和GDB調(diào)試等重要知識(shí)點(diǎn)。
本書(shū)適合想學(xué)習(xí)Rust編程的讀者閱讀,希望讀者能夠?qū)、C++或者Python有一些了解。書(shū)中豐富的代碼示例和詳細(xì)的講解能夠幫助讀者快速上手,高效率掌握Rust編程。
四、數(shù)據(jù)結(jié)構(gòu)廣義表的問(wèn)題
第一章 數(shù)據(jù)結(jié)構(gòu)基本概念
1、基本概念:理解什么是數(shù)據(jù)、數(shù)據(jù)對(duì)象、數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)、邏輯結(jié)構(gòu)與物理結(jié)構(gòu)間的關(guān)系。
2、面向?qū)ο蟾拍睿豪斫馐裁词菙?shù)據(jù)類(lèi)型、抽象數(shù)據(jù)類(lèi)型、數(shù)據(jù)抽象和信息隱蔽原則。了解什么是面向?qū)ο?。由于目前關(guān)于這個(gè)問(wèn)題有許多說(shuō)法,我們采用了一種最流行的說(shuō)法,即Coad與Yourdon 給出的定義:面向?qū)ο?= 對(duì)象 + 類(lèi) + 繼承 + 通信。
要點(diǎn):
·抽象數(shù)據(jù)類(lèi)型的封裝性
·面向?qū)ο笙到y(tǒng)結(jié)構(gòu)的穩(wěn)定性
·面向?qū)ο蠓椒ㄖ埸c(diǎn)在于應(yīng)用問(wèn)題所涉及的對(duì)象
3、數(shù)據(jù)結(jié)構(gòu)的抽象層次:理解用對(duì)象類(lèi)表示的各種數(shù)據(jù)結(jié)構(gòu)
4、算法與算法分析:理解算法的定義、算法的特性、算法的時(shí)間代價(jià)、算法的空間代價(jià)。
要點(diǎn):·算法與程序的不同之處需要從算法的特性來(lái)解釋
·算法的正確性是最主要的要求
·算法的可讀性是必須考慮的
·程序的程序步數(shù)的計(jì)算與算法的事前估計(jì)
·程序的時(shí)間代價(jià)是指算法的漸進(jìn)時(shí)間復(fù)雜性度量
第二章 數(shù)組
1、作為抽象數(shù)據(jù)類(lèi)型的數(shù)組:數(shù)組的定義、數(shù)組的按行順序存儲(chǔ)與按列順序存儲(chǔ)
要點(diǎn):
·數(shù)組元素的存放地址計(jì)算
2、順序表:順序表的定義、搜索、插入與刪除
要點(diǎn):
·順序表搜索算法、平均比較次數(shù)的計(jì)算
·插入與刪除算法、平均移動(dòng)次數(shù)的計(jì)算
3、多項(xiàng)式:多項(xiàng)式的定義
4、字符串:字符串的定義及其操作的實(shí)現(xiàn)
要點(diǎn):
·串重載操作的定義與實(shí)現(xiàn)
第三章 鏈接表
1、單鏈表:?jiǎn)捂湵矶x、相應(yīng)操作的實(shí)現(xiàn)、單鏈表的游標(biāo)類(lèi)。
要點(diǎn):
·單鏈表的兩種定義方式(復(fù)合方式與嵌套方式)
·單鏈表的搜索算法與插入、刪除算法
·單鏈表的遞歸與迭代算法
2、循環(huán)鏈表:?jiǎn)捂湵砼c循環(huán)鏈表的異同
3、雙向鏈表:雙向鏈表的搜索、插入與刪除算法、鏈表帶表頭結(jié)點(diǎn)的優(yōu)點(diǎn)
4、多項(xiàng)式的鏈接表示
第四章 棧與隊(duì)列
1、棧:棧的特性、棧的基本運(yùn)算
要點(diǎn):
·棧的數(shù)組實(shí)現(xiàn)、棧的鏈表實(shí)現(xiàn)
·棧滿(mǎn)及??諚l件、抽象數(shù)據(jù)類(lèi)型中的先決條件與后置條件
2、棧的應(yīng)用:用后綴表示計(jì)算表達(dá)式,中綴表示改后綴表示
3、隊(duì)列:隊(duì)列的特性、隊(duì)列的基本運(yùn)算
要點(diǎn):
·隊(duì)列的數(shù)組實(shí)現(xiàn):循環(huán)隊(duì)列中隊(duì)頭與隊(duì)尾指針的表示,隊(duì)滿(mǎn)及隊(duì)空條件
·隊(duì)列的鏈表實(shí)現(xiàn):鏈?zhǔn)疥?duì)列中的隊(duì)頭與隊(duì)尾指針的表示、
4、雙向隊(duì)列:雙向隊(duì)列的插入與刪除算法
5、優(yōu)先級(jí)隊(duì)列:優(yōu)先級(jí)隊(duì)列的插入與刪除算法
第五章 遞歸與廣義表
1、遞歸:遞歸的定義、遞歸的數(shù)據(jù)結(jié)構(gòu)、遞歸問(wèn)題用遞歸過(guò)程求解
要點(diǎn):·鏈表是遞歸的數(shù)據(jù)結(jié)構(gòu),可用遞歸過(guò)程求解有關(guān)鏈表的問(wèn)題
2、遞歸實(shí)現(xiàn)時(shí)棧的應(yīng)用
要點(diǎn):·遞歸的分層(樹(shù)形)表示:遞歸樹(shù)
·遞歸深度(遞歸樹(shù)的深度)與遞歸工作棧的關(guān)系
·單向遞歸與尾遞歸的迭代實(shí)現(xiàn)
3、廣義表:廣義表定義、廣義表長(zhǎng)度、廣義表深度、廣義表表頭、廣義表表尾
要點(diǎn):
·用圖形表示廣義表的存儲(chǔ)結(jié)構(gòu)
·廣義表的遞歸算法
第六章 樹(shù)與森林
1、樹(shù):樹(shù)的定義、樹(shù)的基本運(yùn)算
要點(diǎn):
·樹(shù)的分層定義是遞歸的
·樹(shù)中結(jié)點(diǎn)個(gè)數(shù)與高度的關(guān)系
2、二叉樹(shù):二叉樹(shù)定義、二叉樹(shù)的基本運(yùn)算
要點(diǎn):
·二叉樹(shù)性質(zhì)、二叉樹(shù)中結(jié)點(diǎn)個(gè)數(shù)與高度的關(guān)系、不同種類(lèi)的二叉樹(shù)棵數(shù)
·完全二叉樹(shù)的順序存儲(chǔ)、完全二叉樹(shù)的雙親、子女和兄弟的位置
·二叉樹(shù)的前序·中序·后序·層次遍歷
·前序
·中序
·后序的線索化二叉樹(shù)、前驅(qū)與后繼的查找方法
3、霍夫曼樹(shù):霍夫曼樹(shù)的構(gòu)造方法、霍夫曼編碼、帶權(quán)路徑長(zhǎng)度的計(jì)算
4、樹(shù)的存儲(chǔ):樹(shù)的廣義表表示、樹(shù)的雙親表示、樹(shù)與二叉樹(shù)的對(duì)應(yīng)關(guān)系、樹(shù)的先根·中根·后根·層次遍歷。
5、堆:堆的定義、堆的插入與刪除算法
要點(diǎn):
·形成堆時(shí)用到的向下調(diào)整算法及形成堆時(shí)比較次數(shù)的上界估計(jì)
·堆插入時(shí)用到的向上調(diào)整算法
第七章 集合與搜索
1、集合的概念:集合的基本運(yùn)算、集合的存儲(chǔ)表示
要點(diǎn):
·用位數(shù)組表示集合時(shí)集合基本運(yùn)算的實(shí)現(xiàn)
·用有序鏈表表示集合時(shí)集合基本運(yùn)算的實(shí)現(xiàn)
2、并查集:并查集定義、并查集的三種基本運(yùn)算的實(shí)現(xiàn)
3、基本搜索方法
要點(diǎn):
·對(duì)一般表的順序搜索算法(包括有監(jiān)視哨和沒(méi)有監(jiān)視哨)
·對(duì)有序順序表的順序搜索算法、用判定樹(shù)(即擴(kuò)充二叉搜索樹(shù))描述搜索,以及平均搜索長(zhǎng)度(成功與不成功)的計(jì)算。
·對(duì)有序順序表的折半搜索算法、用判定樹(shù)(即擴(kuò)充二叉搜索樹(shù))描述搜索,以及平均搜索長(zhǎng)度(成功與不成功)的計(jì)算。
4、二叉搜索樹(shù):
要點(diǎn):
·動(dòng)態(tài)搜索樹(shù)與靜態(tài)搜索樹(shù)的特性
·二叉搜索樹(shù)的定義、二叉搜索樹(shù)上的搜索算法、二叉搜索樹(shù)搜索時(shí)的平均搜索長(zhǎng)度(成功與不成功)的計(jì)算。
·AVL樹(shù)結(jié)點(diǎn)上的平衡因子、AVL樹(shù)的平衡旋轉(zhuǎn)方法
·高度為h的AVL樹(shù)上的最少結(jié)點(diǎn)個(gè)數(shù)與最多結(jié)點(diǎn)個(gè)數(shù)
· AVL樹(shù)的搜索方法、插入與刪除方法
第八章 圖
1、圖:圖的定義與圖的存儲(chǔ)表示
要點(diǎn):
·鄰接矩陣表示(通常是稀疏矩陣)
·鄰接表與逆鄰接表表示
·鄰接多重表(十字鏈表)表示
2、深度優(yōu)先遍歷與廣度優(yōu)先遍歷
要點(diǎn):
·生成樹(shù)與生成樹(shù)林的定義
·深度優(yōu)先搜索是個(gè)遞歸的過(guò)程,而廣度優(yōu)先搜索是個(gè)非遞歸的過(guò)程
·為防止重復(fù)訪問(wèn)已經(jīng)訪問(wèn)過(guò)的頂點(diǎn),需要設(shè)置一個(gè)訪問(wèn)標(biāo)志數(shù)組visited
3、圖的連通性
要點(diǎn):
·深度優(yōu)先搜索可以遍歷一個(gè)連通分量上的所有頂點(diǎn)
·對(duì)非連通圖進(jìn)行遍歷,可以建立一個(gè)生成森林
·對(duì)強(qiáng)連通圖進(jìn)行遍歷,可能建立一個(gè)生成森林
·關(guān)節(jié)點(diǎn)的計(jì)算和以最少的邊構(gòu)成重連通圖
4、最小生成樹(shù)
要點(diǎn):
·對(duì)于連通網(wǎng)絡(luò)、可用不會(huì)構(gòu)成環(huán)路的權(quán)值最小的n-1條邊構(gòu)成最小生成樹(shù)
·會(huì)畫(huà)出用Kruskal算法及Prim算法構(gòu)造最小生成樹(shù)的過(guò)程
5、單源最短路徑
要點(diǎn):
·采用逐步求解的方式求某一頂點(diǎn)到其他頂點(diǎn)的最短路徑
·要求每條邊的權(quán)值必須大于零
6、活動(dòng)網(wǎng)絡(luò)
要點(diǎn):
·拓?fù)渑判?、關(guān)鍵路徑、關(guān)鍵活動(dòng)、AOE網(wǎng)
·拓?fù)渑判驅(qū)⒁粋€(gè)偏序圖轉(zhuǎn)化為一個(gè)全序圖。
·為實(shí)現(xiàn)拓?fù)渑判?,要建立一個(gè)棧,將所有入度為零的頂點(diǎn)進(jìn)棧
·關(guān)鍵路徑的計(jì)算
第九章 排序
1、基本概念:關(guān)鍵碼、初始關(guān)鍵碼排列、關(guān)鍵碼比較次數(shù)、數(shù)據(jù)移動(dòng)次數(shù)、穩(wěn)定性、附加存儲(chǔ)、內(nèi)部排序、外部排序
2、插入排序:
要點(diǎn):
·當(dāng)待排序的關(guān)鍵碼序列已經(jīng)基本有序時(shí),用直接插入排序最快
3、選擇排序:
要點(diǎn):
·用直接選擇排序在一個(gè)待排序區(qū)間中選出最小的數(shù)據(jù)時(shí),與區(qū)間第一個(gè)數(shù)據(jù)對(duì)調(diào),而不是順次后移。這導(dǎo)致方法不穩(wěn)定。
·當(dāng)在n個(gè)數(shù)據(jù)(n很大)中選出最小的5 ~ 8個(gè)數(shù)據(jù)時(shí),錦標(biāo)賽排序最快
·錦標(biāo)賽排序的算法中將待排序的數(shù)據(jù)個(gè)數(shù)n補(bǔ)足到2的k次冪2k-1<n≤2k
·在堆排序中將待排序的數(shù)據(jù)組織成完全二叉樹(shù)的順序存儲(chǔ)。
4、交換排序:
要點(diǎn):
·快速排序是一個(gè)遞歸的排序方法
·當(dāng)待排序關(guān)鍵碼序列已經(jīng)基本有序時(shí),快速排序顯著變慢。
5、二路歸并排序:
要點(diǎn):
·歸并排序可以遞歸執(zhí)行
·歸并排序需要較多的附加存儲(chǔ)。可以采用一種"推拉法"(參見(jiàn)教科書(shū)上習(xí)題)實(shí)現(xiàn)歸并排序,算法的時(shí)間復(fù)雜度為O (n)、空間復(fù)雜度為O(1)
·歸并排序?qū)Υ判蜿P(guān)鍵碼的初始排列不敏感,排序速度較穩(wěn)定
6、外排序
要點(diǎn):
·多路平衡歸并排序的過(guò)程、I/O緩沖區(qū)個(gè)數(shù)的配置
·外排序的時(shí)間分析、利用敗者樹(shù)進(jìn)行多路平衡歸并
·利用置換選擇方法生成不等長(zhǎng)的初始?xì)w并段
·最佳歸并樹(shù)的構(gòu)造及WPL的計(jì)算
第十章 索引與散列
1、線性索引:
要點(diǎn):
·密集索引、稀疏索引、索引表計(jì)算
·基于屬性查找建立倒排索引、單元式倒排表
2、動(dòng)態(tài)搜索樹(shù)
要點(diǎn):
·平衡的m路搜索樹(shù)的定義、搜索算法
·B樹(shù)的定義、B樹(shù)與平衡的m路搜索樹(shù)的關(guān)系
·B樹(shù)的插入(包括結(jié)點(diǎn)分裂)、刪除(包括結(jié)點(diǎn)調(diào)整與合并)方法
·B樹(shù)中結(jié)點(diǎn)個(gè)數(shù)與高度的關(guān)系
·B+樹(shù)的定義、搜索、插入與刪除的方法
3、散列表
要點(diǎn):
·散列函數(shù)的比較
·裝填因子 a 與平均搜索長(zhǎng)度的關(guān)系,平均搜索長(zhǎng)度與表長(zhǎng)m及表中已有數(shù)據(jù)對(duì)象個(gè)數(shù)n的關(guān)系
·解決地址沖突的(閉散列)線性探查法的運(yùn)用,平均探查次數(shù)的計(jì)算
·線性探查法的刪除問(wèn)題、散列表類(lèi)的設(shè)計(jì)中必須為各地址設(shè)置三個(gè)狀態(tài)
·線性探查法中的聚集問(wèn)題
·解決地址沖突的(閉散列)雙散列法的運(yùn)用,平均探查次數(shù)的計(jì)算
·雙散列法中再散列函數(shù)的設(shè)計(jì)要求與表長(zhǎng)m互質(zhì),為此m設(shè)計(jì)為質(zhì)數(shù)較宜
·解決地址沖突的(閉散列)二次散列法的運(yùn)用,平均探查次數(shù)的計(jì)算
·注意:二次散列法中裝填因子 a 與表長(zhǎng)m的設(shè)置
·解決地址沖突的(開(kāi)散列)鏈地址法的運(yùn)用,平均探查次數(shù)的計(jì)算
我們?cè)瓉?lái)也學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu),個(gè)人覺(jué)得數(shù)組,棧與隊(duì)列 ,遞歸與廣義表,樹(shù)與
森林(尤其是二叉樹(shù)),圖 ,排序這些比較重要,應(yīng)該好好看
以上就是關(guān)于深度哈希算法相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
視頻號(hào)1000推薦機(jī)制(視頻號(hào)推薦機(jī)制深度解讀)
快手網(wǎng)紅的小視頻(快手網(wǎng)紅的小視頻在哪里找)
青島別墅景觀設(shè)計(jì)資質(zhì)證書(shū)(青島別墅景觀設(shè)計(jì)資質(zhì)證書(shū)有哪些)