zipf定律,二八定律,流行度,点击率均可使用

随机生成n个数据,其数据遵循齐夫分布

一.齐夫定律概念

在自然语言的语料库里,一个单词出现的次数与它在频率表里的排名成反比。其实与八二法则有异曲同工之妙,举个例子就是说:20%的内容有着80%的访问量,80%的内容只有20%的访问量。也就是说:所有变量中,最重要的仅有20%,虽然剩余的80%占了多数,控制的范围却远低于“关键的少数”。

二.实例说明:

如果要生成50个整数,遵循zipf定律,范围在10-30之间,其结果如下:
11,17,24,10,19,14,28,28,12,14,15,15,11,17,11,21,25,12,17,26,21,14,12,23,22,12,11,26,28,25,17,16,21,28,19,22,17,29,25,24,13,21,12,23,23,14,11,21,23,18。

三.程序如下:

位置频率累加求和
void gene()
{
	float sum = 0.0;
	for (int i = 0; i < R; i++)    
	{        
		sum += C/pow((float)(i+2), A);  //位置为i的频率,一共有r个(即秩), 累加求和   
	}
	for (int i = 0; i < R; i++)    
	{        
		if (i == 0)            
			pf[i] = C/pow((float)(i+2), A)/sum;        
		else            
			pf[i] = pf[i-1] + C/pow((float)(i+2), A)/sum;    
	}
}
设置参数,范围,生成个数
void results(int n)
{
	int nums[n];
	float arr[n];
	int k;
	//产生n个数
	for (int i = 0; i < n; i++)    
	{
		int index = 0;
		int temp; 
		float data1;
		//srand( ( unsigned )time( NULL ) );
	
		int data=10+rand() %40; 
		nums[i]=data;
		cout<<data<<",";
		data1 = data*0.01;
		while (data1 > pf[index])   //找索引,直到找到一个比他小的值,那么对应的index就是随机数了
		index++;	
	}
}
设置生成个数

int main()
{    
	gene();    
	results(100);       
	return 1;
}

附完整程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devour123

愿每一份用功都可以得到回报

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值