• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 字典统计分析,最佳时间复杂度能到达多少

字典统计分析,最佳时间复杂度能到达多少

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了时间复杂度,时间复杂度怎么算,算法的时间复杂度,冒泡排序的时间复杂度,算法的时间复杂度是指等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:字典统计分析,最佳时间复杂度能到达多少
描述:

有一堆字典,每一行为单个字典。
实现字典去重并统计次数。
如输入:

aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd
aaaa
bbbb
cccc
dddd

分析结果

aaa:2
bbb:2
ccc:2
ddd:2
aaaa:1
bbbb:1
cccc:1
dddd:1

这个题目,能做到的最佳时间复杂度是多少。先不考虑空间复杂度了。(因为按照下面的算法使用nodejs分析100W个单条数据(200W重复)时,15000ms-16000ms, 100+M的内存)

另外考虑下一个js的问题。(其实这个才是问题的重点 -_-| ,解决那个问题,不懂C/C++,所以nodejs解决)
解决上面的题目的时候使用了这样一个方法。

var str = '上面那串字典';
var lineObj = {};
var arr = str.split('\n');
for (var i = arr.length; i--;) {
  lineObj[arr[i]] = lineObj[arr[i]] ? lineObj[arr[i]] + 1 : 1;
}

这样子算是能够达到算法复杂度 O(N) 吗?
总觉得 lineObj[arr[i]] 在查询属性的时候总的耗费时间比 for 循环 arr的时候会更多。


解决方案1:

从算法的角度说,最高效的应该是用Trie(字典树)这种数据结构,它能够实现一次遍历就去重并且统计出每个单词的个数,时间复杂度是O(l1 + l2 + ... + ln),li代表每个单词的长度,也就是俗称的O(n)。而你的实现用了哈希表,他的时间复杂度可以近似的认为是O(1),但是一般比O(1)要大一点。

解决方案2:

js中对象都是用哈希表来存的,一般来说哈希表的搜索复杂度是O(1)的。
所以可以说你的算法复杂度是O(n)的,而且要完成你的任务至少遍历一遍,所以O(n)已经是最少的了。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于归并排序时间复杂度T(n) =2T(n/2)+O(n)
  • n个数,要求插入,查找最大最小值,删除最大最小值的时间复杂度都限制在Olog2n,应该用什么算法?
  • [leetcode]BinarySearchTreeIterator。什么叫平均时间复杂度为O1的函数?
  • 时间复杂度合并两个堆的复杂度为logN?
  • 递归算法时间复杂度并归排序的时间复杂度计算?
  • 递归函数(python)递归函数的时间复杂度应该怎么算?
  • 怎样降低代码的复杂度?
  • 一个要求时间复杂度ON,空间O1的排序问题
  • 一个时间复杂度和空间复杂度限定的问题
  • 字典统计分析,最佳时间复杂度能到达多少

相关文章

  • 2017-06-07 刚开始接触VBA开发,为什么我的没有串口通信控件
  • 2017-06-07 laravel使用{!!content!!}的时候要怎么防止xss攻击?
  • 2017-06-07 (python)pycharmtemplate行、块注释快捷键
  • 2017-06-07 pythonthreading开启的线程中用multiprocessing再开启多线程出现AttributeError
  • 2017-06-07 网页分页显示数据库信息
  • 2017-06-07 Python3中导入sqlite3模块报错,显示没有模块?
  • 2017-06-07 python下的MySQLdb使用
  • 2017-06-07 (golang)关于outfile这种语法怎么理解--out是ioWriter对象,file是一个interface?
  • 2017-06-07 写完codecademy上面的python教程之后该如何进阶?
  • 2017-06-07 用js生成一个长度为1000万的字符串

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 正则如何匹配换行前及其换行后内容?
    • Flask、Django的secretkey设置有什么用?
    • Codeforces:吉他手问题
    • 京东上生成100万张优惠券算法问题
    • 如何在sqlite数据表更新记录时发送邮件通知?
    • 各位大神,请看下面代码,求怎么实现求平均成绩?
    • rails3link_to:method=>:delete,:confirm=>"areyousrue?"不起作用是为什么?
    • 为什么python虚拟环境启动后依然使用全局的python和pip
    • wxPython能不能集成pyQt
    • laravel51验证规则alpha对中文无效?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有