Pairwise(FCC算法)

找到你的另一半

都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维。

这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半。

譬如:你编程能力强,估值11分,如果以20分为最佳情侣来计算,你应该找一个设计能力强,估值为9分的女生。

那么当你遇到一个设计能力为9分的女生,千万别犹豫,大胆去表白。千万别以为后面的瓜比前面的甜哦。

举个例子:有一个能力数组[7,9,11,13,15],按照最佳组合值为20来计算,只有7+13和9+11两种组合。而7在数组的索引为0,13在数组的索引为3,9在数组的索引为1,11在数组的索引为2。

所以我们说函数:pairwise([7,9,11,13,15],20) 的返回值应该是0+3+1+2的和,即6。

我们可以通过表格来更直观地查看数组中索引和值的关系:

Index01234
Value79111315

function pairwise(arr, arg) {
  var SumArr=[];
  for(var i= 0;i<arr.length;i++){
    for(var j=i+1;j<arr.length;j++){
      if(arr[i]+arr[j]===arg){
         if(SumArr.indexOf(arr[i])%2===1){break;}
         SumArr.push(i,j);
         break;                    
      } 
    }
  }
  return Array.from(new Set(SumArr)).reduce(function(a,b){return a+=b;},0);
}

pairwise([1, 4, 2, 3, 0, 5], 7);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MATLAB 程序,用于实现 pairwise constraints 算法: ```matlab function [labels, energy] = pairwise_constraints(data, constraints, lambda) % data: 输入数据矩阵,每行表示一个样本,每列表示一个特征。 % constraints: 约束矩阵,每行表示一个约束条件,第一列是约束的第一个样本的索引,第二列是约束的第二个样本的索引,第三列是约束类型,1 表示第一个样本应比第二个样本大,-1 表示第一个样本应比第二个样本小。 % lambda: 正则化参数,控制平滑和约束的权重。 % labels: 输出标签向量,与输入数据矩阵的行数相同。 % energy: 最终能量值。 % 初始化标签向量为每个样本的中位数标签 labels = median(data, 1) > data; % 计算初始能量值 energy = compute_energy(data, labels, constraints, lambda); % 迭代优化标签向量和能量值 for i = 1:100 % 优化标签向量 labels = optimize_labels(data, labels, constraints, lambda); % 计算能量值 new_energy = compute_energy(data, labels, constraints, lambda); % 如果能量值没有变化,则退出循环 if abs(new_energy - energy) < 1e-6 break; end energy = new_energy; end end function energy = compute_energy(data, labels, constraints, lambda) % 计算能量值 % 平滑能量项 smooth_energy = sum(sum((data - labels).^2)); % 约束能量项 constraint_energy = 0; for i = 1:size(constraints, 1) if constraints(i, 3) == 1 constraint_energy = constraint_energy + max(0, labels(constraints(i, 1), :) - labels(constraints(i, 2), :)); else constraint_energy = constraint_energy + max(0, labels(constraints(i, 2), :) - labels(constraints(i, 1), :)); end end % 总能量值 energy = smooth_energy + lambda * constraint_energy; end function labels = optimize_labels(data, labels, constraints, lambda) % 优化标签向量 % 计算每个样本的邻居标签 neighbour_labels = zeros(size(data)); for i = 1:size(constraints, 1) if constraints(i, 3) == 1 neighbour_labels(constraints(i, 1), :) = neighbour_labels(constraints(i, 1), :) + labels(constraints(i, 2), :); neighbour_labels(constraints(i, 2), :) = neighbour_labels(constraints(i, 2), :) + labels(constraints(i, 1), :); else neighbour_labels(constraints(i, 1), :) = neighbour_labels(constraints(i, 1), :) + labels(constraints(i, 2), :); neighbour_labels(constraints(i, 2), :) = neighbour_labels(constraints(i, 2), :) + labels(constraints(i, 1), :); end end % 计算每个样本的邻居数量 neighbour_counts = sum(constraints(:, 3) ~= 0); neighbour_counts(neighbour_counts == 0) = 1; % 计算每个样本的平均邻居标签 neighbour_labels = neighbour_labels ./ neighbour_counts; % 更新标签向量 labels = (data + lambda * neighbour_labels) > median(data, 1); end ``` 这个程序实现了 pairwise constraints 算法,其中 `data` 是输入数据矩阵,`constraints` 是约束矩阵,`lambda` 是正则化参数。该算法通过迭代优化标签向量和能量值来最小化平滑能量项和约束能量项的和,从而得到最终的标签向量和能量值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值