项目中需要实现“随机查找3种不同类型的好友各1个,并且不能重复,如果某种类型的好友没有的话,用另一种类型的好友填充。哪种填充类型随便。
大家有什么比较高效点的算法。

解决方案 »

  1.   

    给你个简单的实现算法
    x[i+1]=A*x[i]%M
    简要说明一下常数A和M,注意,所有产生的数都小于M,还有就是必须给定一个初始值x[0]来产生此序列,
    x[0]就是这个随机数生成器的种子。A和M需要精心挑选,M必须为素数,否则会产生0,但是这种得出的结果是周期性的,如M=11,A=7种子x[0]=1,则序列为
     7,5,2,3,10,4,6,9,8,1,7,5,2,
    序列从M-1开始周期循环,周期T=M-1,因此你要让周期大,就必须选个大的M
    比如你要实现产生0到1的随机数,可以设M为足够大,如1000000000,然后把得到的随机数再除以M即1000000000,得到的就是0到1的随机数,M越大,随机的分布就越均衡,
    实际上M一般都取到足够大的,一般取M为2的31次方减一,即2147483647,这样产生的随机序列才均衡
    你把这个算法封装成一个类
      

  2.   

    可将好友类型那个字段group by一下。不知道楼主的表是如何设计的,最好贴出关系图
      

  3.   

    好比user表(userId,cityId,gameId,schoolId),user_friend好友表(userId,friendId)
    随机找出1个同城的,1个同游的,1个同校的。
    要求不能重复,不能为已经是好友,某种类型的没有的话由其他类型补充。
    好比同城的没有的话,就用2个同游+1个同校,如果同校再没有的话,就全用同游的补充
      

  4.   

      请问楼主是到哪里处理??  是到sql中还是在java代码中??
      

  5.   

    要命就要命在“某种类型的没有的话由其他类型补充”了。不过挺有意思期待好的解决方案学习学习good luck
      

  6.   

    是SQL还是Java随便,当然仅用SQL那更好了。随机-查询的时候随机排序下取1个,这个不难。