計算機病毒判定專家系統原理與設計《文字提取人工修正》

內容源于網絡。網絡上流轉的版本實在是不易閱讀, 又不忍神作被糟蹋故稍作整理,對于內容仍然有識別不準的地方,網友可留言,我跟進修改。

????????????????????????????????????????? ?? ?雷 ???????? 軍

??? ??????????????????????????? ????(武漢大學計算機系,430072)

摘要:

????????本文詳細地描述了計軒機病毒判定專家余統的原理與具體設計方法,一定程度上解決了流行病毒的判定問題。該系統主要利用專家們研究計算機病毒所得的如識和經驗構造而成的規則庫以及已知病毒的檔案庫,運用正向不訪確的推理機制,來鑒別某一程序是否染毒。該系統不僅克服了傳統的檢測技術誤檢測率高的缺點,而且適合于鑒別病毒變種,對判定將來出現的病毒也有一定作用。

關鍵字:

????????人工智能, 專家系統, 計算機安全, 計算機病毒。

一、引言

????????目前, 人們對計算機病毒的認識極不一致。在很多情況下,只是根據某種具體病毒的特點、特性來討論病毒。要澄清病毒的實質,分析病毒的檢測與免疫,就必須從具體的病毒中解脫出來。有關文獻上關于病毒的定義很多,較為準確的如下:

????????算機病毒是隱蔽在計算機系統的數據資源中,利用系統數據資源進行繁殖并生存,能影響計算機系統正常運行的并通過系統數據共享的途徑進行傳染的程序。計算機病毒已包含了生物病毒的特點,即病毒的傳染性、潛伏性、針對性和破壞性。病毒的分類方式很多,為了敘述方便,本文主要采用按傳染方式分類。這種方式分類,主要有兩種情況:

????????(1)傳染磁盤引導區(BOOT)的計算機病毒。磁盤主要有軟盤和硬盤,軟盤只是一個BOOT區,硬盤上分主BOOT區和分區BOOT區;

????????(2)傳染可執行文件(FILE)的計算機病毒。文件主要是指可運行的程序代碼,如以.COM和,EXE為后綴的文件。

????????我國用戶主要使用的是IBM PC及其兼容機,而感染這種機型的病毒種類占總數的90%以上,所以本文選擇IBM PC機作代表,來討論計算機病毒。傳統的病毒檢測方法主要是在程序中尋找已發現病毒的特征串,如找到,則認為該程序染毒,否則,認為該程序是干凈的。目前,這種方法也是最常用的。

????????病毒的特征串是病毒標本中一段有代表性的程序代碼或數據。如果某個程序含有這個串,一般來說是染上了這種病毒,但也有可能是該程序自身也有類似的代碼。這樣,這個不帶病毒的程序很容易被判斷為染病毒(我們稱這種情況叫誤檢測)。傳統的檢測方法不但誤檢測情況多,而且對于病毒的變種無能為力。如把病毒某處兩條無相關性的指令前后換一下,這樣不影響病毒的工作,但特征串就發生了變化,使用原來特征串的檢測程序就再也檢測不到這種病毒。僅根據無相關性指令倒置的方法去修改某個病毒,這個病毒將會有成千上萬種變種,傳統的檢測方法將無法解決。傳統的檢測程序有著嚴重的不足,越來越適應不了當前形勢的需要,于是我們就提出了一種智能性的檢測方法。

二、病毒判定專家系統的基本原理

1. 病毒不可判定原理

????????馮·諾依曼提出了存儲程序的概念(stored program concept),即將程序全部存放在存儲器中,可在存儲器中修改,也可和參與運算的數據一起存儲。當今世界上的各種計算機幾乎都是根據這一原理而開發研究出來的。病毒要進行傳染、破壞,就必須掌握控制權,達到這一目的的唯一途徑是修改載體的可執行代碼。可見,病毒只有在馮·諾依曼體系的計算機中才能生存。也就是說,病毒是馮·諾依曼體系計算機的必然產物,并且只有廢除馮·諾依曼體系,病毒才徹底消除。從體系結構上我們已經認識到病毒的不可判定性。同時,Fred Cohn博士在理論上也證明了這一點。但是,在特定的機器上,運行特定的操作系統,絕大部分流行的計算機病毒都是可以判定的。對于某個具體的病毒來說,隨著時間的推移,遲早會被人們發現。在病毒對世界計算機應用產生深遠危害之時,盡早地研究一套近似判定的方法也是非常重要的。

