算法時(shí)間復(fù)雜度方法決策產(chǎn)品設(shè)計(jì)
APP的界面布局?jǐn)?shù)不勝數(shù),何種界面設(shè)計(jì)更優(yōu),似乎沒(méi)有一個(gè)較為統(tǒng)一的標(biāo)準(zhǔn)去評(píng)估。今天筆者就用算法時(shí)間復(fù)雜度來(lái)分析一個(gè)界面布局設(shè)計(jì)的優(yōu)劣。
最近不斷看一些競(jìng)品,發(fā)現(xiàn)有非常多種產(chǎn)品的界面布局方式,很難去評(píng)估產(chǎn)品設(shè)計(jì)的優(yōu)劣。今天突然發(fā)現(xiàn)可以用大學(xué)學(xué)過(guò)的數(shù)據(jù)結(jié)構(gòu)與算法中的時(shí)間復(fù)雜度去評(píng)價(jià)一個(gè)界面設(shè)計(jì)的效率。
那些年邊罵學(xué)了沒(méi)用,邊努力學(xué)習(xí)的東西,現(xiàn)在一件一件的給了我回報(bào)。
1. 什么是時(shí)間復(fù)雜度?
時(shí)間復(fù)雜度是指程序運(yùn)行從開(kāi)始到結(jié)束所需要的時(shí)間。為了便于比較同一個(gè)問(wèn)題的不同算法,通常做法是,從算法中選取一種對(duì)于所研究的問(wèn)題來(lái)說(shuō)是基本操作的原操作,以該基本操作重復(fù)執(zhí)行的次數(shù)做為算法的時(shí)間量度。基本操作應(yīng)是其重復(fù)執(zhí)行次數(shù)和算法時(shí)間成正比的原操作,多數(shù)情況下它是最深層循環(huán)內(nèi)的語(yǔ)句中的操作。
在進(jìn)行算法分析時(shí),語(yǔ)句總的執(zhí)行次數(shù)T(n)是關(guān)于問(wèn)題規(guī)模n的函數(shù),進(jìn)而分析T(n)隨n的變化情況并確定T(n)的數(shù)量級(jí)。時(shí)間復(fù)雜度一般記作:T(n)= O(f(n))。
2. 時(shí)間復(fù)雜度計(jì)算方法
時(shí)間復(fù)雜的推導(dǎo)方法一般如下:
- 第一步:用常數(shù)1取代運(yùn)行時(shí)間中的所有加法常數(shù)。
- 第二步:在修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)。
- 第三步:如果最高階項(xiàng)存在且不是 1,則去除與這個(gè)項(xiàng)相乘的常數(shù)。
常用的時(shí)間復(fù)雜度所耗費(fèi)的時(shí)間從小到大依次是:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
3. 產(chǎn)品設(shè)計(jì)的抽象化
產(chǎn)品可能有的功能多種多樣,可能的布局千差萬(wàn)別,可能的交互方式更是多如牛毛。如何找到個(gè)好的方法把產(chǎn)品功能在一個(gè)界面良好的組織起來(lái),是一件困難的事情。
我們需要首先把產(chǎn)品抽象成幾個(gè)維度:
所有的產(chǎn)品都可以抽象為用戶(hù)維度+內(nèi)容維度+狀態(tài)維度。三個(gè)維度互相穿插影響時(shí),會(huì)產(chǎn)生不同的復(fù)雜度。這時(shí),可以用時(shí)間復(fù)雜度的方式來(lái)評(píng)判產(chǎn)品設(shè)計(jì)的合理性。
4. 實(shí)例分析:對(duì)比手Q和微信消息界面
大家可以對(duì)比查看手Q和微信的消息界面。用戶(hù)的維度,微信只有一種,而手Q有普通用戶(hù)、會(huì)員用戶(hù)、超級(jí)會(huì)員用戶(hù)、體驗(yàn)會(huì)員用戶(hù)等。內(nèi)容維度,微信有用戶(hù)消息、群聊消息、公眾號(hào)消息,而手Q有用戶(hù)消息、群聊消息、服務(wù)號(hào)、系統(tǒng)消息、新聞消息等,甚至還加入了QQ電話(huà)(這個(gè)讓復(fù)雜度大大提高了)。狀態(tài)維度,微信由正常態(tài)、未點(diǎn)擊態(tài)、紅點(diǎn)態(tài),手Q還多了群消息的幾種狀態(tài)(這里微信做得很特別,把單聊和群聊做成了一致)。
這樣子,微信用戶(hù)去遍歷內(nèi)容時(shí)的復(fù)雜度是O(n),因?yàn)橛脩?hù)維度已經(jīng)最簡(jiǎn)化;而手Q用戶(hù)去遍歷內(nèi)容時(shí)的時(shí)間復(fù)雜度至少是O(n^2),甚至是O(n^3)。這時(shí),你可能會(huì)深刻體會(huì)到微信為什么不做會(huì)員體系,為什么群組設(shè)計(jì)跟單聊模式基本一致。
用時(shí)間復(fù)雜度去評(píng)判手Q和微信時(shí),我都會(huì)感慨,這兩個(gè)產(chǎn)品做的都太牛叉了。微信承擔(dān)如此強(qiáng)大的功能屬性,卻能將整個(gè)產(chǎn)品設(shè)計(jì)得時(shí)間復(fù)雜度最低,基本都是線(xiàn)性的。手Q則是添加了如此多的功能的前提下,也能采取一個(gè)良好的布局將功能擺放盡量合理。
大家可以再去對(duì)比看看微信、手Q的更多細(xì)節(jié),比如通訊錄、發(fā)現(xiàn)、空間等。你能發(fā)現(xiàn)微信真的很可怕,幾乎把各個(gè)地方的時(shí)間復(fù)雜度都控制在線(xiàn)性階;手Q也很可怕,功能做得比微信多三倍,但也基本能找到合適的布局。相比來(lái)說(shuō)我更喜歡基本將時(shí)間復(fù)雜度優(yōu)化到極致的微信,甚至能夠在某些非常復(fù)雜的跳轉(zhuǎn)邏輯中做好優(yōu)化將時(shí)間復(fù)雜度降低,膜拜之。
#專(zhuān)欄作家#
Glen,鵝廠(chǎng)PM,微信公眾號(hào):更冷吃到老玩到老的故事,人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家,華為、歡聚、迅雷工作經(jīng)歷。愛(ài)看書(shū)、喜歡碼字、愿意走出去看世界,歡迎交流。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,不得轉(zhuǎn)載。
微信公眾號(hào)搜不到!
學(xué)長(zhǎng),能加個(gè)微信么
很棒的概念!不過(guò)就算是軟件工程專(zhuān)業(yè)出生的我還是覺(jué)得你提供的時(shí)間復(fù)雜度的定義太繞太晦澀,如果可以用白話(huà)重新定義一遍就好了。
另外,我覺(jué)得如果能提供更多的使用時(shí)間復(fù)雜度的思考和嘗試我覺(jué)得會(huì)比單純基于這一個(gè)例子來(lái)得深刻。
總之,你很棒!繼續(xù)加油!
說(shuō)了一圈p話(huà) 微信好不好用還用你說(shuō)
Glen復(fù)活了 ??