是否有更简单的方法来生成除此之外的稀疏矩阵?
for (i = 0; i < 1000; i++)
{
if (rand() % 3 == 0)
{
array[i] = rand() % 3;
}
else
{
array[i] = ((rand() % 3) - 1);
}
}
感谢。
我使用数组用于表示目的
答案 0 :(得分:2)
使用a
确定您希望它的稀疏程度。
for (i = 0; i < 1000; i++)
{
if (rand() % a == 0)
{
array[i] = rand() % 100;
}
else
{
array[i] = 0;
}
}
答案 1 :(得分:0)
令t
为数组中非零元素的目标数,这应该远小于稀疏数组的长度。我假设您的数组长度为length
。我也在没有模数运算符的情况下生成随机索引,以避免模偏差。
for (i = 0; i < t; ++i) {
int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
array[index] = i % 2 ? -1 : 1;
}
请注意,这可能会产生少于t
个非零元素,因为随机数可能会产生重复,但如果它确实稀疏,则应该很少,例如,t
&lt;数组长度的平方根。如果您担心重复的random使事情比您想要的更稀疏,您可以相应地进行修改:
for (i = 0; i < t;) {
int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
if (array[index]) { /* something already at this index */
continue; /* skip incrementing and try again */
}
array[index] = i % 2 ? -1 : 1;
++i;
}
在这两种情况下,我交替使用+/- 1作为非零值,但如果你想要更随机,那么很容易替换array[index]
赋值的右侧
最后,如果我在C语法上松散了一些东西,我会问你的放纵。我的C生锈了大约15年,但意图应该是明确的。