【軟考中級 軟件設計師】數據結構

數據結構是計算機科學中一個基礎且重要的概念,它研究數據的存儲結構以及在此結構上執行的各種操作。在準備軟考中級-軟件設計師考試時,掌握好數據結構部分對于通過考試至關重要。下面是一些核心知識點概覽:

  1. 基本概念

    • 數據結構定義:它是相互之間存在一種或多種特定關系的數據元素的集合。
    • 數據元素(節點):數據的基本單位。
    • 數據對象:性質相同的數據元素的集合,如整數集合、學生信息集合等。
    • 抽象數據類型(ADT):一個數學模型及定義在其上的操作集。
  2. 基本數據結構類型

    • 線性結構:數據元素之間存在一對一的關系,如數組、鏈表、棧、隊列。
      • 數組:連續內存分配,隨機訪問速度快,但插入和刪除效率低。
      • 鏈表:不連續內存分配,插入和刪除效率較高,但訪問速度相對慢。
      • 棧:后進先出(LIFO)原則,主要操作有壓棧(push)、彈棧(pop)。
      • 隊列:先進先出(FIFO)原則,主要操作有入隊(enqueue)、出隊(dequeue)。
    • 非線性結構:數據元素之間的關系不是一對一,如樹、圖。
      • 樹:層次結構,包括二叉樹、平衡二叉樹(如AVL、紅黑樹)、B樹、B+樹等。
      • 圖:節點間可以有多條邊連接,分為有向圖和無向圖,常用于表示復雜關系。
  3. 算法與分析

    • 常見操作:搜索(如深度優先搜索DFS、廣度優先搜索BFS)、排序(快速排序、歸并排序、堆排序等)、遞歸等。
    • 時間復雜度和空間復雜度:評估算法效率的重要指標,常用大O表示法。
    • 穩定性:排序算法中保持相等元素原有順序的特性。
  4. 高級主題

    • 哈希表:通過哈希函數實現快速查找的數據結構,解決沖突的方法有開放地址法、鏈地址法等。
    • 字符串匹配算法:如KMP、Boyer-Moore等,用于高效查找字符串中模式出現的位置。
    • 空間優化技術:如動態規劃、貪心算法、回溯法等,解決優化問題和決策過程問題。
  5. 樹與圖的深入理解

    • 樹的遍歷:前序遍歷、中序遍歷、后序遍歷、層序遍歷。理解它們的應用場景,比如在表達式求值、構造語法樹中的應用。
    • 二叉搜索樹(BST):特點是左子樹所有節點小于根節點,右子樹所有節點大于根節點,適用于動態查找表。
    • 平衡樹:如AVL樹、紅黑樹,保證樹的高度平衡,提高查找效率。
    • B樹和B+樹:廣泛應用于數據庫和文件系統中,支持高效的范圍查詢和大量數據存儲。
    • 圖的遍歷:深度優先搜索(DFS)和廣度優先搜索(BFS),理解其在路徑查找、網絡爬蟲等場景的應用。
    • 最短路徑算法:Dijkstra算法、Floyd-Warshall算法、Bellman-Ford算法,解決圖中兩點間最短路徑問題。
    • 最小生成樹算法:Prim算法、Kruskal算法,用于網絡設計、電路板布線等領域,尋找加權圖中總權重最小的樹形結構。
  6. 排序算法

    • 掌握各種排序算法的原理、時間復雜度、穩定性及適用場景,包括但不限于:
      • 冒泡排序、選擇排序、插入排序(簡單排序,適用于小規模或基本有序數據)
      • 快速排序、歸并排序、堆排序(高效排序,適用于大規模數據,時間復雜度為O(n log n))
      • 計數排序、基數排序、桶排序(非比較排序,適用于特定類型數據,可達到線性時間復雜度)
  7. 算法設計與分析

    • 掌握分治法、動態規劃、貪心算法、回溯法等高級算法設計策略,理解其解決問題的基本思想和適用條件。
    • 學會分析算法的時間復雜度和空間復雜度,能夠對算法效率進行評估和優化。
  8. 實際應用與案例分析

    • 結合實際問題,如內存管理、數據庫索引、網絡路由、操作系統調度等,理解數據結構和算法的具體應用。
    • 分析經典問題解決方案,如背包問題、最短路徑問題、圖的連通性判斷等,培養問題解決能力。

