一个简单但是我不会的算法题

2023-11-09 16:21:26 +08:00
 YorkWong
let array = [1,2,3,4,5,6,7,8,9,10];

根据不同的 type<Int 类型> 对 array 进行乱序 。

相同的 type 值生成的乱序数组是相同的。

老哥们有法子吗?
1031 次点击
所在节点    算法
6 条回复
leavebody
2023-11-09 16:30:11 +08:00
直接这样?
random.seed(num)
makun123
2023-11-09 16:31:56 +08:00
自己定义一套根据 一个 int 值打乱的规则 就行吧
比如 输入 3 定义每遇到下标 len(array)%3 的倍数 和 array 首位 互换位置。嫌不够乱就多循环几次 每次 int 值 -1
murmur
2023-11-09 16:33:15 +08:00
看不懂你的题,但是这个不就是 shuffle 么,随便找一个实现看源码就可以了,但是看你需求还是给了种子之后 shuffle 结果唯一?
YorkWong
2023-11-09 16:34:23 +08:00
@makun123 对 有没有根据一个数打乱得比较乱的规则。
geelaw
2023-11-09 16:34:28 +08:00
首先你的描述很难读懂,不要用常见的模板/泛型参数的记号表达 type 的类型。

其次,这个题目是平凡的,如果不规定何种乱序才叫乱序,可以直接输出 array 本身。

最后,发挥数年浸淫在高考中的“解读出题人意图”的超能力,这个问题的意思大概是说 type 当作 Z/(n!) 的元素和长度为 n 的 array 的所有排列来个双射,你需要搜索的关键词是 reservoir sampling——假设 type 非负,每次令 type % i 为采样得到的随机数并把 type 替换为 floor(type / i) 并继续。搜索之后还不会再问。
zjsxwc
2023-11-09 16:36:52 +08:00
A(10,10) = 10! = 3628800 个全排序
你把 type<Int 类型>值对应到 3628800 以内的整数数字,里某个排序不就 ok 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/990302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX