假设列表房由0(= x)的对(x,pop)组成, 4 * L的位置和流行的人口。

我们想要最大化的目标函数是

def revenue(i):

return sum(pop * min((i-j)%(4*L), 4*L - (i-j)%(4*L)) for j,pop in houses)

朴素算法O(LN)算法简单:

max_revenue = max(revenue(i) for i in range(4*L))

但是,完全重新评估每个地点的收入是非常浪费的。

为了避免这种情况,请注意这是一个分段线性函数;所以它的导数是分段常数,不等式在两点上:

>在房子我,衍生物从斜坡变化到2 *人口[i]

>在岛上对面的位置,衍生物从斜坡变化到斜坡 – 2 *人口[i]

这使事情很简单:

>我们只需要检查实际的房屋或对面的房子,所以复杂度下降到O(N²)。

>我们知道如何更新房屋i-1到房屋i的坡度,只需要O(1)个时间。

>由于我们知道位置0的收入和斜率,并且由于我们知道如何迭代地更新斜率,所以复杂性实际上下降到O(N):在两个连续房屋/对立房屋之间,我们可以将通过距离斜率获得收入差额。

所以完整的算法是:

def algorithm(houses, L):

def revenue(i):

return sum(pop * min((i-j)%(4*L), 4*L - (i-j)%(4*L)) for j,pop in houses)

slope_changes = sorted(

[(x, 2*pop) for x,pop in houses] +

[((x+2*L)%(4*L), -2*pop) for x,pop in houses])

current_x = 0

current_revenue = revenue(0)

current_slope = current_revenue - revenue(4*L-1)

best_revenue = current_revenue

for x, slope_delta in slope_changes:

current_revenue += (x-current_x) * current_slope

current_slope += slope_delta

current_x = x

best_revenue = max(best_revenue, current_revenue)

return best_revenue

为了保持简单,我使用sorted()来合并两种类型的斜率变化,但这并不是最优的,因为它具有O(N log N)的复杂性。如果想要更好的效率,可以在O(N)时间内生成对应于对面房屋的排序列表,并将其与O(N)中的房屋列表合并(例如使用标准库的heapq.merge) 。如果要最小化内存使用情况,您也可以从迭代器而不是列表流式传输。

TLDR:该解决方案实现了O(N)的最低可行复杂度。

python 效率 算法_python – 算法(prob solve)实现最快的运行时间相关推荐

  1. python分治算法_Python算法:分治法

    本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法 本节的标题写全了就是:divide the problem instance, solve subproblems recur ...

  2. python分治算法_python算法实现-分治法

    分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 将最后子问题可以简单的直接求解----"治" 将所有子问 ...

  3. python冒泡排序时间复杂度_Python算法中的时间复杂度问题

    在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度.顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量算法占用的内存空间. 本文将从时间复杂度的概念出发,结合实际 ...

  4. python分数计算器_python算法——方程计算器小工具

    python算法--方程计算器小工具 工具介绍 方程计算器小工具使用python开发,可实现三元以内一次.二次等方程的计算,包含基本计算器的功能.可用于老师.学生.家长等快速验证方程的求解,检查学生作 ...

  5. python编程的50种基础算法_Python算法新手入门大全

    干货:GitHub标星2.6万!Python算法新手入门大全 Python已经成为最受欢迎的程序设计语言之一.自从2004年以后,python的使用率呈线性增长.2011年1月,它被TIOBE编程语言 ...

  6. python中难的算法_Python算法很难吗?python神书《算法图解》PDF电子版分享给你

    许多小伙伴后台私信说,python算法让自己很头疼,有没有可以让算法像小说一样有趣的书籍资料呢?看这里吧!小宋为大家找到了这本<算法图解>的PDF电子版!让你在学习python的路上变得轻 ...

  7. python距离向量路由算法_python算法练习——动态规划与字符串的编辑距离

    动态规划与字符串的编辑距离 动态规划 动态规划(dynamic programming)是解决多阶段决策问题常用的最优化理论,该理论由美国数学家Bellman等人在1957年提出,用于研究多阶段决策过 ...

  8. python入门算法_Python 算法入门教程

    分治算法介绍 今天我们聊一聊计算机中非常重要和常用的一种算法:分治算法.它在计算机领域应用广泛,几乎无处不在.不仅计算机领域,在信号处理领域,分而治之也是十分常见的一种信号处理方法.著名快速傅里叶变换 ...

  9. python计算四元素组合算法_python – 算法,列表元素之间的最近点

    这种方法是一种强力方法,但使用类似于Dijkstra算法的消除方法,这导致了更少的情况(使得算法最有可能快几个数量级,特别是对于大型列表或大量列表).告诉我你是否理解它,我可以澄清一下.可以在此处找到 ...

最新文章

  1. 求职该选好公司还是好上司
  2. ipywidgets库包的使用教程
  3. python安装第三方库速度慢的解决方法
  4. 发现一个控件,介绍一下
  5. Python与常见加密方式
  6. 使用VNS 使用XWINDOWS 登录远程服务器方法
  7. ActiveMQ相关存储介绍
  8. 【建议收藏】面试官贼喜欢问的 32+ vue 修饰符,你掌握几种啦?
  9. ZooKeeper使用get命令无法获取节点版本信息
  10. 剑指offer——面试题33:把数组排成最小数
  11. 统计在线人数访问人数
  12. svn使用方法以及使用教程
  13. 软件测试技术之: 白盒测试和黑盒测试
  14. 人工神经网络matlab啊6,基于MATLAB6.x的BP人工神经网络的土壤环境质量评价方法研究...
  15. 杭州第二机场选址的三个备选方案仁和、瓶窑、塘栖中选择瓶窑的理由。元芳,你怎么看?
  16. 【电子器件笔记1】电阻参数和选型
  17. b365老掉线 h3c路由器_H3C路由器频繁断线的原因及解决方法
  18. 使用Via浏览器+ADM下载器突破百度网盘下载限速
  19. 棠玥寕在剧组被拍,典雅古装照流出!
  20. 发布镜像【DockerHub或阿里云】

热门文章

  1. Java设计模式-代理模式笔记
  2. 基于Springboot+Vue网上试衣镜服装穿搭网站设计
  3. 华为云-文字识别OCR-身份证识别
  4. 爬虫+数据探索01-贝壳找房北京二手房信息数据
  5. 比子弹速度快十倍的导弹是怎么被拦截的?
  6. 1527. 患某种疾病的患者
  7. 行人重识别的代码复现
  8. postgresql 索引之 gin、btree_gin
  9. PDF不能打印怎么办?
  10. win10计算机配置在哪里打开,详细教您win10设备管理器在哪打开