備考期間,多做真題和模擬題,尤其是歷年軟考中級-軟件設計師的題目,可以幫助你熟悉考試風格和題型。同時,動手實踐編程實現這些數據結構和算法,能有效加深理解和記憶。最后,構建自己的知識體系,將零散的知識點串聯起來,形成完整的認知框架。

項目關鍵路徑

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在軟件設計項目管理中,關鍵路徑分析(Critical Path Analysis, CPA)是一種用于規劃、調度和控制項目進度的重要工具。它基于圖論原理,幫助項目經理識別完成項目所需的最長時間序列,即確保項目按時完成的必要任務序列。關鍵路徑是項目網絡圖中耗時最長的一系列連續任務,決定了項目的最短可能完成時間。以下是關鍵路徑分析在軟件設計項目中的幾個關鍵方面:

  1. 定義活動與依賴關系:首先,需要將軟件開發過程分解成一系列具體的活動或任務,如需求分析、系統設計、編碼、測試等。同時明確這些活動之間的邏輯依賴關系,哪些任務必須在其他任務開始之前完成。

  2. 估算活動持續時間:為每個活動估算一個合理的完成時間。這通常基于歷史數據、團隊專業知識和可用資源來確定。

  3. 構建網絡圖:使用這些信息創建項目網絡圖,常用工具包括箭線圖(AOA)或前導圖(PDM),其中節點代表活動,箭頭表示活動間的依賴關系。

  4. 計算最早開始與結束時間、最晚開始與結束時間:通過正向和反向分析網絡圖,可以計算出每個活動的最早開始時間(ES)、最早結束時間(EF)、最晚開始時間(LS)和最晚結束時間(LF)。最早開始時間是指在所有前置任務完成后,該任務可以開始的最早時間;最晚開始時間則是為了不延誤整個項目完成,該任務最遲必須開始的時間。

  5. 確定關鍵路徑:關鍵路徑是由那些總浮動時間為零的任務組成的路徑,意味著這些任務的任何延遲都會直接影響到整個項目的完成時間。在圖中,關鍵路徑通常用不同顏色或加粗線條標示。

  6. 資源分配與優化:識別關鍵路徑后,項目經理可以據此優化資源分配,優先保證關鍵路徑上任務的資源需求,以減少項目風險。同時,考慮非關鍵路徑上的活動是否可以通過增加資源或調整計劃來縮短項目周期。

  7. 監控與調整:項目執行過程中,持續監控實際進展與計劃的差異,并根據需要調整計劃。如果關鍵路徑上的活動出現延誤,需立即采取措施進行調整或加班追趕,或重新評估非關鍵路徑活動以尋找加速的可能性。

關鍵路徑分析不僅有助于合理安排軟件設計項目的進度,還能有效管理資源,提高項目成功率,是項目管理中不可或缺的一部分。

在這里插入圖片描述
在這里插入圖片描述
根據題目描述,原始森林中有三棵樹,它們的節點數分別是n1=1,n2,和n3。當將這樣的森林轉換成一棵二叉樹時,遵循的規則是每個節點的左子樹代表其第一個孩子,而右子樹則代表其下一個兄弟節點。這意味著:

  • 第一棵樹(n1=1節點)轉換后的二叉樹T1將只有一個節點,沒有左右子樹。
  • 第二棵樹(n2節點)轉換成的二叉樹T2,其最右邊的節點(原本的最后一個孩子)的右子樹將為空,因為它是這棵樹中的最后一個兄弟。
  • 第三棵樹(n3節點)轉換成的二叉樹T3,同樣,其最右邊的節點的右子樹為空。

當合并這三棵樹為一個大的二叉樹時,T1將成為新二叉樹的根,由于T1只有單個節點且無右子樹,T2會成為這個根節點的右子樹。然后,T2的最右邊節點的右子樹將連接T3。

所以,最終形成的二叉樹的右子樹將包含第二棵樹T2的所有節點加上第三棵樹T3的所有節點,即n2 + n3個節點。因此,正確答案是 D. n2+n3

矩陣

