5/150. 稀疏數組的程式碼實作 - 從邏輯到代碼的轉化

更新 發佈閱讀 6 分鐘

🏗️ 第 1 週:資料結構基礎(Data Structures) 5/150

05. 稀疏數組的程式碼實作 - 從邏輯到代碼的轉化

一、 實作核心目標

程式實作不僅僅是將「稀疏數組」的數學定義寫出來,更重要的是掌握數據轉換的生命週期。我們的目標是編寫一套通用的轉換工具,能夠處理任意大小的二維矩陣,將其「無損壓縮」為輕量化的三欄式結構,並能隨時完美還原。

二、 壓縮邏輯的關鍵:兩次掃描法 (Two-Pass Strategy)

在程式設計(特別是像 Java 或 C++ 這類需預先定義陣列大小的語言)中,將二維陣列轉為稀疏數組通常需要執行兩次迴圈掃描:

  1. 第一次掃描(計數): 遍歷整個原始二維陣列,計算出所有「非 0 元素」的總數(sum)。這一步至關重要,因為它決定了我們接下來要建立多大的稀疏數組空間(即 sum + 1 行)。
  2. 第二次掃描(填充): 再次遍歷陣列,將非 0 元素的具體資訊——「所在的列(Row)、所在的行(Col)、以及數值(Value)」——依序填入稀疏數組中。

三、 還原邏輯的關鍵:檔頭解析 (Header Parsing)

還原過程是壓縮的逆運算,但它完全依賴於稀疏數組的第一行(Index 0),我們稱之為「檔頭」。

  • 讀取維度: 程式必須先讀取第 0 行的前兩個數字,才能知道要初始化一個多大的全新二維陣列(例如 $6 \times 7$)。
  • 回填數據: 接著從第 1 行開始讀取有效數據,利用座標直接定位並賦值。若沒有檔頭紀錄原始大小,還原出來的棋盤將會失去邊界,導致邏輯錯誤。

四、 Python 簡易實作範例

以下這段程式碼展示了從「建立棋盤」到「壓縮存檔」,再到「讀取還原」的完整流程:

Python

# --- 1. 模擬原始數據:建立一個 6x7 的棋盤 ---

# 0代表空位, 1代表黑子, 2代表白子

chess_arr = [

    [0, 0, 0, 0, 0, 0, 0],

    [0, 0, 1, 0, 0, 0, 0], # (1, 2) 有黑子

    [0, 0, 0, 2, 0, 0, 0], # (2, 3) 有白子

    [0, 0, 0, 0, 0, 0, 0],

    [0, 0, 0, 0, 0, 0, 0],

    [0, 0, 0, 0, 0, 0, 0]

]

# --- 2. 壓縮:二維陣列 -> 稀疏數組 ---

# 步驟 A: 統計有效數據 (sum)

sum_val = 0

for row in chess_arr:

    for val in row:

        if val != 0:

            sum_val += 1

# 步驟 B: 建立稀疏數組 (sum+1 行, 3 列)

# 第0行是檔頭:[原始列數, 原始行數, 有效數據總數]

sparse_arr = [[len(chess_arr), len(chess_arr[0]), sum_val]]

# 步驟 C: 填入數據

for i in range(len(chess_arr)):

    for j in range(len(chess_arr[0])):

        if chess_arr[i][j] != 0:

            # 記錄 [列, 行, 值]

            sparse_arr.append([i, j, chess_arr[i][j]])

print("=== 壓縮後的稀疏數組 (模擬存檔) ===")

for row in sparse_arr:

    print(row)

# --- 3. 還原:稀疏數組 -> 二維陣列 ---

# 步驟 A: 讀取檔頭

orig_rows = sparse_arr[0][0]

orig_cols = sparse_arr[0][1]

# 步驟 B: 建立全 0 的新陣列

restored_arr = [[0] * orig_cols for _ in range(orig_rows)]

# 步驟 C: 回填有效數據 (從第1行開始讀)

for i in range(1, len(sparse_arr)):

    cur_row = sparse_arr[i][0]

    cur_col = sparse_arr[i][1]

    cur_val = sparse_arr[i][2]

    restored_arr[cur_row][cur_col] = cur_val

print("\n=== 還原後的棋盤 (模擬讀檔) ===")

for row in restored_arr:

    print(row)

五、 AI 時代的實務價值

雖然學習時我們手寫迴圈來理解原理,但在 Python 的 AI 實務開發中(如 NLP 自然語言處理或推薦系統),我們通常會呼叫高效能函式庫(如 SciPy 或 NumPy)。這些函式庫底層運用的正是上述邏輯的優化版,用來處理那些維度高達數百萬、但有效數據極少的特徵矩陣(Feature Matrix),是現代 AI 模型節省記憶體與加速運算的基石。

 

