算法时间复杂度方法决策产品设计

5 评论 8253 浏览 32 收藏 6 分钟

APP的界面布局数不胜数,何种界面设计更优,似乎没有一个较为统一的标准去评估。今天笔者就用算法时间复杂度来分析一个界面布局设计的优劣。

最近不断看一些竞品,发现有非常多种产品的界面布局方式,很难去评估产品设计的优劣。今天突然发现可以用大学学过的数据结构与算法中的时间复杂度去评价一个界面设计的效率。

那些年边骂学了没用,边努力学习的东西,现在一件一件的给了我回报。

1. 什么是时间复杂度?

时间复杂度是指程序运行从开始到结束所需要的时间。为了便于比较同一个问题的不同算法,通常做法是,从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作重复执行的次数做为算法的时间量度。基本操作应是其重复执行次数和算法时间成正比的原操作,多数情况下它是最深层循环内的语句中的操作。

在进行算法分析时,语句总的执行次数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复活了 😛

    来自广东 回复