最近在写matlab代码转c++,会遇到一些重写的函数。
复写首先要了解randperm函数在matlab中的实现机理。
以下是函数原定义:
所以代码是基于rand函数和sort函数实现的。
首先由rand函数生成随机数:
>> y=rand(1, 6)y = 0.4103 0.8936 0.0579 0.3529 0.8132 0.0099然后sort进行排序并返回排序后的元素在原数组的位置。
>> [ignore,p] = sort(y)ignore = 0.0099 0.0579 0.3529 0.4103 0.8132 0.8936p = 6 3 4 1 5 2rand默认升序排序。而最小的0.0099在原数组的位置是6,所以位置数组第一个值为6。
把位置数组p返回,就得到了1到n的无序数组。
但是如果传入两个参数,randperm[a,b]
实现的是从1~a中随机产生b个不重复的整数。
而我要实现的,就是双参数的形式。
那么接下来要看c++的实现:
参照百度百科中的实现思路
生成100个随机数,打乱后取前10个。即完成了从1-100中随机取10个数的功能。
除此之外,还有很多方法。
参考:
https://www.jianshu.com/p/fd23141df09a
https://www.cnblogs.com/salan668/p/3652532.html
https://blog.csdn.net/andy_songlin/article/details/6552674
https://www.cnblogs.com/afarmer/archive/2011/05/01/2033715.html