2. 智能判定原理

????????病毒是可以認識的,因為不管怎么說,病毒總是一段程序代碼,專家們對它進行詳細分析,總能判斷這段代碼是不是具有傳染性。傳染性是病毒最主要的特征,也是決定性特征。判定某個程序是否是病毒,僅需判定它是否具有傳染性。用程序的方法對病毒進行精確判定是不可能的,但是我們可以利用專家們的知識、經驗完成一套專家系統,模擬專家工作,對特定的病毒種類進行判定。這套專家系統所使用的就是我們研制的一套智能判定方法。

????????智能判定就是用專家們的知識、經驗構成一個規則庫,在計算機里虛擬一個環境對某軟件進行安全測試,模擬運行每條指令,并監控運行結果,如有違反規則的操作,則記錄下來。運行完畢后,再一起分析推理,最后根據推理結論,判定該軟件是否帶毒。推理過程由專家系統完成,采用了正向不精確推理機。

?

在實踐中,人們經常使用的一些不精確的或不完善的資料進行工作,專家系統是模擬專家們的工作,所以在專家系統中,采用不精確推理,幾乎是難于避免的。病毒判定專家系統主要采用的是MYCIN的不精確推理。由于這個問題不是判定的關鍵問題,這里就不詳細討論了。

????????智能判定要求系統在實際使用過程中,不斷豐宮,完善自己。如發現新病毒,要自動記錄到檔案,以后遇到類似問題可以直接判定。在運用過程中,根據實際情況,可以修改規則的權值, 補充新規則。

三、病毒判定專家系統的設計方法

????????病毒主要分BOOT類病毒和FILE類病毒兩類,機理大致相同,但具體實現方法不同,BOOT類病毒相對面言要簡單一些,下面我們以BOOT類病毒為例,具體談一下這套專家系統的實現方法。軟盤,硬盤,硬盤比軟盤多一個主引導區,硬盤上的分區引導塊 BOOT類病毒是指替換磁盤上的引導塊,在DOS啟動時獲取控制權的一類病毒。磁盤包括與軟盤上的引導塊大致相同。硬盤主引導塊主要功能是判斷活動分區,并把活動分區的引導塊讀入內存。分區引導塊先判斷磁盤上是否存在系統文件,若存在則加載DOS內核IBMBIO.COM(PC DOS系統文件)或IO.SYS(MS DOS系統文件)。

????????BOOT(自舉)是DOS啟動的第一步,至關重要,但又比較脆弱,易受攻擊。每個BOOT區雖只有512個字節,但切不可忽視。BOOT中有許多提示信息,一般情況下用Debug調出查看一下,即可判斷,但這種方法并不保險。一方面很多軟件,特別是游戲,都是自啟動的,即具有自己的BOOT程序;另一方面有的病毒很隱蔽,僅占有原有的BOOT的幾十個字節,簡單的查看是無法鑒別的。另外,DOS的版本繁多,也是一個重要原因。圖2是硬盤自舉流程。

?

????????智能判定主要步驟為,首先判定未知的BOOT是否是某個版本的DOS引導塊和已知軟件的引導塊,若是,顯然不是病毒,否則到已知病毒的檔案庫中查尋,若找到,顯然是病毒,若未找到, 則在一個虛擬環境中運行這個未知BOOT,進行安全檢查,判斷是否違反規則,若有嚴重違規行為,即判定為病毒。智能判定必須先準備三個庫:合法BOOT庫、非法BOOT庫(即病毒檔案庫)和規則庫。首先窮舉BOOT,構造合法BOOT庫和非法BOOT庫。合法BOOT庫里主要是各種操作系統的引導區以及現有的流行軟件及游戲的引導區。再運行匹配法則,在這兩個庫中搜索是否有與未知BOOT類似的 BOOT。

?

在匹配過程中不能采用完全的一對一的比較。這主要是因為磁盤的種類很多,如360KB、1.2MB的軟盤,20M、40M的硬盤等,這樣每一種盤上的BOOT中關于磁盤和數據都不同。不同廠商提供的系統盤標識符不同,如IBM提供的DOS盤標識為“IBM 3.3”,Microsoft公司提供的DOS盤標識為“MS 3.3”,這些BOOT表面上不一致,而實質是相同的。如果采用完全匹配,那么必須采集一個BOOT在不同情況下的具體數據,這樣,不但增加了數據冗余度,減慢了匹配的效率,而且易于出錯。為了克服這些缺點,我們給出一種模糊匹配法。