在這里插入圖片描述
在無向圖的鄰接矩陣表示中,如果頂點i與頂點j之間存在一條邊,則鄰接矩陣的兩個位置A[i][j]和A[j][i]都會被標記為1(表示有邊相連)。這意味著每條邊都會導致矩陣中兩個元素的值為1。因此,如果有E條邊,總共就會有2E個非零元素,因為每條邊貢獻了兩個“1”。

皇后問題

在這里插入圖片描述

N 皇后問題是在一個 N×N 的棋盤上放置 N 個皇后,要求任何兩個皇后不能處于同一行、同一列以及同一條對角線上。對于 8×8 的棋盤放置 8 個皇后的問題,即 N=8。

  • 分治法 通常應用于可將原問題分解為規模較小的相似子問題的情況,而 N 皇后問題中難以直接劃分出獨立的子問題來遞歸求解,因此分治法不是最直接的選擇。
  • 動態規劃法 適用于有重疊子問題和最優子結構的問題,N 皇后問題雖然可以通過狀態壓縮等技巧轉化為動態規劃問題,但直接使用動態規劃并不是最直觀或高效的解法。
  • 貪心法 每一步都做出在當前看來最好的選擇,但這種策略并不能保證找到 N 皇后問題的解決方案,因為局部最優選擇不一定能導向全局最優解。
  • 回溯法 是解決此類約束滿足問題的有效策略。它通過試錯的方式搜索解空間,當發現當前路徑不符合要求時(即放置皇后導致沖突),會回溯到上一步,撤銷之前的部分決策并嘗試其他可能性。這種方法能夠系統地探索所有可能的解,同時避免無效搜索,非常適合解決 N 皇后問題。

因此,N 皇后問題通常采用 回溯法 來實現。

數的定點和浮點表示

在這里插入圖片描述

  • A. 定點表示法表示的數(稱為定點數)常分為定點整數和定點小數兩種:這是正確的。定點數的小數點位置固定,可以位于數的最右端(表示整數)或者某個特定位置(表示小數)。

  • B. 定點表示法中,小數點需要占用一個存儲位:這是不正確的。在定點表示法中,小數點的位置是約定的或者隱含的,并不需要實際占用存儲空間。例如,一個16位的定點數可以約定前15位為整數部分,最后1位為小數部分,或者其它方式,但小數點本身不占用比特位。

  • C. 浮點表示法用階碼和尾數來表示數,稱為浮點數:這是正確的描述。浮點數由階碼(表示指數)和尾數(表示有效數字)組成,還包含一個符號位來表示正負。

  • D. 在總位數相同的情況下,浮點表示法可以表示更大的數:這也是正確的。相比同等位數的定點表示,浮點表示由于其階碼的存在,能夠覆蓋的數值范圍更廣,既能夠表示很小的數也能表示很大的數,盡管在某些區間內的精度可能不如定點表示。
    在這里插入圖片描述
    當然,讓我們更深入地探討一下定點數表示法和浮點數表示法,以及它們的特點和區別。

定點數表示法

定點數是指小數點在數值中的位置是固定的,這可以是隱含的或者是預先約定好的。定點數分為定點整數和定點小數兩大類:

  • 定點整數:小數點默認位于數值的最右側,超出部分直接截斷或進行溢出處理。例如,一個8位的定點整數可以表示從-128到127的整數(假設第一位是符號位)。

  • 定點小數:小數點默認位于數值的最左側(或某個特定位置),所有數值都是小數形式。比如,在一個8位的定點小數表示中,如果小數點固定在第4位,它可以表示從-0.992到0.992的數(假設第一位是符號位)。

特點

  • 不需要存儲小數點的位置:因為小數點的位置是固定的,所以不需要額外的位來存儲小數點的信息。
  • 范圍有限:相比浮點數,定點數的表示范圍受限,特別是當小數點位置固定時,無法同時精確表示極大和極小的數。
  • 計算效率高:定點運算通常比浮點運算快,因為它們可以直接在硬件級別實現,不需要復雜的浮點運算單元(FPU)。

浮點數表示法

