14天阅读挑战赛

系列文章目录

趣味算法(第二版)读书笔记:
day1: 序章|学习的方法和目标.
day2:算法之美|打开算法之门与算法复杂性
day3.算法之美|指数型函数对算法的影响实际应用
day4.数学之美|斐波那契数列与黄金分割
day5.算法实践|贪心算法基础
day6.算法实践|最优装载
day7.算法实践|背包问题


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 课程导学
  • 一、算法时间复杂度详解
    • 1.1 常数阶O(1)
    • 1.2 线性阶O(n)
    • 1.3 对数阶O(logN)
    • 1.4 线性对数阶O(nlogN)
    • 1.5 平方阶O(n²)
    • 1.6 立方阶O(n³)、K次方阶O(n^k)
  • 二、空间复杂度
    • 2.1 空间复杂度 O(1)
    • 2.2 空间复杂度 O(n)
  • 三、指数型函数与实际应用的结合
    • 3.1 指数型函数对传播学的应用
      • 3.1.1 病毒传播研究模型
      • 3.1.2 指数型函数和裂变式营运
  • 四、总结

课程导学

从一盘棋的麦子作为展开:

本章节主要讲解了,算法的增量度,也是对上一个章节的具体补充。尤其是对指数型函数算法进行了重点的剖析。需要在实践中,尽量避免。
按照辩证思维,任何事务都是一体两面,在算法设计的实践中需要避免,不代表指数型函数在实际的工作中没有用处,今天的笔记就按照正反两个方面从算法设计和实际运用中去展开论述:


一、算法时间复杂度详解

首先声明算法效率的排序方式,从小到大依次如下:

运行效率排序:
常数阶O(1)>对数阶O(logN)>线性阶O(n)>线性对数阶O(nlogN)>平方阶O(n²)>立方阶O(n³)>指数阶(2^n)> 阶乘O(n!) >循环递归O(n^n)

上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。
下面选取一些较为常用的来讲解一下(没有严格按照顺序):

1.1 常数阶O(1)

无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1),如:

int i = 50;
int m = i ;

上述代码在执行的时候,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O(1)来表示它的时间复杂度。

1.2 线性阶O(n)

这个在最开始的代码示例中就讲解过了,如:

for(i=1; i<=n; ++i)
{j = i;j++;
}

这段代码,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,因此这类代码都可以用O(n)来表示它的时间复杂度。

1.3 对数阶O(logN)

还是先来看代码:

int i = 1;
while(i<n)
{i = i * 2;
}

从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2n【这里是log 2的n次方,符号不会敲】
也就是说当循环 log2n【这里是log 2的n次方,符号不会敲】 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)

1.4 线性对数阶O(nlogN)

线性对数阶O(nlogN) 其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。

就拿上面的代码加一点修改来举例:

for(m=1; m<n; m++)
{i = 1;while(i<n){i = i * 2;}
}

1.5 平方阶O(n²)

平方阶O(n²) 就更容易理解了,如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。
举例:

for(x=1; i<=n; x++)
{for(i=1; i<=n; i++){j = i;j++;}
}

这段代码其实就是嵌套了2层n循环,它的时间复杂度就是 O(n*n),即 O(n²)
如果将其中一层循环的n改成m,即:

for(x=1; i<=m; x++)
{for(i=1; i<=n; i++){j = i;j++;}
}

那它的时间复杂度就变成了 O(m*n)

1.6 立方阶O(n³)、K次方阶O(n^k)

参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。

除此之外,其实还有 平均时间复杂度、均摊时间复杂度、最坏时间复杂度、最好时间复杂度 的分析方法,有点复杂,这里就不展开了。

因此在实际应用过程中,循环的嵌套和回归算法的次数是有严格的使用要求的。


二、空间复杂度

既然时间复杂度不是用来计算程序具体耗时的,那么我也应该明白,空间复杂度也不是用来计算程序实际占用的空间的。

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。

空间复杂度比较常用的有:O(1)、O(n)、O(n²),我们下面来看看:

2.1 空间复杂度 O(1)

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
举例:

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)

2.2 空间复杂度 O(n)

我们先看一个代码:

int[] m = new int[n]
for(i=1; i<=n; ++i)
{j = i;j++;
}

这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)

内存溢出错误

实际过程中,尤其是内存溢出错误,是现场很头疼的问题,所以对空间复杂度在进行设计和评估时也要进行衡量和估算。

三、指数型函数与实际应用的结合

作为一名以解决实际问题为导向的产品,函数图像尤其是课程中的指数型函数在对传媒,病毒防控,舆情管控的数据统计和分析,以及方案决策上有着广泛的应用。

3.1 指数型函数对传播学的应用

3.1.1 病毒传播研究模型

