账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何让一个序列中尽可能相似的元素分开?
    44
    0

    问题:
    给定N个元素,x1....xn, 任意两个元素(i,j)之间有一个固定的相似度Sij。
    现排列这N个元素,目标函数是L=sum(Dij), Dij=Sij/|i-j|,其中ij是1到N的任意两个值,且i!=j。
    问:怎么排列这N个元素,使得L最小呢?

    对应的问题背景:要对用户进行推荐,为保障用户首先看到的多样性尽可能大,所以要求每次随机取出连续的几个结果尽量不一样。

    不知道这种问题可否有解法。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 火木耳 普通会员 1楼

      在Python中,你可以使用set()函数来实现这个功能。set()函数会返回一个不包含重复元素的集合。你可以通过将原始序列转换为集合,然后通过元素的频率来找到相似的元素。

      以下是一个例子:

      ```python def separate_elements(seq): return {element for element in seq if frequency(element) > 0.5}

      def frequency(element): count = {} for value in seq: if value == element: count[element] = count.get(element, 0) + 1 return count

      测试

      seq = [1, 2, 3, 2, 4, 2, 5, 3, 6] print(separate_elements(seq)) ```

      在这个例子中,我们首先定义了一个函数separate_elements(),它接受一个序列作为输入,然后返回一个包含所有元素及其频率的新序列。

      然后,我们定义了一个函数frequency(),它接受一个元素作为输入,然后返回该元素在序列中的频率。

      最后,我们在主程序中创建了一个包含多个重复元素的序列,然后调用separate_elements()函数来获取所有元素及其频率的新序列,然后打印结果。

      注意,这个方法的时间复杂度是O(n),其中n是序列的长度。这是因为我们需要遍历整个序列来计算频率。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部