浮點數使用兩部分來表示一個數:階碼(或指數)和尾數(或有效數字),再加上一個符號位來指示正負。這種表示方法讓浮點數能夠覆蓋非常寬廣的數值范圍,同時保持一定的精度。

  • 階碼:決定數值的大致大小和位置,相當于科學記數法中的10的冪。
  • 尾數:確定在那個大致位置上的具體數值,是階碼所指位置的精確值。

IEEE 754標準是最常見的浮點數表示標準,它定義了單精度(32位)和雙精度(64位)浮點數的格式,廣泛應用于計算機系統中。

特點

  • 大范圍與靈活性:由于階碼的存在,浮點數可以表示從非常小的數(接近0)到非常大的數(如天文數字),并且在一定范圍內保持相對較高的精度。
  • 存儲開銷:需要額外的位來存儲階碼和符號,這使得同樣位數的浮點數相比定點數能表示的精確整數或小數數量更少。
  • 計算復雜度:浮點運算涉及到更多的邏輯,通常需要專門的浮點運算單元(FPU),因此計算速度可能會慢于等效的定點運算。

有向圖路徑

在這里插入圖片描述
在這里插入圖片描述

在有向圖的拓撲排序中,如果頂點 V 排列在頂點 U 之前,這表示在圖 G可能存在從 VU 的路徑(因為 V 先于 U 輸出,意味著 V 在拓撲順序上較早完成,若有路徑則 U 依賴于 V 的完成),但不可能存在從 UV 的路徑。這是因為如果存在從 UV 的路徑,那么在拓撲排序時,頂點 U 應該在 V 之前被考慮,因為它必須先于 V 完成才能滿足所有依賴關系。這直接違背了題目中 V 排在 U 前面的前提。

在這里插入圖片描述

哈夫曼樹(Huffman Tree),也稱為最優二叉樹或最小帶權路徑長度樹,是一種帶權路徑長度最短的二叉樹。以下是關于哈夫曼樹的一些基本性質和選項分析:

  • A. 哈夫曼樹一定是滿二叉樹,其每層結點數都達到最大值:這是不正確的。哈夫曼樹并不一定是滿二叉樹,它的形狀取決于輸入的權重分布,其目的是最小化帶權路徑長度,而不是填滿每一層。

  • B. 哈夫曼樹一定是平衡二叉樹,其每個結點左右子樹的高度差為-1、0或1:這也是不正確的。雖然哈夫曼樹在某種意義上追求“平衡”(即帶權路徑長度最小化),但這并不等同于平衡二叉樹(如AVL樹或紅黑樹)的嚴格平衡條件。

  • C. 哈夫曼樹中左孩子結點的權值小于父結點、右孩子結點的權值大于父結點:這是錯誤的描述。哈夫曼樹構建過程中,每次都是取權值最小的兩個結點作為左右子樹構建新的結點,但并沒有規定左子樹權值一定小于父結點或右子樹權值一定大于父結點。

  • D. 哈夫曼樹中葉子結點的權值越小則距離樹根越遠、葉子結點的權值越大則距離樹根越近:這是正確的。在構建哈夫曼樹的過程中,權值最小的兩個結點被不斷合并生成新的結點,因此權值小的結點在合并時會被放在更深的層次,距離樹根更遠,而權值大的結點因其較晚被合并,故離樹根更近。

當然,讓我們更深入地探討哈夫曼樹的構建過程及其特性,這將有助于進一步理解為什么選項D是正確的。

哈夫曼樹構建過程

  1. 初始化:首先,將每一個權值看作一個獨立的二叉樹(只有一個節點的樹),形成一個森林F。

  2. 選擇階段:在森林F中選取兩個權值最小的節點(如果有多棵權值相同的樹,則任意選取兩棵)。

  3. 合并并重新插入:將這兩個節點合并成一個新的節點,新節點的權值等于這兩個節點權值之和,作為新節點的權值。然后,將這個新節點插入回森林F中,同時移除原先那兩個節點。確保操作后森林中節點的數量不變。

  4. 重復步驟2和3:不斷重復選擇權值最小的兩個節點并合并它們的過程,直到最后森林中只剩下一棵樹,這棵樹就是哈夫曼樹。

