演算法複雜度和解空間

2021-09-19 23:33:25 字數 671 閱讀 9619

線性代數中,印象最深刻的是矩陣變換、求矩陣秩的算數細節,這些細節曾經讓本科時的我迷失於學習的細節中。大多數學生跟我一樣,被課程的莫名其妙搞的暈頭轉向,喪失了直覺性的教學使得學生感覺莫名其妙。

今天我才發現線性代數給我帶來的的最大的改變其實是一種思維方式,用向量和線性空間來解釋世界和解決問題。

演算法本質上是在乙個解空間中的搜尋問題。

一維排序演算法的解空間就是所有的下標排列組合,n個元素的n!種排列組合也就是說解空間是n維向量空間,我們要找到乙個點,那個點就是排序的過程。排序的過程基於比較,完美情況下,每一次兩個元素的比較都可以從解空間中排除掉一半的向量,每次比較都可以二分的話,複雜度就是o(nlog(n))。

01揹包問題的解空間,首先看第乙個物品要不要選,這就有了選或不選兩個分支,每個分支都是乙個更低階的子問題,遞迴下去是乙個2^n個葉子節點的樹,從根節點到每個葉子節點的路徑010101101串就對應乙個解,其中每個分叉都對應選或者不選。當確定了乙個節點之後,隨之而來的是解空間中有一半的點被排除掉了,每次解空間折半的時間複雜度是o(w),這樣的話就是o(nw)了。

高效的演算法一定是高效的探索解空間,通過高效的方式,每次子計算應該盡可能縮小探索到的解空間的交集。先拿物品i和先拿物品j這兩個分支裡面存在著大量的重複,定義子問題的原則就是建立遞迴公式的時候將解空間進行不交的切分。

充分利用每一次計算得到的資訊,盡可能的縮小解空間。

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...