我刚刚是不是在JavaScript上排序了O(n)
Did I just sort in O(n) on JavaScript?
使用下划线库,我试图滥用JavaScript对象的索引,以便对整数或字符串的数组a
进行排序:
_(a).chain().indexBy(_.identity).values().value()
我意识到这是一种"hack",但它实际上在O(n)时间内产生了一个排序数组…
我在做梦吗?
您实际上没有对任何内容进行排序。
相反,您正在构建一个哈希表并按哈希顺序遍历它,这可能与某些集合的排序顺序相同。
可以使用桶排序http://en.wikipedia.org/wiki/Bucket_sort按O(n)排序,我相信这就是您在这里试图写的,但如上所述,您不能依赖于对象值的顺序。
如果值的数量有限,可以在O(n)内以这种方式排序
你的算法是不是比较排序:
比较排序是一种只读取对象的排序算法通过单个抽象比较操作(通常是a)列出元素"小于或等于"操作符或三方比较)决定两个元素中哪一个应该在决赛中先出现排序列表。
你在你的算法中使用关于值结构的知识(即知道它们是整数或字符串),通过使用这些整数/字符串作为索引。您没有遵守对比较排序施加的限制,因此您在时间复杂度上不受O(n log n)
边界的限制。
是的,你做梦:-)
很难相信你会偶然发现这样一个圣杯。如果该操作序列是基于比较的排序,知道这些东西的人实际上已经证明了它不能在O(n)时间内完成。
我强烈建议你运行数据集大小为10,100,1000等的代码,你会看到你的假设是不正确的。
然后检查你的是否真的在对数组进行排序,或者这只是它的组织的一个工件。似乎很可能indexBy
只是简单地创建一个索引结构,其中顺序恰好是您想要的排序顺序,而不是保证所有输入的东西。
相关文章:
- 我是不是一直在为图像标签强制固定图像大小
- JS请求-这是不是过时了
- 在javascript中使用覆盖变量是不是一种糟糕的做法
- 用Javascript在forEach中设置开关是不是一种糟糕的做法
- 在JavaScript/jQuery中将DOM元素设置为全局变量是不是一种糟糕的编程实践
- 我是不是用javascript循环向页面写入了太多数据
- 是不是;t JavaScript setTimeout和setInterval存在一些潜在的安全漏洞
- 我的Javascript不起作用.我不知道它是不是函数,我是怎么调用它的,我用了什么CSS之类的
- Javascript识别浏览器平台是桌面还是移动平台(可能是/不是来自设备宽度-高度)
- javascript中太多的自调用函数是不是一件坏事?
- 当页面在顶部的图像是不隐藏javascript
- 为了样式化的目的,在内联元素中使用封装javascript是不是不好的做法?
- 使用单独的JavaScript对象让数据在许多其他JS对象之间共享是不是更好?
- 我刚刚是不是在JavaScript上排序了O(n)
- 将JavaScript Array.prototype.map与作用域变量一起使用是不是一种糟糕的做法
- 从内部重新分配JavaScript函数是不是一种糟糕的做法
- Javascript单变量模式.我是不是超载了
- Nodejs和socket.io,是不是纯粹的javascript
- 为一个Javascript库使用两个CDN是不是很糟糕
- 是不是;t使用JavaScript进行输入消毒毫无意义