模糊匹配的主要思想是僅比較兩個BOOT之間的代碼部分,而且只要相同率達到95%以上,即認為相同。這樣,允許用戶對BOOT稍作修改。代碼部分的5%至多有十幾個字節,不可能對系統構成威脅。

[算法]

1. 根據第一條JMP語句,找到第二條指令開始地址,如果第二條指令仍是JMP語句,就繼

續查找,直到連續幾條指令都是非JMP語句為止。然后再搜索提示信息的 開始地址,即代碼結束地址,得到代碼長度;

2. 把未知BOOT的代碼區與庫中一個已知BOOT比較,得到相同字節數;

3. 計算相同率:

?

若相同率大于95%,則退出。

4. 若庫為空,退出,提示未確診;否則,取下一個BOOT,轉到2繼續執行。

采用“模糊匹配”算法,對一個正常BOOT加上一些特定的免疫標記的系統 都可得到確診的信息。例如,有的用戶為了免疫小球病毒,把自己盤上的BOOT扇區的[IFC]處改為1357。在模糊匹配中,這些地方根本沒有比較,所以不會引起誤差。再舉一例,《計算機病毒概論>提 供的大麻免疫方法如下:

先讀出主引導區,放在200處。

?

?

?

????????2.修改內存大小字節,向高端傳送,達到高端駐留日的;

????????3. 讀入原BOOT 到 0000:7 C00:

????????4. 判尚時間標志;

????????5. 跳轉到 0000:7 C00處執行真正的BOOT。

????????系統病毒的主要特點是通過戰獲中斷向量,來取得控制權,要想接管中斷,就必須駐留在內存中。一般程序駐留方法有兩種,一種駐留在內存地址低的地方,也稱低端駐留,主要通過調用DOS中斷完成;另一種是通過修改內存控制塊,把自身放在內存地址高的地方,來進行高端駐留。這兩種方法都是在DOS裝配完畢后進行的。BOOT類病毒進入內存時,DOS還未裝人,DOS主要使用低端,所以為了避免沖突,BOOT類病毒只能使用高端。采用的方法是修改內存大小單元[40:13],將該值減小,使DOS誤認為內存只有那么大,不去覆蓋病毒體。接管敏感性中斷,如INT 13,INT 8,和高端駐留是病毒最重要的特征,任何BOOT類病毒都必須完成這一點。于是,我們總結出一個原則:

【原則?1】在DOS自舉過程中,任何企圖接管敏感性中斷和高端駐留的請求都是不允的。

????????對原則1進行詳細分析,結合典型病毒實例理解,可以把它具體化。接管中斷必須讀寫中斷向量表。高端駐留分兩步,首先是修改[0000:0413]單元的內容,再進行一次向高端的傳送。在自舉過程中,不允許讀寫[0000:0413]的內容。當出現 MOVSB,MOVSW,LODSB,LODSW,STOSB, STOSW 時要尤其注意DS的值,是否指向內存地址高端,以便準確地成獲向高端的傳送。

????????根據前面介紹的硬盤BOOT區執行的簡要流程,我們可以知道硬盤主引導區需要進行一次,向低端的傳送和一次讀盤(讀入分區引導記錄), 分區引導記錄需要讀兩次盤(一次讀目錄扇第一扇,第二次讀IBMBIO.COM,即數據區第一扇開始的連續簇), 復位一次磁盤機,共使用了三次INT 13H。有的軟件如PC Tools格式化的系統盤的BOOT中只有兩處INT 13H,這是因為兩次讀數據使用了同一處的INT 13H。還有可能其它的 BOOT 中有多于三處的 INT 13H。但有一點是明確的, BOOT 中絕對沒有寫盤操作,而且讀出來的數據只能是分區引導記錄、根目錄區第一扇和 IBMBIO.COM, 不可能是其它數據。這樣,我們得到了第二條原則。

【原則 2】磁盤引導扇中絕對不能出現寫盤指令;自舉過程中只允許讀出自舉過程需要的數據。

????????在這里,還有一點需要說明,在有些自舉的游戲中,需要讀入其它數據。這與原則2不矛盾。原則2主要討論的是DOS格式。非 DOS 格式原則2的第二句不適用。在BOOT區運行過程中, 從未取過或置過系統日期時間,更沒有對時間進行判斷。病毒具有潛伏性和可激活性,激活條件多都是采用時間的, 因此應謹防這類操作。還有的觸發條件是隨機數, 這也是要引起大家注意的。