哈夫曼樹的特性

  • 最優性:哈夫曼樹是帶權路徑長度最短的二叉樹,這意味著所有葉子節點到樹根的路徑長度之和(每條路徑乘以其終點葉節點的權值)是最小的。

  • 非滿二叉樹、非完全二叉樹:哈夫曼樹的形態完全由權值的分布決定,既不是滿二叉樹也不是完全二叉樹,它可能看起來很不平衡,但這種不平衡正是為了優化帶權路徑長度。

  • 沒有度為1的節點:除了根節點外,哈夫曼樹中沒有度為1的節點,因為每次合并都是兩個節點合并成一個新節點,不會留下單邊子樹。

  • 葉子節點與權值關系:正如選項D所述,哈夫曼樹中葉子結點的權值越小則距離樹根越遠。這是因為每次合并都是選擇權值最小的兩個節點,所以權值小的節點會更晚被合并,自然位于樹的更下層,離根節點更遠。相反,權值較大的節點會較早合并到靠近根的位置。

應用

哈夫曼樹常用于數據壓縮領域,通過構建哈夫曼編碼來高效存儲和傳輸數據。在這個過程中,頻繁出現的數據分配較短的編碼,而不常出現的數據分配較長的編碼,從而實現高效編碼,減少數據存儲或傳輸的總比特數。

二叉查找樹

在這里插入圖片描述
在二叉查找樹(又稱二叉排序樹、BST)中進行查找時,效率最差的情況是樹退化成一種特殊的形態,這種形態下樹的形狀導致查找操作的時間復雜度退化。具體來說,對于這個問題,效率最差的情形是樹變為單枝樹,即選項C。

解析如下:

  • 完全二樹(A選項)和滿二叉樹(D選項)通常意味著樹的結構比較平衡,高度較低,這樣在查找時效率較高。在完全二叉樹中,除了最后一層,所有層的節點都被完全填充,最后一層的節點都盡可能地靠左。滿二叉樹則是所有層都被完全填充,每個節點都有兩個子節點。這兩種情況下的查找效率接近最佳,特別是在平衡的情況下。

  • 平衡二叉樹(B選項),比如 AVL 樹或紅黑樹,是特別設計來維持樹的平衡,確保查找、插入和刪除等操作的最壞情況時間復雜度為 O(log n),其中 n 是樹中節點的數量。因此,這也不是效率最差的情況。

  • 單枝樹(C選項),也稱為斜樹或偏斜樹,指的是樹的所有節點都只有左子樹或只有右子樹,形如鏈表。在這種情況下,二叉查找樹退化,查找效率降低至 O(n),因為可能需要遍歷所有節點才能找到目標節點或確定不存在。這是二叉查找樹操作效率最差的情形。

因此,當一個二叉查找樹在查找操作中最不高效時,它通常是單枝樹
在這里插入圖片描述

題目指出,輸出序列的第一個元素是 (k)((1 \leq k \leq \lfloor \frac{n}{2} \rfloor)),這意味著最早被彈出的元素可以是序列中的任何一個從開始到中間位置的元素。但是,這個信息并不能直接決定最后一個輸出的元素是什么,因為它依賴于具體的入棧和出棧順序。

以 (n=4) 的例子繼續分析:

  • 如果輸出序列的第一個元素是 (1),可能的輸出序列有 (1234, 1243, 1324, 1342, 1423, 1432) 等。可以看到最后一個元素可以是 (2, 3,) 或 (4)。
  • 如果輸出序列的第一個元素是 (2),可能的輸出序列有 (2134, 2143, 2314, 2341, 2413, 2431) 等。同樣,最后一個元素可以是 (1, 3,) 或 (4)。

對于更大的 (n),情況更加多樣。由于我們可以在合法的范圍內自由選擇 (k) 作為第一個彈出的元素,并且之后的出棧順序也有多種可能(只要遵循 LIFO 原則),無法直接推斷出最后一個彈出的元素一定是哪個特定的值。因此,沒有足夠的信息來確定輸出序列的最后一個元素一定是 (n)、(1)、(n-k) 或任何其他固定值,這取決于具體的入棧和出棧操作序列。