留言
avatar-img
강신호(姜信號 / Kang Signal)的沙龍
22會員
314內容數
「강신호(姜信號 / Kang Signal)」聚焦電信、網路與 AI 電子核心技術,解析 5G/6G、衛星通訊、訊號處理與產業趨勢,以工程視角輸出可落地的專業洞見,打造強信號的未來。
2026/01/26
轉換核心為捨棄零值,僅記錄有效數據的「列、行、值」。透過建立含原始維度的「檔頭」,將陣列壓縮為三欄結構;還原時依檔頭重建網格並回填,實現高效儲存與無損互換。
Thumbnail
2026/01/26
轉換核心為捨棄零值,僅記錄有效數據的「列、行、值」。透過建立含原始維度的「檔頭」,將陣列壓縮為三欄結構;還原時依檔頭重建網格並回填,實現高效儲存與無損互換。
Thumbnail
2026/01/26
面對充斥無效數據(如 0)的場景,傳統儲存極度浪費。「稀疏數組」透過僅記錄有效數據的「座標與值」,實現高效壓縮。從棋盤存檔、地圖導航到 AI 推薦系統,這種「去蕪存菁」的思維是節省記憶體空間的關鍵技術。
2026/01/26
面對充斥無效數據(如 0)的場景,傳統儲存極度浪費。「稀疏數組」透過僅記錄有效數據的「座標與值」,實現高效壓縮。從棋盤存檔、地圖導航到 AI 推薦系統,這種「去蕪存菁」的思維是節省記憶體空間的關鍵技術。
2026/01/26
對比數據的兩大形態:強調順序的「線性結構」(如陣列)與構建網絡的「非線性結構」(如樹、圖)。前者是運算基礎,後者則是 AI 處理複雜關聯的核心。掌握兩者差異,才能依場景精準選用數據容器,發揮演算法極致效能。
2026/01/26
對比數據的兩大形態:強調順序的「線性結構」(如陣列)與構建網絡的「非線性結構」(如樹、圖)。前者是運算基礎,後者則是 AI 處理複雜關聯的核心。掌握兩者差異,才能依場景精準選用數據容器,發揮演算法極致效能。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
美國量子運算概念股近期表現強勁,5 月持續延續 4 月漲勢,股價再創新高,吸引眾多市場資金流入。然而隨著夏季將至,過往美股常出現走弱現象,市場開始關注這波熱潮是否能持續升溫。在美股市場上,四家純量子運算公司在過去一個月表現驚人:D-Wave Quantum (QBTS-US) :漲幅逾 150%Qu
Thumbnail
美國量子運算概念股近期表現強勁,5 月持續延續 4 月漲勢,股價再創新高,吸引眾多市場資金流入。然而隨著夏季將至,過往美股常出現走弱現象,市場開始關注這波熱潮是否能持續升溫。在美股市場上,四家純量子運算公司在過去一個月表現驚人:D-Wave Quantum (QBTS-US) :漲幅逾 150%Qu
Thumbnail
2025持之以恆的訓練。一日一捨(136-150)
Thumbnail
2025持之以恆的訓練。一日一捨(136-150)
Thumbnail
房屋銷售廣告所描述的公有公共設施環境,是影響消費者購買的重要交易決定因素,而建商在銷售建案時,常會宣稱在公園、學校及捷運站旁邊,吸引民眾購買。 公平會發布新聞稿指出,富璟建設股份有限公司與海樺廣告股份有限公司銷售臺北市士林區「圓山富璟」預售屋建案,廣告刊載「萬坪公園首排」、「2萬坪樹海第一排」
Thumbnail
房屋銷售廣告所描述的公有公共設施環境,是影響消費者購買的重要交易決定因素,而建商在銷售建案時,常會宣稱在公園、學校及捷運站旁邊,吸引民眾購買。 公平會發布新聞稿指出,富璟建設股份有限公司與海樺廣告股份有限公司銷售臺北市士林區「圓山富璟」預售屋建案,廣告刊載「萬坪公園首排」、「2萬坪樹海第一排」
Thumbnail
今天一整天基本上就是在家顧生病的小孩中渡過,還吃超多!吃到晚餐不敢吃了😂。
Thumbnail
今天一整天基本上就是在家顧生病的小孩中渡過,還吃超多!吃到晚餐不敢吃了😂。
Thumbnail
特別推薦5個位於台北市的100~150人教室,坪數大空間舒適,辦起大型活動或是訓練聚會都是寬敞又動線佳!地點都在捷運站附近走路可到、而且是設備齊全的場地租借推薦! 如果您很急著找場地、懶得爬文了,可以直接點圖示連結​加入line連絡小編 有其他人數的場地需求也可直接點下方文章連結觀看喔!
Thumbnail
特別推薦5個位於台北市的100~150人教室,坪數大空間舒適,辦起大型活動或是訓練聚會都是寬敞又動線佳!地點都在捷運站附近走路可到、而且是設備齊全的場地租借推薦! 如果您很急著找場地、懶得爬文了,可以直接點圖示連結​加入line連絡小編 有其他人數的場地需求也可直接點下方文章連結觀看喔!
Thumbnail
🐋除權息旺季正進行,本周有150檔個股即將除權息、11檔無償配股。其中京晨科(6419)殖利率超過11%,還有金融股富邦金(2881)、台中銀(2812);熱門股台汽電、環球晶、台亞等🉑 ​ 🐋除權息旺季正進行,本周有150檔個股即將除權息、11檔無償配股。其中京晨科(641
Thumbnail
🐋除權息旺季正進行,本周有150檔個股即將除權息、11檔無償配股。其中京晨科(6419)殖利率超過11%,還有金融股富邦金(2881)、台中銀(2812);熱門股台汽電、環球晶、台亞等🉑 ​ 🐋除權息旺季正進行,本周有150檔個股即將除權息、11檔無償配股。其中京晨科(641
Thumbnail
由客家委員會主辦的第2屆浪漫台三線藝術季,展期自6月24日起至8月27日止,今年有7個國家、55組藝術設計團隊參與創作,這場跨越北桃竹苗中五縣市,長達150公里的藝術饗宴,以「藝術策展」、「設計導入」和「飲食實驗計畫」三大維度,創作出91件作品、35種全新客家味,以及60條經典旅行路線。
Thumbnail
由客家委員會主辦的第2屆浪漫台三線藝術季,展期自6月24日起至8月27日止,今年有7個國家、55組藝術設計團隊參與創作,這場跨越北桃竹苗中五縣市,長達150公里的藝術饗宴,以「藝術策展」、「設計導入」和「飲食實驗計畫」三大維度,創作出91件作品、35種全新客家味,以及60條經典旅行路線。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News