我知道bisect正在使用二进制搜索来保持列表排序.但是我做了一个定时测试,正在读取和排序这些值.但是,与我的知识相反,保持价值然后对它们进行排序可以通过高差异赢得时机.有经验的用户可以解释一下这种行为吗?这是我用来测试时间的代码.

import timeit

setup = """

import random

import bisect

a = range(100000)

random.shuffle(a)

"""

p1 = """

b = []

for i in a:

b.append(i)

b.sort()

"""

p2 = """

b = []

for i in a:

bisect.insort(b, i)

"""

print timeit.timeit(p1, setup=setup, number = 1)

print timeit.timeit(p2, setup=setup, number = 1)

# 0.0593081859178

# 1.69218442959

# Huge difference ! 35x faster.

在第一个过程中,我逐个获取值,而不是仅仅排序a以获得类似文件读取的行为.并且非常努力地击败平分.

解决方法:

在bisect情况下,你的算法复杂性会更差……

在bisect情况下,您有N个操作(每个操作的平均成本为log(N)以查找插入点,然后是另外的O(N)步骤以插入项目).总复杂度:O(N ^ 2).

使用sort,您只需要一个Nlog(N)步骤(加上N O(1)步骤来构建列表).总复杂度:O(Nlog(N))

还要注意,sort是在非常优化的C代码中实现的(bisect不是那么优化,因为它最终会更频繁地调用各种比较函数……)

标签:python,performance,sorting,algorithm

来源: https://codeday.me/bug/20190724/1524736.html

平分物品 python_python – 为什么平分比排序慢相关推荐

  1. 水桶平分 java_关于java:桶排序算法代码问题

    我需要在Java中实现以下内容. 输入:整数数组 输出:重新排列数组以具有以下内容: 假设原始数组中的第一个元素的值为x 在新数组中,假设x在位置I,即data[I] = x.然后,对所有x和所有j ...

  2. 【网易算法提前批】平分物品

    文章目录 一.题目描述 二.解题思路 三.C++代码 Reference 一.题目描述 现在有n个物品,每一个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人每一个人分到的物品的价值总和相同 ...

  3. 【Android控件布局】Layout 水平平分空间、垂直平分空间

    今天在论坛看到有人提问,如何让两个按钮平分一行空间. 大概效果如下: 有人说,设置宽度固定大小,这样应该可以达到效果(本人没试),但是如果使用不同分辨率的手机来看,肯定会有问题,影响用户体验. 也有人 ...

  4. Android 水平平分布局和垂直平分布局

    水平平分: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  5. 希尔排序算法python_python算法(六)希尔排序

    python算法(六)希尔排序 希称排序 问题: 将一组乱序的数列,按从小到大(从大到小)的顺序重新排列. 方法: 设定一个初始增量, 对原始数列进行分组: 对每一个分组进行排序 设置一个更小的增量 ...

  6. MYSQL实现水平分表

    mysql水平分表 本人主要以Navicat实现,具体想要高端点,可以用Sharing JDBC.Mycat去实现 水平分表 mysql水平分表 分库分表原理是什么? 为什么要分库分表? 二.水平分表 ...

  7. CIKM 2020 | 如何更为合适地评测推荐算法? Top-N物品推荐算法评测设置回顾

    来源:RUC AI Box 本文约5200字,建议阅读10分钟 本文介绍了对于不同的实验设置对评价top-N商品推荐算法的影响,并设计了一个经验性的大规模实验. 1 引言 近十年里,top-N商品推荐 ...

  8. 推荐系统技术演进趋势:召回-排序-重排

    来源:DataFunTalk 导读:推荐系统技术,总体而言,与 NLP 和图像领域比,发展速度不算太快.不过最近两年,由于深度学习等一些新技术的引入,总体还是表现出了一些比较明显的技术发展趋势.这篇文 ...

  9. mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储...

    摘自:http://blog.fens.me/mahout-recommendation-api/ 测试程序:RecommenderTest.java 测试数据集:item.csv 1,101,5.0 ...

最新文章

  1. Android真机运行错误INSTALL_FAILED_MEDIA_UNAVAILABLE
  2. DevOps \u0026 SRE 必备技能清单
  3. 浅谈.Net WebService开发
  4. mov eax,dword ptr fs:[0] 指令
  5. html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试
  6. latex公式对齐_Word 写公式最方便的方法
  7. stl:空间配置器的标准接口
  8. C#基础 数据类型 类型转换
  9. C++中 sprintf函数的用法
  10. 区块链行业被攻击怎么办?
  11. vtigerCRM 是作为一种开源CRM软件
  12. 英语语法笔记Day7——并列主从句
  13. C#执行js中的函数的问题,以sohu邮箱登陆密码js的MD5为例
  14. macbook开机密码输入正确,却提示“密码错误”无法登陆解决办法
  15. 教你在word中为一句话同时加上横线和波浪线
  16. 微信小程序小技巧系列《一》幻灯片,tab导航切换
  17. 开源协议、开源贡献协议与OpenHarmony
  18. 全国社会媒体处理大会即将召开,一文详解四天议程精华
  19. 前端和后端是如何实现交互的
  20. (附源码)springboot 在线考试系统 毕业设计461317

热门文章

  1. Linux的标志为什么是企鹅?
  2. 【基于CART的随机森林学习笔记】
  3. 退役选手的自我修养——《千与千寻》杂感
  4. 用php语言说句情话,追女孩表白情话短句大全2018 对女朋友说的很甜暖心的话句子...
  5. s3c6410 DMA驱动分析
  6. 40个视频素材网站分享,高清、4K、免费……你想要的的这里都有,快来收下这份安利~
  7. TS 小记 和 Record
  8. element多选select
  9. nlp-with-transformers系列-04_多语言命名实体识别
  10. 51单片机静态数码管和动态数码管原理及实验