所以,正確答案是 D. 不確定的

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
二叉樹是計算機科學中一種重要的數據結構,它是一種特殊的樹形結構,其中每個節點最多有兩個子節點,通常被稱為左子節點和右子節點。二叉樹具有以下特點:

  1. 節點結構:每個節點包含三個部分,一個數據元素(或稱為鍵、值)、一個指向左子樹的引用(可以為空,表示沒有左子樹)、一個指向右子樹的引用(同樣可以為空,表示沒有右子樹)。

  2. 類型:根據節點的性質和結構,二叉樹有多種變體,如:

    • 二叉查找樹(Binary Search Tree, BST):左子樹上所有節點的值均小于它的根節點的值,右子樹上所有節點的值均大于它的根節點的值。
    • 完全二叉樹:除了最后一層外,每一層的節點數都達到最大,且最后一層的節點都盡可能地靠左排列。
    • 滿二叉樹:所有層級都有最大節點數,即每個節點都有兩個子節點,除了葉子節點。
    • 平衡二叉樹:任意兩個子樹的高度差不超過1,確保了查找、插入和刪除等操作的高效性。
    • 線索二叉樹:將空的指針(左指針或右指針)指向某種遍歷順序下的前驅或后繼節點,以便快速遍歷。
  3. 操作:常見的二叉樹操作包括插入、刪除、查找、遍歷(前序遍歷、中序遍歷、后序遍歷、層序遍歷)等。

  4. 應用:二叉樹廣泛應用于各種算法和數據結構中,如文件系統的目錄結構、表達式樹、堆(一種特殊類型的完全二叉樹,用于優先隊列)、哈夫曼編碼等。

二叉樹的核心價值在于它通過樹的分層結構能夠高效地組織和檢索數據,尤其是對于有序數據的存儲和查找,能夠提供優于線性結構的性能。

二叉樹的遍歷

遍歷是訪問二叉樹中所有節點的過程,主要有三種基本的遍歷策略,它們根據訪問根節點、左子樹和右子樹的順序不同而區分:

  1. 前序遍歷(Preorder Traversal):訪問順序為根節點 -> 左子樹 -> 右子樹。遞歸公式為:preorder(node) = visit(node), preorder(node.left), preorder(node.right)

  2. 中序遍歷(Inorder Traversal):訪問順序為左子樹 -> 根節點 -> 右子樹。遞歸公式為:inorder(node) = inorder(node.left), visit(node), inorder(node.right)。中序遍歷對于二叉查找樹來說,可以得到節點的升序排列。

  3. 后序遍歷(Postorder Traversal):訪問順序為左子樹 -> 右子樹 -> 根節點。遞歸公式為:postorder(node) = postorder(node.left), postorder(node.right), visit(node)

此外,還有層序遍歷(Level Order Traversal),按照節點所在的層次從上到下、從左到右逐層訪問。這通常使用隊列實現。

二叉樹的應用實例

  • 表達式樹:在編譯器中用于表示數學或邏輯表達式,便于進行求值或優化。
  • 文件系統:目錄結構可以用二叉樹表示,每個節點代表一個目錄,其子節點代表該目錄下的子目錄或文件。
  • :一種特殊的完全二叉樹,常用于實現優先隊列,如堆排序和內存管理中的分配與回收。
  • 哈夫曼樹:在數據壓縮中用于構建最優的編碼樹,權值較小的節點離根節點較遠,以此構建高效編碼。
  • AVL樹和紅黑樹:自平衡二叉查找樹,確保了樹的高度平衡,提供了O(log n)的查找、插入和刪除操作時間復雜度。

二叉樹的性質

  • 高度:二叉樹的最大深度稱為高度,影響了操作的效率,平衡樹(如AVL、紅黑樹)通過旋轉操作維持高度平衡。
  • 節點數與高度的關系:完全二叉樹的節點數最多,給定高度h的完全二叉樹最多有(2^h - 1)個節點。對于非完全二叉樹,節點數和高度的關系較為復雜,但可以通過遞歸關系進行計算。
  • 葉子節點數:在完全二叉樹中,如果最后一層有葉子節點,則這些葉子節點數等于倒數第二層的節點數。對于一般的二叉樹,葉子節點數與分支節點數之間也存在特定的關系,如在完全二叉樹中,葉子節點數比分支節點數多1。
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

折半查找

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

二分查找

在這里插入圖片描述

在這里插入圖片描述

