首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最快地排序稀疏向量

如何最快地排序稀疏向量
EN

Stack Overflow用户
提问于 2013-10-22 19:45:07
回答 4查看 919关注 0票数 1

我有一个整数向量。向量的大小约为2k,向量中的每一个数都在0,2M的范围内,很有可能是0。

因为它是稀疏向量,我想知道是否有比常规算法更好的算法来排序向量?在这种情况下,哪种排序算法最好?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-22 19:49:24

如果你有一个2000元素的向量,不要太担心如何排序它.它很小!

也就是说,如果你有一个有n个整数的向量,每一个都在0到M之间,而且M是小的,你可以用计数排序在O(n)时间内对它进行排序。

如果向量在某个已知范围内有n个实数,并且这些数是均匀分布的,则可以使用桶分类在O(n)期望时间内对它们进行排序。

票数 2
EN

Stack Overflow用户

发布于 2013-10-22 19:54:34

这个答案可能太明显了..。

既然大多数条目都是零,那么为什么不做一个初步的交换,使所有的零在向量的一端,而非零的元素在另一端。

从向量的两端开始。从一端搜索第一个非零元素,从另一端搜索第一个零元素。交换它们,然后继续,直到这两个搜索位置相遇为止。该向量现在在集合点被划分为两部分。一个部分只包含零元素,另一部分包含非零元素。将集合点上的向量排序到非零元素上。应该有非常少的项目确实需要排序。

在对几十个元素进行排序时,实际使用的排序算法从性能角度看并没有多大区别(对于大约6个元素来说,气泡排序是很难克服的!)

票数 3
EN

Stack Overflow用户

发布于 2013-10-22 19:52:32

您描述的是一个规则的密集向量,它恰好有很多0元素。稀疏向量只存储非零元素,如果没有存储元素,则假定为0

要对稀疏向量进行排序,只需将其正常排序。2000已经很小了,但是如果您真正使用稀疏结构,并且“元素很可能是0”,那么这个数字就会小得多。

稀疏结构的一个例子是vector< pair<int, double> >,其中pair.first是索引,pair.second是值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19526924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档