資料結構(1 2 3) 演算法的空間複雜度

2021-10-08 19:24:53 字數 1495 閱讀 6380

遞迴程式

void loveyou(int n)

printf(

"i love you more than %d\n", n)

;}

程式執行:把程式編譯後的機器指令放到記憶體中(程式**大小固定,與問題規模無關) ------> cpu開始執行每一行** ------> **執行時記憶體中需要有一片區域用於存放資料(區域性變數、引數《無論問題規模怎麼變,演算法執行所需的記憶體空間都是固定的常量,演算法空間複雜度為s(n)

=o(1)

>

...)

演算法原地工作--演算法所需記憶體空間為常量

s(n)

= o(1)

void test(int n)

記憶體:程式**(大小固定)、資料(區域性變數i,引數n...,陣列flag[n])

空間複雜度:?

解:假設乙個int變數佔4b

所需記憶體空間 = 4 + 4n + 4 = 4n + 8

即,s(n)

= o(n)

void test(int n)

記憶體:程式**(大小固定)、資料(區域性變數i,引數n...,陣列flag[n]

[n])

所需記憶體空間 = 4 + 4*n*n + 4 = 4n² + 8

即,s(n)

= o(n²)

void test(int n)

演算法執行時記憶體:程式**(大小固定)、資料(區域性變數i,引數n...,陣列flag[n]

[n],陣列other[n])

s(n)

= o(n²) + o(n) + o(1)

= o(n²)

void loveyou(int n) // n為問題規模

printf(

"i love you %d\n", n)

;}

演算法執行時記憶體:程式**(大小固定)、資料(引數n,區域性變數abc...)

假設每層遞迴耗費kb記憶體

所需記憶體空間 = knb

s(n)

= o(n)

void loveyou(int n) // n為問題規模

printf(

"i love you %d\n", n)

;}

演算法執行時記憶體:程式**(大小固定)、資料(引數n,區域性變數flag[n]

...)

所需記憶體空間 = 1 + 2 + 3 + ... + n =

[n(1+n)

]/2 = ½n² + ½n

s(n)

= o(n²)

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

資料結構(演算法的時間複雜度和空間複雜度)

時間複雜度 時間複雜度和空間複雜度是演算法效率的度量方法。也就是說,乙個好的演算法取決於它的時間複雜度和空間複雜度。函式的漸近增長 給定兩個函式f n 和g n 如果存在乙個整數n,使得對於所有的n n,f n 總是比g n 大。那麼,我們說f n 的增長漸近快於g n 翻譯過來就是 如果存在乙個臨...

資料結構 演算法的時間複雜度及空間複雜度

一 緒論 1 什麼是資料結構?程式設計 資料結構 演算法,再簡單的來說資料結構就是關係,是資料元素相互之間存在的一種或多種特定關係的集合 2 資料結構的分類 邏輯結構 資料物件中資料元素之間的相互關係 物理結構 資料邏輯結構在計算機中的儲存形式 3 邏輯結構分類 集合分類 集合結構中的資料元素除了同...