A. 無論要查找哪個元素,都是先與A[7]進行比較:這是正確的。在含有13個元素的有序表中進行折半查找,首次比較的元素通常是中間位置的元素,對于13個元素的數組,中間位置是第7個元素(索引為6,但實際討論時通常指位置編號,故稱第7個元素)。

B. 若要查找的元素等于A[9],則分別需與A[7]、A[11]、A[9]進行比較:這個描述是錯誤的。正確的查找流程應該是:首先比較A[7],因為9大于7,所以接下來會比較A[7]之后的中間元素,即A[10]或A[11](取決于是否考慮開閉區間),而不是直接跳到A[11]。如果考慮是開區間查找(即中間值不直接參與比較),則會先比較A[8]或A[9],然后是A[9]或A[10],最終找到A[9]。因此,B選項的比較序列不準確。

C. 無論要查找的元素是否在A[]中,最多與表中的4個元素比較即可:這是正確的。在最壞情況下,比如查找最小或最大的元素,可能需要比較4次(比較A[7]、A[1]或A[13]、A[4]或A[10]、A[2]或A[8]),之后確定元素不存在或找到確切位置。

D. 若待查找的元素不在A[]中,最少需要與表中的3個元素進行比較:這也是正確的。比如查找一個明顯小于最小值或大于最大值的元素,首次比較后即可確定方向,第二次和第三次比較后即可確認元素不在表中。

因此,B選項是錯誤的描述。

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

VBA_MF系列技術資料1-615

MF系列VBA技術資料1-615 為了讓廣大學員在VBA編程中有切實可行的思路及有效的提高自己的編程技巧,我參考大量的資料,并結合自己的經驗總結了這份MF系列VBA技術綜合資料,而且開放源碼(MF04除外),其中MF01-0…

spring-boot集成slf4j(二)logback配置詳解

一、configuration 根節點:configuration,作為頂級標簽, 可以用來配置一些lockback的全局屬性,常見的屬性如下: (1)scan“true” :scan是否開啟自動掃描,監控配置文件更…

el-table 組件實現 “合并單元格 + N行數據小計” 功能

目錄 需求 - 要實現的效果初始代碼代碼升級(可供多個表格使用)CommonTable.vue 子組件 使用子組件1 - 父組件 - 圖1~圖3使用效果展示 使用子組件2 - 父組件 - 圖4使用效果展示 注意【代碼優化 - 解決bug】 需求 - 要實現的效果 父組件中 info 數據示例 …

內網安全之證書服務基礎知識

PKI公鑰基礎設施 PKI(Public Key Infrastructure)公鑰基礎設施,是提供公鑰加密和數字簽名服務的系統或平臺,是一個包括硬件、軟件、人員、策略和規程的集合,用來實現基于公鑰密碼體制的密鑰和證書的產生、管理、存儲、分發和撤銷等功能。企業…

Android Debug Bridge(ADB)命令使用

引言 Android Debug Bridge(ADB)是一套功能強大的命令行工具,它為Android開發者和高級用戶提供了與Android設備通信的能力。無論是進行應用開發、測試還是執行日常設備管理任務,ADB都是不可或缺的工具。本文將詳細介紹一些常用的…

element-plus:踩坑日記

el-table Q:有fixed屬性時,無數據時,可能出現底部邊框消失的bug 現象: 解決方法: .el-table__empty-block {border-bottom: 1px solid var(--el-table-border-color); } el-collapse 折疊面板 Q:標題上…

云平臺的安全能力提升解決方案

提升云平臺的安全能力是確保數據和服務安全的關鍵步驟。針對大型云平臺所面臨的云上安全建設問題,安全狗提供完整的一站式云安全解決方案,充分匹配云平臺安全管理方的需求和云租戶的安全需求。協助大型云平臺建設全網安全態勢感知、統一風險管理、統一資…

加強堆(大根堆)

way:看上去好像就是加了個indexMap記錄節點在數組heap中的下標,然后就是可以查到某個元素是否在堆里并且可以進行位置的調整,普通的堆是沒法知道元素是不是在的,只能彈堆頂元素,插入到堆尾這樣子。如果覺得heapSize有點…

PCIE協議-4-物理層邏輯模塊