在病毒传播学领域,研究病毒的传播算法,及其图形化决策也有重要的指导意义。
假设感染的数量是可以稳定的。稳定与两个因素有关:
一、施加在粒子上的感染浓度随机因子;
二、治愈时间。对于随机因子,随机量(a,b的值)设置的大,则稳定的快,设置的小则稳定的慢。
这个现象可以解释,当种群污染量达到一定程度时,会有很多粒子在随机因子的作用下随机变好,当变好的速度与感染的速度相等时,就稳定了。对于治愈时间,当然越短越好。
如果不设置这两个值,那么种群会很快被全部感染。

3.1.2 指数型函数和裂变式营运

裂变公式:


函数图形:

常见的六种营运裂变模型

  1. 助力模型

助力是目前最常用的一种裂变模型,它的好处是用户理解容易、操作简单、效果明显,常用的助力玩法主要是以下这三种:

1)砍价

用户想要以零元或超低价获得某件商品,就需要邀请好友帮忙砍价。价格从高到低,邀请人数越多,成功概率越大。做砍价裂变,前几刀的设置很关键,要让用户感觉到成功无限接近。

所以许多砍价活动,第一刀就会直接砍成90%以上,激发用户的胜负欲。

2)领红包

领红包的逻辑和砍价恰好相反,领红包是积少成多,所以在第一次攒红包的时候,需要让用户完成90%以上。当然与拼多多相反的路径,你也可以把每次助力的金额增大,而不是像拼多多每次助力一分钱的逻辑。

另外针对奖励金额,也可以根据自己的业务进行调整,比如8元,66元,88元、200元等,让用户自己进行选择。这样的好处是,用户完成简单的任务之后得到现金,验证了获得真实性,就会更加积极的去做这件事情。

3)点赞

点赞有两种形式,一种是朋友圈常见的点赞,这种点赞活动在统计上会有麻烦。好处就是你可以要求兑奖的人必须添加你的微信,这样的话,如果你发了1000份礼物,你就能成功添加1000位微信好友。

而这些人又是精准的活动参与人群,后期活动的冷启动他们都是很好的用户。另一种助力可以理解为投票,投票属于荣誉+物质性激励的行为,特别适合针对宝妈、微商代理、内容创作者。

  1. 分销模型

分销是当前最流行的玩法,万物皆可分销,人人都是代理。

对于单次活动或者小平台来说,直接做一级分销即可,把更多的利益给到推广者,比如卖门票、课程、日历、图书等,可以拿出30%,50%甚至更多作为分销者的奖励。

但对于长期经营,用户消费频次高的产品或平台,可以采用多级分销模式,目前来说就是两级比较稳妥,合法合规。另外,如果需要做用户分层运营的话,可以在分销逻辑上加上一层等级的划分。

最常见的是初中高三个等级,每个等级的晋升设置不同的条件,同时获得不同的分销奖励。

  1. 集卡模型

集福、集字或者拼图片,这类集卡获得,其实对平台本身的用户体量要求比较高。其实它更多强调平台内的用户互动,可以当成用户留存和老用户激活的一种玩法。

想把集卡活动变成拉新玩法,就需要对流程进行特殊的设计,比如新人翻倍卡。另外集卡集身份解锁这种玩法,比较适合各类游戏。

对于电商平台或者教育等相关的产品,只适合在大促、重大节日的做活动,有一定的局限性,用户激活的成本比较高。

  1. 互利模型

无论是邀请别人帮我们砍价,还是投票,都是单向的获利行为。这会让一部分推广者心里有门槛,不好意思去分享,我们都说利他主义,就得考虑助力者可以先获得什么?

所以我们看到免费送、打车券、红包,都是以用户名义送给助力者一分好礼。互利的逻辑就是助力者可以得到优惠,分享者也可以获得对应的奖励。

  1. 邀请模型

目前的玩法属于嵌套式的邀请奖励,比如邀请一位好友奖励30元。一般会把30元的现金奖励进行拆分,比如好友注册奖励5元,好友下首单奖励15元,好友二次复购奖励10元。

这能有效规避刷单,确保用户的质量。还有一种阶梯奖励的方式,比如邀请3人以内每人奖励5元,邀请3-10人以内每人奖励8元。

在单次获得奖励的基础上,可以设置业绩突破奖或者排行获得,刺激更多人冲击邀请任务。

  1. 特惠模型

我们刚才分享的裂变玩法,最终的奖励几乎都是现金驱动的。而接下来,我们以现金等价物的方式作为裂变激励的条件,和大家分享三种常见的玩法。

这三种玩法,要实现裂变的目的,就需要添加邀请好友助力的条件。比如邀请多少好友获得一元秒杀、免费领取的资格,还要加上限定的时间条件。

其中重点说下拼团的玩法,拼团可以是两人团、3人团或者是更多人参团。但要求参团的人越多,越要注意选品的受众属性。


四、总结

以上就是今天要讲的内容,本文我们详细的学习了时间和空间复杂度的算法的函数表达,以及在实际工作中指数型函数从泛型到实例。
tips:对于知识型的内容创作者来说,积累性的成长和回报曲线也如同指数型函数的曲线,必须熬过漫长的积累期,不断迭代完善和打磨,完成从0-1的积累,才能进入快速增长期,祝各位参加打开的小伙伴,“厚积薄发,破蛹成蝶”。

