大佬们,求助此情形需要使用什么算法,可以快速确立 ab 的对应关系
确认算法后,是否可以使用 java 来设计下,要求高性能,感激~
1
leavebody 2023-10-31 16:29:41 +08:00
是我的理解能力太差,还是楼主的表达能力一言难尽。。。
|
2
jifengg 2023-10-31 16:34:59 +08:00
|
3
edward1987 2023-10-31 16:36:36 +08:00
看不懂+1 ,还是具体拿一些数字举例吧
|
4
iloooo OP @edward1987 @jifengg @leavebody 补充补充:
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; double percentage = 0.6; // 60%的数据分到 a 组,40%的数据分到 b 组 最终想得到效果是: Map:{ 7 -> 1,2 8 ->3,4 9 -> 5 10 -> 6 } 因为比例关系,两个数组肯定有个多有个少,少的来 1 对多 |
6
iloooo OP @leavebody 业务上每个数字将涉及一次 “存对应关系” 和一次 “取此此数字对应其他数字”,时间维度是确认存比取早;不过构造对应关系这边有问题,数字多线程每秒产生的,归类成数组时是每分钟。所以构造时其实想得到的是一个计算标识,使得下个数字存取时动态知道了自己的存取逻辑,哈哈哈 有点绕
|
7
iloooo OP @leavebody 当然也可以把业务搞简单,所有此数组的取都必须延迟 1 分钟,这样取的时候数组对应关系已确认了,不过尽量想找到不延迟的办法
|
8
edward1987 2023-10-31 17:47:47 +08:00
大概知道你啥意思了。
先根据比例来算出多少个数字 x 算一个循环。 比如 40% 那就是 3:2 ,就是 5 个数字一个循环。x=5 。 然后进来一个数 n ,算出它在那个循环基数先,比如 3 在第一个循环,8 则是在第二个循环。但是对应 3 和 8 对应的取数逻辑是一致的。 1->2 , 3->4, 1->5 如果是第二个循环则是 6->7,8->9,6->10 当进来一个数之后 比如 24 ,循环 bias 是 20 , 取数逻辑同 4 ,所以是 23->24 |
9
dahuahua 2023-10-31 20:09:47 +08:00
我应该理解你的需求了,O(1)复杂度的公式就能计算出来。设分组后两边数组的长度分别为 a, b(a > b),实际上 a - b 就能得出能够一一对应的个数,反之能推算出 a 组中需要二次分组的长度,那么接下来就是要知道每个分组的长度是多少,这个也很好算,除一下就行了,最后再把数组的下标跟 a,b 的关系梳理一下就行了
|