4.1 簡介 物理層將事務層和數據鏈路層與用于鏈路數據交換的信令技術隔離開來。物理層被劃分為邏輯物理層和電氣物理層子模塊(見圖4-1)。 4.2 邏輯物理層子模塊 邏輯子模塊有兩個主要部分:一個發送部分,它準備從數據鏈路層傳遞過…

Spring 中常用的手動裝載 bean 方法

在 Spring 的 bean 裝載條件中,雖然 Spring 給我們提供了非常好用便捷的 Condition 相關注解,但是很多時候 Condition 相關注解并不滿足我們的需求,我需要更復雜的條件手動控制是否裝置 bean。這個時候我們就可以實現 Spring 為我們提供的幾個…

域名DNS添加CAA記錄

目錄 概述 檢測CAA記錄 添加CAA記錄 概述 DNS CAA(Certificate Authority Authorization)記錄是一種不太常見的DNS記錄類型,它主要用于鎖定證書頒發機構(CA)列表,以確保只有特定的CA可以為某個域名頒發SSL/TLS證書。CAA記錄是保護域名免受釣魚攻擊的安全措施,通過限制…

v-md-editor和SSE實現ChatGPT的打字機式輸出

概述 不論是GPT還是文心一言,在回答的時候類似于打字機式的將答案呈現給我們,這樣的交互一方面比較友好,另一方面,當答案比較多、生成比較慢的時候也能爭取一些答案的生成時間。本文后端使用express和stream,使用SSE將…

Boosting Cache Performance by Access Time Measurements——論文泛讀

TOC 2023 Paper 論文閱讀筆記整理 問題 大多數現代系統利用緩存來減少平均數據訪問時間并優化其性能。當緩存未命中的訪問時間不同時,最大化緩存命中率與最小化平均訪問時間不同。例如:系統使用多種不同存儲介質時,不同存儲介質訪問時間不同…

【C++初階】—— 類和對象 (上)

📝個人主頁🌹:EterNity_TiMe_ ?收錄專欄?:C “ 登神長階 ” 🌹🌹期待您的關注 🌹🌹 類和對象 1. 初步認識C2. 類的引入3. 類的定義聲明和定義全部放在類體中聲明和定義分開存放 4.…

8個實用網站和軟件,收藏起來一定不后悔~

整理了8個日常生活中經常能用得到的網站和軟件,收藏起來一定不會后悔~ 1.ZLibrary zh.zlibrary-be.se/這個網站收錄了超千萬的書籍和文章資源,國內外的各種電子書資源都可以在這里搜索,98%以上都可以在網站內找到,并且支持免費下…

Android系統的/etc/mkshrc文件

/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)環境的啟動腳本。mksh 是 Android 默認使用的 shell,在 shell 啟動時會讀取并執行這個文件中的配置。以下是關于 /etc/mkshrc 文件的詳細信息及其用途。 /etc/mkshrc 文件的作用 環境配…

sql server專題實驗4 復雜查詢

SQL Server 是微軟開發的數據庫管理系統,它支持復雜的查詢操作,允許用戶從數據庫中檢索、分析和處理數據。在進行復雜查詢時,通常會用到以下幾種SQL語句和概念: 連接(Join): INNER JOIN:只返回兩…

設計模式--備忘錄模式

備忘錄模式是一種行為設計模式,它用于在不破壞封裝的前提下,保存一個對象的內部狀態,以便以后可以恢復到這個狀態。這種模式在許多應用場景中非常有用,例如在實現撤銷操作、保存游戲進度、恢復文件備份以及保持工作狀態等。 備忘…

linux中ansible整理筆記

一、工作模式 1. adhoc臨時命令 語法: ansible 主機或者組列表 -m 模塊 -a “參數” 2. playbook 語法: ansible-playbook xxx.yml 二、模塊 1. ping 2.command:默認模塊(不支持重定向,管道) 3.shell:類似com…

IP地址顯示“不安全”怎么辦|已解決

解決IP地址顯示“不安全”的問題,通常需要確保網站或服務使用HTTPS協議進行加密通信,可以通過部署SSL證書來解決,以下是具體的解決步驟: 1 申請IP地址SSL證書:網站管理員應向證書頒發機構(CA)申…