社区
数据结构与算法
帖子详情
求高效的C/C++打散函数。
Balancer
2015-01-30 10:23:35
描述:有一个数组,数组里有1000万个数据,这些数据的取值一共有六种。
问题:如果构建一个函数,将数组内的数据比较均匀的分布。
例如:
函数输入:[a,a,a,b,c,c,c,g,f,d]
函数输出:[a,g,c,a,f,a,c,d,a,c]
备注:因为数据量特别大,希望函数的最坏情况时间复杂度尽可能的高效。
谢谢。
...全文
462
7
打赏
收藏
求高效的C/C++打散函数。
描述:有一个数组,数组里有1000万个数据,这些数据的取值一共有六种。 问题:如果构建一个函数,将数组内的数据比较均匀的分布。 例如: 函数输入:[a,a,a,b,c,c,c,g,f,d] 函数输出:[a,g,c,a,f,a,c,d,a,c] 备注:因为数据量特别大,希望函数的最坏情况时间复杂度尽可能的高效。 谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qjgdftxmu
2015-03-08
打赏
举报
回复
可以参考一下洗牌算法
斩不断的风
2015-02-22
打赏
举报
回复
random shuffle
yfk
2015-02-10
打赏
举报
回复
考虑用交换的思路去做 java 代码: public class Test { public void ArrayRandom(ArrayList<Integer> array){ for(int i = array.size()-1; i>=0; i--){ int iRandom = (int)(Math.random()*i); //交换 Integer tmp = array.get(iRandom); array.set(iRandom, array.get(i)); array.set(i, tmp); } } public static void main(String args[]) { ArrayList array = new ArrayList<Integer>(); array.add(1); array.add(1); array.add(2); array.add(2); array.add(2); array.add(2); array.add(3); array.add(4); System.out.println(array); Test test = new Test(); test.ArrayRandom(array); System.out.println(array); } }
kerbcurb
2015-02-06
打赏
举报
回复
为了防止整形数组内容重复,你也可以采取上述方法生成那个整形数组,具体是根据有无被生成过作一判断
kerbcurb
2015-02-06
打赏
举报
回复
随机生成一个整形数组,整形数组里面存你的数据的下标,然后按整形数组下标顺序访问你的数据 long intarray[10000000]; type your_data[10000000]; random(intarray);//伪代码 for (i = 0; i< M;i++) { .......=your_data[intarray[i]]; }
dianyancao
2015-02-01
打赏
举报
回复
对这6个元素按其hash计数,得到每个元素x出现的次数p(x) 之后设计一个等概率分布的随机数发生器来产生x,当生成的x的个数等于p(x)时,不再产生x 这样不用存储输出,只需一个随机数发生器及其配置数据即可得到比较均匀的分布数据
就想叫yoko
2015-02-01
打赏
举报
回复
怎么3a变4a了
精通JNI_掌握(软硬整合)控制点
首先来说明这个主题,重点是C跟Java之间的
函数
调用。大多开发者都孰悉如何从Java来调用C的
函数
,这里把重心放在C
函数
如何来调用Java的
函数
。这个主题里,一开始我先说明为何把重点放在C而来调用Java的用意,是想把系统的控制点(Control)往下移到
C++
层。我们来说明为什么会想把控制点移到
C++
层呢?
extern "C " 的作用
extern "C "只是表示这个可以被C语言调用,除了这个之外,没有什么更多含义。 因为C语言的编译器和
C++
的不同,
C++
的会有个叫做
函数
名
打散
的机制,比如
函数
:int add(int a,int b)在C++里面编译之后,就不是int add(int a,int b),而是类似:int add@WEROIUERH(int a,int b)的
函数
名,而且...
extern "C " 的作用
extern "C "只是表示这个可以被C语言调用,除了这个之外,没有什么更多含义。 因为C语言的编译器和
C++
的不同,
C++
的会有个叫做
函数
名
打散
的机制,比如
函数
:int add(int a,int b)在C++里面编译之后,就不是int add(int a,int b),而是类似:int add@WEROIUERH(int a,int b)的
函数
名,而...
数据结构与算法
32,946
社区成员
35,339
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章