【原則3】BOOT中判別時間和產生隨機數進行判斷, 都是可疑的。

????????在模擬運行中,違背可疑性原則,將出現警告信息。病毒最后都是裝入真正的BOOT區,再把控制權移交過去。而真正的 BOOT 總是存放在 0000:7C00 處, 最后把控制權移交給存放在70:0處的IBMBIO.COM。

【原則 4】要密切注意最后控制權的移交。

????????違反原則4將會出警告信息。對目前發現的所有BOOT類的病毒而言,它們都不可避免地同時違背了這四個原則。在將來出現的病毒中,它們有可能符合某些規則,但它們將不可避免地違背大部分原則。如某病毒不保存原來的 BOOT 區,自己完成 BOOT 功能, 這樣它就不會違背原則2, 但它肯定違背原則1。

? ? ? ? 這四條原則是針對BOOT類病毒的特點,經過反復論證得到的。在將來與病毒的對抗中, 還將不斷豐富、完善,顯示更大的威力。由這些原則即可構成所需的規則庫。由于規則庫很復雜,僅列出由原則1總結的規則供大家參考。

????????規則 01: 前提:(讀取井修改[0000:4CJ內存單元的內容)

????????????????結論,(接管敏感性中斷)

????????規則 02: 前提:(讀取并修改[0000:0020]內存單元的內容)

????????????????培論,(接管敏感性中斷)

????????規則 03: 前提:(讀取并修改[0000:0418]的內容)

????????????????結論,(分配內存)

????????規則04: 前提:(申傳送指令,且日標中位于內存地址高端)

????????????????結論:(向高端傳送)

????????規則 05: 前提:((分配內存)《向高端傳送))

????????????????結論:(高端駐留)

????????規則 06: 前提:(接蓉故莖性中斷) (?)

????????????????結論:(有可能是薪市)

? ? ? ? 規則07: 前提:(高端駐定)

????????????????結論: (有可能是病福)

?

????????Turbo Debugger 這類高級跟蹤中都有自動跟蹤功能,但達只是這類機制的雛形, 這套機制的關鍵在于虛環境。關于這套機制的具體實現就不多說了。模擬運行中判別違規的過程主要由推理機完成。利用現行的專家系統工具可以自動完成推理過程,得出結論。由于BOOT類病毒判斷規則不超過一百條,可以考慮重寫推理機。一旦得出結論,未知BOOT為病毒,智能判斷系統就會把它記錄在非法BOOT檔案中,否則記錄在合法BOOT庫中, 以后遇到類似的BOOT, 便可馬上確診。這樣病毒判定專家系統就可以在實際使用過程中不斷豐富完善自己。

? ? ? ? 這套專家系統也可用在檢測FILE類病毒上,但這樣規則庫要復雜得多,而且可靠性要差一些。買使智能判定能判斷FILE類病毒,就必須進一步對文件類病毒進行分類,保存各種病毒的“指紋”,即特征串和常用程序段,同時歸納出各種原則。如判別文件類病毒可使用這樣一條原則: 在程序開始運行不久安裝INT 21H中斷向量, 并旁路4BH功能調用, 最后還駐留內存, 可以懷疑為TSR病毒。

四、新的病毒模型及判定策略

????????我們把病毒分為兩類,FILE類和BOOT類,有沒有可能出現兩者結合的產物呢? BOOT 區已被密切注視了,但自舉過程中是否還存在薄弱環節呢?我們發現 BOOT 區執行后調入 IBMBIO.COM 執行是一個薄弱環節。以后的COMMAND.COM是人們注意的焦點, DOS加教完畢后,又有很多防御程序保護系統不受感染,所以,這些都不是薄弱環節,只有 IBMBIO,COM 及 IBMDOS.COM 不引人注目。我們設想了一個模型,把一個典型的BOOT類病毒放在IBMBIO.COM的第1扇中, 而不是BOOT中。

