相关疑难解决方法(0)

如何打乱项目数组但允许权重影响顺序

我正在尝试编写一个 TypeScript 函数来打乱数组。

默认情况下,我希望洗牌顺序是随机的(但受种子影响)。(我已经可以使用这个功能了function random(seed: number): number:)

但是,我还想允许通过每个项目的重量来影响订单。

换句话说,我希望默认项目权重为 1,如果一个项目的权重为 10,那么它在打乱顺序中较早出现的可能性应该增加 10 倍。

我是否正确地思考过这个问题?这是一个合理的目标吗?

我认为我需要使用 Fisher-Yates 算法,但适应于与主数组长度相同的权重数组,并且主数组将被洗牌,以便较高权重的项目更有可能首先出现。

function removeDuplicates<T>(array: T[]): T[] {
  const uniqueValues = new Set<T>();
  return array.filter((item) => {
    if (!uniqueValues.has(item)) {
      uniqueValues.add(item);
      return true;
    }

    return false;
  });
}

function duplicateItemsBasedOnWeights<T>(array: T[], weights: number[]): T[] {
  const result = [];
  for (const [index, element] of array.entries()) {
    for (let position = 0; position < weights[index]; position++) {
      result.push(element);
    }
  }

  return result;
}

export function …
Run Code Online (Sandbox Code Playgroud)

arrays random shuffle typescript fisher-yates-shuffle

6
推荐指数
1
解决办法
328
查看次数

数组或数组的加权洗牌?

使用嵌套数组中的权重对一个或多个数组进行混洗的好算法是什么?

例子:

$array = array(
  array("name"=>"John", "rank"=>3),
  array("name"=>"Bob", "rank"=>1),
  array("name"=>"Todd", "rank"=>8),
  array("name"=>"Todd", "rank"=>14),
  array("name"=>"Todd", "rank"=>4)
);
Run Code Online (Sandbox Code Playgroud)

我希望数组随机打乱,但我希望该rank值是一个权重。因此,那些数字排名较低的人更有可能位于列表的顶部。

我已经尝试了一些事情,比如遍历数组并提取使用的数组,mt_rand(mt_rand(0,$value),$value)但我认为我没有走在正确的轨道上......

php arrays random weighted

5
推荐指数
1
解决办法
1289
查看次数

按重量随机项目

例如,我有这些数据:

headings = { 
         :heading1 => { :weight => 60, :show_count => 0}
         :heading2 => { :weight => 10, :show_count => 0}
         :heading3 => { :weight => 20, :show_count => 0}
         :heading4 => { :weight => 10, :show_count => 0}
       }
total_views = 0
Run Code Online (Sandbox Code Playgroud)

现在我想根据他们的体重为每个标题服务.例如,对于第一个10请求/迭代heading1,heading3,heading2heading4将分别在顺序(按重量计)提供服务6,2,1,和1次.

对于每次迭代,服务标题的show_count将递增1,total_views也将全局递增.

你可以建议一个算法或一些红宝石代码来处理这个问题.

ruby arrays algorithm

3
推荐指数
1
解决办法
1865
查看次数