- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个很大的关系,其中每个元组都有一个对应于每一列的整数值。现在我需要根据用户指定的每一列的优先级(这显然会根据用户而变化)按顺序显示这些元组。微型示例:考虑这种关系:
用户为 A、B、C 和 D 输入的优先级分别为 8、9、5 和 4,我需要确定与用户优先级最匹配的元组的顺序。到目前为止,我所想到的是按照提供的用户优先级的排序顺序应用过滤器,然后显示结果。我需要帮助以获得更准确的算法。
最佳答案
答案可能像...一样简单吗?显然,这不是答案,但我仍然一头雾水,正确的结果可能是什么......
基本上,问题归结为“哪个指标最符合用户的口味?”。
虽然我自己提供了2个指标,但任何有想法的人都可以通过给出一个指标函数来缩短他们的答案。您可以尝试以下代码,例如 http://www.tryfsharp.org/Create。
第一个(metric1
使用标量积)。虽然第二个值很小,但优先级几乎相同的第一个值在排名中上升 (6,2,3,8)。
第二个 (metric2
) 尝试与值无关,使用一些排名方法(排名在稳健估计器中,baysean,......)其中排序元组值相对位置的匹配排序后的优先级元组中的位置将获得一个数字 2^(优先级位置)作为奖励。这意味着,最高优先级排名中的匹配永远不会被较低优先级位置匹配击败。你还跟着,对吧? :)
为了进一步阐明 metric2(我相信它可以改进 - 当你需要它们时那些谷歌人在哪里?!):
[3; 2; 4; 1] [2; 1; 3; 4] ([1; 5; 9; 2] [8; 9; 5; 4])
0
[4; 1; 3; 2] [2; 1; 3; 4] ([6; 2; 3; 8] [8; 9; 5; 4])
12
[4; 3; 2; 1] [2; 1; 3; 4] ([4; 4; 4; 4] [8; 9; 5; 4])
0
在这里,您可以看到表中所有 3 个四元组的 metric2 的中间值。在最右边,您会看到优先级值元组。右数第二个,输入值元组。前两个列表显示表元组和优先级元组的排序索引(按降序排列)。
现在...一个好的匹配将具有与优先级元组相同的排序顺序。 (这个度量理论)。因此,如果表元组中的最大值位于优先级元组中最高优先级所在的位置,这会很好。对于优先级元组中的高优先级位置,这甚至更好。如果表元组中的第二高值位于优先级元组中第二高优先级值的位置,这也很好 - 但不如最高优先级上的第一个值重要......
为了避免根据优先级元组对元组中“最不重要”值的排序胜过更“重要”的值,我向指标添加了一个优先级特定值。
如果第一个优先级匹配,则其度量值为 2^4 = 16。如果第二个匹配,则为 8,则为 4,2,1。因此,即使第一个匹配失败并且所有其他匹配都匹配,一个元组也无法击败第一个位于正确位置的元组。
为了方便研究人员,我添加了一个空的 metric3
,可用于寻找更好的替代方案。
let ua,ub,uc,ud = (8,9,5,4)
let table = [ 1,5,9,2; 6,2,3,8; 4,4,4,4 ]
let metric1 (a,b,c,d) = a*ua + b * ub + c * uc + d * ud
let metric2 (a,b,c,d) =
let indices = [1;2;3;4]
let values = [a;b;c;d]
let indByValue =
List.zip indices values
|> List.sortBy (fun (i,v) -> v)
|> List.map (fun (i,v) -> i)
|> List.rev
let prioIndByValue =
List.zip indices [ua;ub;uc;ud]
|> List.sortBy (fun (i,p) -> p)
|> List.map (fun (i,p) -> i)
|> List.rev
//printfn "%A %A (%A %A)" indByValue prioIndByValue values [ua;ub;uc;ud]
let r,_ =
List.zip indByValue prioIndByValue
|> List.fold (fun (cnt,w) (x,y)-> if x = y then (cnt + (1 <<< w),w-1) else (cnt,w-1) ) (0,4)
r
let metric3 (a,b,c,d) =
// TODO: Write your favourite metric here ;)
0
let best1 = List.maxBy metric1 table
let sorted1 = List.sortBy metric1 table
let best2 = List.maxBy metric2 table
let sorted2 = List.sortBy metric2 table
let best3 = List.maxBy metric3 table
let sorted3 = List.sortBy metric3 table
//table |> List.iter (fun r -> printfn "%A" (metric2 r))
关于根据动态优先级显示结果的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516366/
滑动窗口限流 滑动窗口限流是一种常用的限流算法,通过维护一个固定大小的窗口,在单位时间内允许通过的请求次数不超过设定的阈值。具体来说,滑动窗口限流算法通常包括以下几个步骤: 初始化:设置窗口
表达式求值:一个只有+,-,*,/的表达式,没有括号 一种神奇的做法:使用数组存储数字和运算符,先把优先级别高的乘法和除法计算出来,再计算加法和减法 int GetVal(string s){
【算法】前缀和 题目 先来看一道题目:(前缀和模板题) 已知一个数组A[],现在想要求出其中一些数字的和。 输入格式: 先是整数N,M,表示一共有N个数字,有M组询问 接下来有N个数,表示A[1]..
1.前序遍历 根-左-右的顺序遍历,可以使用递归 void preOrder(Node *u){ if(u==NULL)return; printf("%d ",u->val);
先看题目 物品不能分隔,必须全部取走或者留下,因此称为01背包 (只有不取和取两种状态) 看第一个样例 我们需要把4个物品装入一个容量为10的背包 我们可以简化问题,从小到大入手分析 weightva
我最近在一次采访中遇到了这个问题: 给出以下矩阵: [[ R R R R R R], [ R B B B R R], [ B R R R B B], [ R B R R R R]] 找出是否有任
我正在尝试通过 C++ 算法从我的 outlook 帐户发送一封电子邮件,该帐户已经打开并记录,但真的不知道从哪里开始(对于 outlook-c++ 集成),谷歌也没有帮我这么多。任何提示将不胜感激。
我发现自己像这样编写了一个手工制作的 while 循环: std::list foo; // In my case, map, but list is simpler auto currentPoin
我有用于检测正方形的 opencv 代码。现在我想在检测正方形后,代码运行另一个命令。 代码如下: #include "cv.h" #include "cxcore.h" #include "high
我正在尝试模拟一个 matlab 函数“imfill”来填充二进制图像(1 和 0 的二维矩阵)。 我想在矩阵中指定一个起点,并像 imfill 的 4 连接版本那样进行洪水填充。 这是否已经存在于
我正在阅读 Robert Sedgewick 的《C++ 算法》。 Basic recurrences section it was mentioned as 这种循环出现在循环输入以消除一个项目的递
我正在思考如何在我的日历中生成代表任务的数据结构(仅供我个人使用)。我有来自 DBMS 的按日期排序的任务记录,如下所示: 买牛奶(18.1.2013) 任务日期 (2013-01-15) 任务标签(
输入一个未排序的整数数组A[1..n]只有 O(d) :(d int) 计算每个元素在单次迭代中出现在列表中的次数。 map 是balanced Binary Search Tree基于确保 O(nl
我遇到了一个问题,但我仍然不知道如何解决。我想出了如何用蛮力的方式来做到这一点,但是当有成千上万的元素时它就不起作用了。 Problem: Say you are given the followin
我有一个列表列表。 L1= [[...][...][.......].......]如果我在展平列表后获取所有元素并从中提取唯一值,那么我会得到一个列表 L2。我有另一个列表 L3,它是 L2 的某个
我们得到二维矩阵数组(假设长度为 i 和宽度为 j)和整数 k我们必须找到包含这个或更大总和的最小矩形的大小F.e k=7 4 1 1 1 1 1 4 4 Anwser是2,因为4+4=8 >= 7,
我实行 3 类倒制,每周换类。顺序为早类 (m)、晚类 (n) 和下午类 (a)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。 我创建了一个函数来获取 ISO 周数。当我给它一个日期时
假设我们有一个输入,它是一个元素列表: {a, b, c, d, e, f} 还有不同的集合,可能包含这些元素的任意组合,也可能包含不在输入列表中的其他元素: A:{e,f} B:{d,f,a} C:
我有一个子集算法,可以找到给定集合的所有子集。原始集合的问题在于它是一个不断增长的集合,如果向其中添加元素,我需要再次重新计算它的子集。 有没有一种方法可以优化子集算法,该算法可以从最后一个计算点重新
我有一个包含 100 万个符号及其预期频率的表格。 我想通过为每个符号分配一个唯一(且前缀唯一)的可变长度位串来压缩这些符号的序列,然后将它们连接在一起以表示序列。 我想分配这些位串,以使编码序列的预
我是一名优秀的程序员,十分优秀!