????????那么這個病毒具備與BOOT類完全一樣的特點和機理,但它沾染在文件上。這種病毒是極容易完成的,我們之所以公開這種設想,是想引起各位同行、專家的重視。對付這種病毒,智能判定專家系統的判定策略是收集了各個版本的系統文件進行校驗的。由于自舉環節一直是DOS的薄弱環節,要想做到完全彌補,可以使用DOS卡的方法。把所有的系統文件都固化在ROM中, 做成一塊DOS卡,就不用擔心系統文件被修改, BOOT 類病毒以及沾染 COMMAND.COM 及其它系統文件的病毒也就絕跡了。這也是對馮·諾依曼體系的計算機的一點改進,即操作系統固化。據 『計算機世界』?消息, Microsoft公司的DOS 6.0版本將放在一張硬卡中,這將有助于加強系統的安全性。

五、結束語

????????研制解決流行病毒的判定問題的專家系統,在目前具有相當大的實用價值。本文介紹的這種智能判定方法大大優于傳統的檢測方法,具有準確率高,適用性廣的優點,還可以不斷發展和擴充。關于這種方法,目前國內外文獻上尚未提及。(參考文獻略)

Theory and Experiments of Detection

Expert System of Computer Viruses

Lei Jun

Wuhan Unieeraity. 430072

Abstraet: This paper diseribes the theory and experiments about Detection Expert Syctem of Computer Viruses (VDES) and solves the problem of determining a pepular virus in some degree. In orderto determine that a given program has been infected by viruses, VDES is based on the rule set formed by knowledge and experience of experts and a forward inexact inference method is used VDES notonly overcomes shortcomings of past checking techniques, such as inexactitude in some care, but alsocan determine a virus variety, in other words, VDES can determine viruses appearing in the future.

Keywords: artificial intelligence, expert system, computer security, computer viruses.

?

快科技

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214926.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214926.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214926.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust的未來發展趨勢和行業應用

大家好!我是lincyang。 今天,我們來深入探討Rust的未來發展趨勢以及它在各個行業中的應用情況。 自從Rust語言問世以來,它以其獨特的安全性和高效性在編程界引起了廣泛關注。Rust的設計理念主要集中在安全、速度和并發三個方面,…

【數值計算方法(黃明游)】數值積分(一):復化(梯形公式、中點公式)【理論到程序】

? 文章目錄 一、梯形公式、中點公式1. 梯形公式(Trapezoidal Rule):2. 復化梯形公式(Composite Trapezoidal Rule):3. 中點公式(Midpoint Rule):4. 復化中點公式&#…

算法通關村第十五關 | 黃金 | 超大規模數據場景

1.對 20GB 文件進行排序 有一個 20GB 的文件,每行一個字符串,對其進行排序。 這里可以使用分塊方式來排序,先將每塊進行排序,然后要逐步進行合并,也叫做外部排序。 2.超大文本中搜索兩個單詞的最短距離 有一個超大…

【UML】NO.2 UML必須了解的基礎知識(舉例)

目錄 一、UML的構成 1.1 事物 1.2 關系 1.3 圖 二、事物 2.1 結構事物 2.1.1 類(class) 2.1.2 接口 2.1.3 協作 2.1.4 用例 2.1.5 主動類 2.1.6 構件 2.1.7 節點 2.2 行為事物 2.2.1 交互 2.2.2 狀態機 2.2.3 活動 2.3 分組事物 包 …

Unittest單元測試框架

Unittest介紹、單元測試用例的組織、測試用例的執行、測試用例的跳過 Unittest介紹 為什么要學習單元測試框架 測試用例的組織與運行需要單元測試框架的參與,從而滿足不同測試場景的需要,單元測試框架提供了豐富的比較方法:實際結果與預期結…

Viewport Meta 標記:讓網頁適應各種設備的魔法符號

在我們用手機或平板電腦瀏覽網頁時,你是否曾發現有些網頁能夠很好地適應屏幕,而有些卻需要左右滑動才能完整顯示內容?這就涉及到一個神奇的東西——Viewport Meta 標記。 最近本人在研究自適應的各自實現方法,比如media媒體查詢、…

6個免費設計素材庫,設計師都在用,趕緊收藏!

設計師應該都知道,在設計過程中找素材真的很費時間,有的時候全網翻遍都未必能找到自己想要的,以至于現在很多設計師都花錢去購買素材,你說要是拿去參賽或者商用還好,就拿平常設計來說你舍得花這個錢去買嗎,…

ubuntu-base 20.04防火墻配置方法

ubuntu-base 20.04防火墻配置方法 在ubuntu-base 20.04 上配置防火墻可以使用 UFW(Uncomplicated Firewall)工具。以下是一些基本的防火墻配置命令: 1. 檢查防火墻狀態: sudo ufw status 2. 啟用防火墻: sudo ufw…