下一章:day4.数学之美|斐波那契数列与黄金分割

读书笔记|指数型函数对算法的影响实际应用-day3相关推荐

  1. 读书笔记(python)--图及其算法

    限于笔者技术水平,文章可能存在错漏,请各位不吝赐教,笔者会尽快改正 文章目录 前言 一.图的术语与实现 二.宽度优先(BFS)与深度优先(DFS) 1.一个简单的图 2.BFS代码 3.DFS代码 4 ...

  2. c++矩阵转置_lt;读书笔记4gt; 稀疏矩阵基础算法

    本篇为稀疏矩阵求解算法经典论著<Direct Methods for Sparse Linear System>的<读书笔记 4> Chapter 2 Basic algori ...

  3. 【读书笔记】《漫画算法》:克服对算法的恐惧,从漫画开始

    写在开头 在上小学和初高中的时候,要我写读后感这种东西,我是非常厌恶的.无非就是老师布置的一个作业,还是那种无趣且磨人的工作. 结果十多年过去了,到了工作的年纪,看书反倒是自觉地写起读后感来了,而且居 ...

  4. 掌握Python 机器学习 读书笔记 9 (流水线 算法保存)

    为什么80%的码农都做不了架构师?>>>    cha14 流水线 在机器学习里可以看到有一些必要的步骤, 这些步骤是可以作为workflow 自动化的. 而且流水线可以对每个fol ...

  5. 读书笔记-指数基金投资指南

    指数基金投资指南 1. 常见基金品种 1)指数基金 2) 行业指数基金 2. 如何挑选合适的基金 3. 如何买卖指数基金 4. 构建自己的定投计划 1. 常见基金品种 1)指数基金 指数:选股规则,按 ...

  6. 《指数基金投资指南》读书笔记---指数基金入门知识

    什么是消费? 什么是资产? 假如单位给你发了1 000元的奖金, 你拿1 000元买烟抽, 这就是消费: 如果你拿这1 000元转入了余额宝, 就是买了资产. 你买了烟等你抽完就什么都不剩了, 而余额 ...

  7. 读书笔记_《核心算法与视觉实践》冯超.电子工业出版社

    编著:冯超 知乎专栏<无痛的机器学习>https://zhuanlan.zhihu.com/hsmyy 毕业于中国科学院大学 猿辅导研究团队视觉研究负责人 小猿搜题拍照搜题负责人之一 注册 ...

  8. Guide to Data Mining 读书笔记 相似度距离算法的取舍

    http://guidetodatamining.com/guide/ch2/DataMining-ch2.pdf  第二章第31页 1.如果数据密集(所有数据几乎都有属性值,属性值量级重要),就用欧 ...

  9. 《深入理解Java虚拟机》读书笔记3--垃圾回收算法

    转载:http://blog.csdn.net/tjiyu/article/details/53983064 下面先来了解Java虚拟机垃圾回收的几种常见算法:标记-清除算法.复制算法.标记-整理算法 ...

最新文章

  1. 一文入门 Zookeeper
  2. 【Netty】Netty线程模型和EventLoop
  3. OpenCL memory object 之 Global memory (1)
  4. 《大数据》2021年第6期目次摘要
  5. sql库缓存命中率_SQL Server内存性能指标–第4部分–缓冲区高速缓存命中率和页面寿命期望
  6. Kontakt 6 for mac - 音频采样器 双版本
  7. Python 实现数据结构中的单链表,循环单链表,双链表
  8. 洛谷P2051 中国象棋
  9. sql cast函数_数据分析面试必备——SQL你掌握的怎么样?
  10. iperf3使用方法 linux,iperf3命令使用
  11. Android之——流量管理程序示例
  12. win7或者win10碰到需要administrator权限才能删除的解决办法
  13. Win10将绿色软件添加到开始菜单
  14. 图灵机器人接口实现自动回复(web版)
  15. 那些有趣的网站系列(十)
  16. 西门子LOGO PLC的通讯、数据采集知识及PLC-Recorder连接方法
  17. 笔试强训day25(数根,星际密码)
  18. cPanel在手,建站无忧
  19. Rmarkdown对电影数据集进行统计分析
  20. ROS下阿克曼转向结构车型导航应用实践(teb_local_planner)

热门文章

  1. VC++实现视频聊天:FFmpeg解码+SDL播放视频
  2. 国内外人工智能AI工具网站大全(一键收藏,应有尽有)
  3. 用myeclipse编写css,myeclipse怎么用css
  4. js实现表单验证-完整代码
  5. Android简易音乐播放器
  6. sqoop和flume的区别
  7. Excel如何将两分隔符中间数据提取出来
  8. 2019写给对象的话_写给对象的一段话暖心
  9. SDUT OJ 2718
  10. 一篇文章带你了解Web主被动攻击手段