算法時間復雜度方法決策產品設計

5 評論 8255 瀏覽 32 收藏 6 分鐘

APP的界面布局數不勝數,何種界面設計更優,似乎沒有一個較為統一的標準去評估。今天筆者就用算法時間復雜度來分析一個界面布局設計的優劣。

最近不斷看一些競品,發現有非常多種產品的界面布局方式,很難去評估產品設計的優劣。今天突然發現可以用大學學過的數據結構與算法中的時間復雜度去評價一個界面設計的效率。

那些年邊罵學了沒用,邊努力學習的東西,現在一件一件的給了我回報。

1. 什么是時間復雜度?

時間復雜度是指程序運行從開始到結束所需要的時間。為了便于比較同一個問題的不同算法,通常做法是,從算法中選取一種對于所研究的問題來說是基本操作的原操作,以該基本操作重復執行的次數做為算法的時間量度?;静僮鲬瞧渲貜蛨绦写螖岛退惴〞r間成正比的原操作,多數情況下它是最深層循環內的語句中的操作。

在進行算法分析時,語句總的執行次數T(n)是關于問題規模n的函數,進而分析T(n)隨n的變化情況并確定T(n)的數量級。時間復雜度一般記作:T(n)= O(f(n))。

2. 時間復雜度計算方法

時間復雜的推導方法一般如下:

  • 第一步:用常數1取代運行時間中的所有加法常數。
  • 第二步:在修改后的運行次數函數中,只保留最高階項。
  • 第三步:如果最高階項存在且不是 1,則去除與這個項相乘的常數。

22

常用的時間復雜度所耗費的時間從小到大依次是:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

3. 產品設計的抽象化

產品可能有的功能多種多樣,可能的布局千差萬別,可能的交互方式更是多如牛毛。如何找到個好的方法把產品功能在一個界面良好的組織起來,是一件困難的事情。

我們需要首先把產品抽象成幾個維度:

Slice

所有的產品都可以抽象為用戶維度+內容維度+狀態維度。三個維度互相穿插影響時,會產生不同的復雜度。這時,可以用時間復雜度的方式來評判產品設計的合理性。

4. 實例分析:對比手Q和微信消息界面

Slice1

大家可以對比查看手Q和微信的消息界面。用戶的維度,微信只有一種,而手Q有普通用戶、會員用戶、超級會員用戶、體驗會員用戶等。內容維度,微信有用戶消息、群聊消息、公眾號消息,而手Q有用戶消息、群聊消息、服務號、系統消息、新聞消息等,甚至還加入了QQ電話(這個讓復雜度大大提高了)。狀態維度,微信由正常態、未點擊態、紅點態,手Q還多了群消息的幾種狀態(這里微信做得很特別,把單聊和群聊做成了一致)。

這樣子,微信用戶去遍歷內容時的復雜度是O(n),因為用戶維度已經最簡化;而手Q用戶去遍歷內容時的時間復雜度至少是O(n^2),甚至是O(n^3)。這時,你可能會深刻體會到微信為什么不做會員體系,為什么群組設計跟單聊模式基本一致。

用時間復雜度去評判手Q和微信時,我都會感慨,這兩個產品做的都太牛叉了。微信承擔如此強大的功能屬性,卻能將整個產品設計得時間復雜度最低,基本都是線性的。手Q則是添加了如此多的功能的前提下,也能采取一個良好的布局將功能擺放盡量合理。

大家可以再去對比看看微信、手Q的更多細節,比如通訊錄、發現、空間等。你能發現微信真的很可怕,幾乎把各個地方的時間復雜度都控制在線性階;手Q也很可怕,功能做得比微信多三倍,但也基本能找到合適的布局。相比來說我更喜歡基本將時間復雜度優化到極致的微信,甚至能夠在某些非常復雜的跳轉邏輯中做好優化將時間復雜度降低,膜拜之。

#專欄作家#

Glen,鵝廠PM,微信公眾號:更冷吃到老玩到老的故事,人人都是產品經理專欄作家,華為、歡聚、迅雷工作經歷。愛看書、喜歡碼字、愿意走出去看世界,歡迎交流。

本文原創發布于人人都是產品經理,未經許可,不得轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 微信公眾號搜不到!

    來自廣東 回復
  2. 學長,能加個微信么

    來自廣東 回復
  3. 很棒的概念!不過就算是軟件工程專業出生的我還是覺得你提供的時間復雜度的定義太繞太晦澀,如果可以用白話重新定義一遍就好了。
    另外,我覺得如果能提供更多的使用時間復雜度的思考和嘗試我覺得會比單純基于這一個例子來得深刻。
    總之,你很棒!繼續加油!

    來自上海 回復
  4. 說了一圈p話 微信好不好用還用你說

    來自陜西 回復
  5. Glen復活了 ??

    來自廣東 回復