遞迴程式
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 邏輯結構分類 集合分類 集合結構中的資料元素除了同...