基于时间的旋转
Time based rotation
我正在尝试找出做以下事情的最佳方法:
我有一个值列表:L
我想从这个列表中选择一个大小为N的子集,并每隔X分钟获得一个不同的子集(如果列表有足够的成员)。
我希望这些值是顺序选择的,或者是随机选择的,只要所有的值都被使用。
例如,我有一个列表:[google.com, yahoo.com, gmail.com]
我想选择X(本例中为2)值,并每Y分钟(现在为60分钟)旋转这些值:
0-59分钟:[google.com, yahoo.com]
60-119分钟:[gmail.com, google.com
分钟120-179:[google.com, yahoo.com]
等。
随机选择也可以,即:
0-59分钟:[google.com, gmail.com]
60-119分钟:[yahoo.com, google.com]
注意:当用户设置旋转向上时,时间纪元应为0,即0点可以在任何时间点。最后:如果可能的话,我不希望存储一组"已使用"的值或类似的东西。也就是说,我希望这件事越简单越好。
随机选择实际上比顺序选择更受欢迎,但两者都可以。最好的办法是什么?Python/伪代码或C/c++都可以。
谢谢!
您可以使用itertools
标准模块来帮助:
import itertools
import random
import time
a = ["google.com", "yahoo.com", "gmail.com"]
combs = list(itertools.combinations(a, 2))
random.shuffle(combs)
for c in combs:
print(c)
time.sleep(3600)
编辑:根据你在评论中的澄清,以下建议可能有所帮助。
您要查找的是[0,N)范围内的最大长度整数序列。您可以在Python中使用以下命令生成:
def modseq(n, p):
r = 0
for i in range(n):
r = (r + p) % n
yield r
给定一个整数n
和一个素数p
(它不是n
的因数,使得p
大于n
保证了这一点),您将得到一个从0到n
的所有整数的序列-1:
>>> list(modseq(10, 13))
[3, 6, 9, 2, 5, 8, 1, 4, 7, 0]
从那里,你可以过滤这个列表,只包括包含所需数量的1位集合的整数(参见计算32位整数中集合位数的最佳算法?建议)。然后从集合中选择将位数设置为1的元素。在您的情况下,如果N
是您的集合中的元素数量,您将使用传递n
作为2N。
给定时间T(从中可以找到序列中的位置)、N个数元素和素数p,该序列是确定的。
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 与互斥锁相比,旋转锁可以保证上下文切换
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 相机的旋转方向在一段时间后反转
- 我如何仅使用一个Arduino uno才能在同一时间和同一方向上旋转两个步进电动机
- 制作旋转器的功能,每天每分钟创建一个时间戳
- 在给定时间内插值欧拉角/旋转矩阵
- OpenGL的平移和旋转在同一时间
- 不违反标准的近恒定时间旋转
- 基于时间的旋转
- 在不占用CPU时间的非阻塞应用程序中旋转