numpy.resize(修改數據維度)

numpy.resize 函數用于調整數組的大小。它接受一個數組和一個新的形狀作為參數,并返回具有新形狀的新數組。如果新數組的大小大于原始數組的大小,resize 將重復原始數組的元素以填充新數組。如果新數組的大小小于原始數組的大小,則 resize 將…

亞馬遜云科技Amazon Bedrock,現推出更多模型選擇和全新強大功能

亞馬遜云科技在re:Invent 2023上宣布推出Amazon Bedrock更多模型選擇和強大功能,幫助客戶更輕松地構建和規模化針對其業務定制的生成式AI應用程序。 Amazon Bedrock是一項全面托管的服務,用戶可輕松訪問來自AI21 Labs、Anthropic、Cohere、Meta、Stabili…

未能正確利用原型繼承(js的問題)

考慮下面代碼: BaseObject function(name) {if (typeof name ! "undefined") {this.name name;} else {this.name default} }; 上面代碼比較簡單,就是提供了一個名字,就使用它,否則返回 default: var firstObj n…

網頁設計的靈感從哪來?試試這15個靈感網站

設計靈感網站是許多設計師必備的工具,因為它們提供了一個創造性的源泉,可以幫助設計師找到靈感和靈感,從而開發出驚人的設計。 推薦15個設計靈感網站,涵蓋了平面設計、網頁設計、UI設計等不同領域的設計。 即時設計資源廣場 即…

shell學習帖子積累

.bashrc與.bash_profile區別_bashprofile和bashrc-CSDN博客 帖子2: $0 - 腳本名 $1 - 命令參數1 $# - 幾個參數 $ - 參數分別是什么 $$ - 當前腳本PID $USER - 用戶 $HOSTNAME - 主機名 $LINENO - 行號 $RANDOM - 隨機數 $? - 返回函數結果 實例: abc.s…

Linux系統vim,gcc,g++工具使用及環境配置,動靜態庫的概念及使用

Linux系統vim,gcc,g工具使用及環境配置,動靜態庫的概念及使用 1. Linux編輯器-vim的使用1.1 vim的基本概念1.2vim的基本操作1.3vim正常模式命令集1.4vim末端模式命令集1.5簡單的vim配置 2.Linux編譯器-gcc/g的使用2.1 準備階段2.2gcc的使用2.…

了解 git rebase

了解 git rebase 大多數人習慣使用 git merge 將更改從功能分支合并到主分支,但還有其他方法。我們是否曾經遇到過 git rebase 這個術語并想知道它是什么?或者我們可能聽說過 rebase 和 merge ,但不確定何時使用哪個?不用擔心&am…

企業架構LB-服務器的負載均衡之Haproxy實現

企業架構LB-服務器的負載均衡之HAProxy實現 學習目標和內容 1、能夠通過HAProxy實現負載均衡 ###1、介紹 Introduction HAProxy, which stands for High Availability Proxy, is a popular opensource software TCP/HTTP LoadBalancer and proxying solution which can be ru…

力扣111. 二叉樹的最小深度

給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明:葉子節點是指沒有子節點的節點。 示例 1: 輸入:root [3,9,20,null,null,15,7] 輸出:2 示例 2: 輸入…

最大子段和問題

題目&#xff1a; 分治法求解思路&#xff1a; 代碼&#xff1a; #include<iostream> using namespace std;int maxSum(int arr[], int left, int right) {int sum 0;if (left right){if (arr[left] > 0){return arr[left];}else{return 0;}}else{int center (l…

AWS攻略——子網

文章目錄 分配子網給Public子網分配互聯網網關創建互聯網網關附加到VPC 給Public子網創建路由表關聯子網 打通Public子網和互聯網網關 創建Public子網下的EC2進行測試配置Private子網路由給Private子網創建路由表附加在Private子網 創建Private子網下的EC2進行測試創建實例在跳…

Java / Scala - Trie 樹簡介與應用實現

目錄 一.引言 二.Tire 樹簡介 1.樹 Tree 2.二叉搜索樹 Binary Search Tree 3.字典樹 Trie Tree 3.1 基本概念 3.2 額外信息 3.3 結點實現 3.4 查找與存儲 三.Trie 樹應用 1.應用場景 2.Java / Scala 實現 2.1 Pom 依賴 2.2 關鍵詞匹配 四.總結 一.引言 Trie 樹…