[ Skill ] append1, append, nconc, tconc, lconc, cons 效率对比
https://www.cnblogs.com/yeungchie/
先说结论:cons > tconc, lconc >> nconc > append1, append
append1
let((a)
ycTime(
for(i 1 fix(3e4)
a = append1(a i)
)
)
length(a)
)
; UserTime : 12.108453s
; SysTime : 0.000000s
; WallClock : 12.104178s
; 30000
append
let((a)
ycTime(
for(i 1 fix(3e4)
a = append(a list(i))
)
)
length(a)
)
; UserTime : 13.654966s
; SysTime : 0.000000s
; WallClock : 13.651223s
; 30000
append1, append这两个函数操作写链表速度奇慢,因为它每次追加元素都需要把整个链表遍历一次。
唯一的好处就是对初学者友好,容易理解和使用,因此在知道数据量不大的前提下,才去使用这两个函数吧。
nconc
let((a)
ycTime(
for(i 1 fix(3e4)
a = nconc(a list(i))
)
)
length(a)
)
; UserTime : 2.995670s
; SysTime : 0.000000s
; WallClock : 2.994434s
; 30000
相比
append快了一点,但也没有快很多,毕竟只追加 30000 次。
它对于输入变量是具有破坏性的,会直接修改变量,而不像append在底层会将数据进行拷贝,因此会快一些,更省内存。
tconc
let((a)
ycTime(
for(i 1 fix(3e4)
a = tconc(a i)
)
a = car(a)
)
length(a)
)
; UserTime : 0.001871s
; SysTime : 0.000000s
; WallClock : 0.001871s
; 30000
tconc会保留链表中最后一个节点,当追加列表时直接操作该节点,因此不需要反复遍历整个链表。car指向我们期望的链表。
在上面的情况下,相比append快了近 5000 倍,已经没有可比性了,所以后面函数把追加次数调整为 60000000 来比较。
let((a)
ycTime(
for(i 1 fix(6e7)
a = tconc(a i)
)
a = car(a)
)
length(a)
)
; UserTime : 4.085272s
; SysTime : 0.000189s
; WallClock : 4.083197s
; 60000000
lconc
let((a)
ycTime(
for(i 1 fix(6e7)
a = lconc(a list(i))
)
a = car(a)
)
length(a)
)
; UserTime : 4.741206s
; SysTime : 0.000000s
; WallClock : 4.740194s
; 60000000
两者区别在于,
tconc拼接的是一个标量,lconc拼接的是一个链表。
速度相差不大,看情况来使用吧。
cons
let((a)
ycTime(
for(i 1 fix(6e7)
a = cons(i a)
)
)
length(a)
)
; UserTime : 1.865164s
; SysTime : 0.000000s
; WallClock : 1.865343s
; 60000000
这个函数又快不少,它是将元素追加到链表开头,因此不需要遍历元素,也不需要记忆节点。
由于是向前追加,元素顺序可能会跟我们期望的相反,这时候就需要降链表翻转一下,看看速度。
let((a)
ycTime(
for(i 1 fix(6e7)
a = cons(i a)
)
a = reverse(a)
)
length(a)
)
; UserTime : 3.655040s
; SysTime : 0.000000s
; WallClock : 3.649090s
; 60000000
翻转增加了一点耗时,速度跟
tconc和lconc差不多。
[ Skill ] append1, append, nconc, tconc, lconc, cons 效率对比的更多相关文章
- python中列表的insert和append的效率对比
python中insert和append方法都可以向列表中插入数据只不过append默认插入列表的末尾,insert可以指定位置插入元素. 我们来测试一下他俩插入数据的效率: 测试同时对一个列表进行插 ...
- Snapman系统中TCC执行效率和C#执行效率对比
Snapman集合了TCC编译器可以直接编译执行C语言脚本,其脚本执行效率和C#编译程序进行效率对比,包括下面4方面: 1.函数执行效率 2.数字转换成字符串 3.字符串的叠加 4.MD5算法 这是C ...
- 进程and线程and协程效率对比
1.进程与进程池的效率对比 多进程:p.start()过程中,只是向操作系统发送一个信号,至于什么时候执行,都是操作系统的事情,操作系统接收到信号时,帮该进程申请一块内存空间+拷贝父进程的地址空间 # ...
- string中Insert与Format效率对比、String与List中Contains与IndexOf的效率对比
关于string的效率,众所周知的恐怕是“+”和StringBuilder了,这些本文就不在赘述了.关于本文,请先回答以下问题(假设都是基于多次循环反复调用的情况下):1.使用Insert与Forma ...
- FileInputStream 与 BufferedInputStream 效率对比
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3550158.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
- java中多种写文件方式的效率对比实验
一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为 ...
- golang 浮点数 取精度的效率对比
需求 浮点数取2位精度输出 实现 代码 package main import ( "time" "log" "strconv" " ...
- SIMD---SSE系列及效率对比
SSE(即Streaming SIMD Extension),是对由MMX指令集引进的SIMD模型的扩展.我们知道MMX有两个明显的缺点: 只能操作整数. 不能与浮点数同时运行(MMX使用FPU寄存器 ...
- 查询最新记录的sql语句效率对比
在工作中,我们经常需要检索出最新条数据,能够实现该功能的sql语句很多,下面列举三个进行效率对比 本次实验的数据表中有55万条数据,以myql为例: 方式1: SELECT * FROM t_devi ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
随机推荐
- iOS安全加固探讨:代码混淆、类名方法名混淆等方法
摘要:本文探讨了iOS平台下的安全保护,以及几种常见的加固方法,包括字符串加密.类名方法名混淆.程序代码混淆和加入安全SDK等.通过这些方法,我们可以有效地提高iOS应用的安全性. 引言: 随着智能手 ...
- 九、dockerfile指令讲解
系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...
- 如何实现纯网页语音视频聊天和桌面分享?(附源码,PC版+手机版)
在网页里实现文字聊天是比较容易的,但若要实现视频聊天,就比较麻烦了.本文将实现一个纯网页版的视频聊天和桌面分享的Demo,可直接在浏览器中运行,不需要安装任何插件. 一. 主要功能及支持平台 1.本D ...
- connect() failed (113: No route to host) while connecting to upstream
转载请注明出处: 用docker 搭建的服务,今天重启了一个容器之后,请求这个服务的接口都变成了 502, 但通过docker 查看日志,发现没有异常,端口也都是正常,在nginx的日志中看到了这段错 ...
- MySQL的SQL优化常用30种方法[转]
MySQL的SQL优化常用30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或< ...
- DC - 设计和工艺数据
环境建立命令与变量 综合主要的三部分:RTL\目标工艺库\约束文件 DC综合过程中timing > area,在时序满足的条件下进行面积优化 RTL一般会映射为standcell(与非门),需要 ...
- AMBA总线介绍-01
AMBA总线介绍 AMBA总线概述 AHB APB 不同IP之间的互连 1.系统总线简介 系统芯片中各个模块之间需要有接口连接,使用总线作为子系统之间共享的通信链路 优点:成本低,方便易用(通用协议, ...
- 【滤波】Kalman Filter
from: 卡尔曼滤波教程 (kalmanfilter.net) 总览 关于本教程 关于作者 关于卡尔曼滤波 为什么需要预测算法 卡尔曼滤波简介 必要的背景知识 均值和期望 方差和标准差 正态分布 随 ...
- 2023年春秋杯网络安全联赛冬季赛-CRYPTO MISC WP
浅谈:*代表未做出的,赛后复现了一下.本次题目还是挺有意思的,比赛期间做啦俩.题目有很多值得学习的东西.顺便在此记录一下.继续努力吧!! CRYPTO not_wiener(中等) 题目附件 查看代码 ...
- 【秘籍揭秘】如何高速下载游戏、Switch资源?省时省力一网打尽!
百度云盘SVIP合租啦亲爱的考研党和游戏玩家们,我今天要分享的是一份独家秘籍!你是不是常常为下载游戏或Switch资源而烦恼?是不是经常遇到下载速度慢.限速等问题,让你等待无尽?别担心,我有一个绝密的 ...