我一直在玩"算法入门"教科书中的一些算法,特别是我试图让二进制堆正确地工作100%.我有一种奇怪的感觉,我正在使用的例子是不正确的,我想知道是否有人可以帮我指出正确的方向.
鉴于阵列
int[ ] arr = { 1, 2, 3, 4, 7, 8, 9, 10, 14, 16 };
Run Code Online (Sandbox Code Playgroud)
我从MaxHeapify得到的结果是
[ 16, 14, 9, 10, 7, 8, 3, 1, 4, 2 ]
Run Code Online (Sandbox Code Playgroud)
但是,在进行了一些谷歌搜索之后,我发现使用这个精确数组的人作为一个例子,期望结果如下:
[ 16, 14, 10, 8, 7, 9, 3, 2, 4, 1 ]
Run Code Online (Sandbox Code Playgroud)
令我困惑的是,我的MaxHeapify方法给出的结果满足Heap属性,但它与预期的不同.下面是我在Java中的实现
public static void BuildMaxHeap( int[ ] arr )
{
for( int i = (int)Math.floor( arr.length - 1 ); i >= 0; i-- )
MaxHeapify( arr, i );
}
public static void MaxHeapify( int[ ] arr, …Run Code Online (Sandbox Code Playgroud) 我一直试图写一个curried函数"multvec",它使用u =(u1,u2,...,un)和v =(v1,v2,...,vn)并输出u1*v1 + u2*v2 + ... + un*vn.我认为我的逻辑大多是正确的(至少它会在其他语言中......)但我一直得到一个:
stdin(11,57): error FS0001: This expression was expected to have type
'a list
but here has type
'c list * 'd list -> 'b list
Run Code Online (Sandbox Code Playgroud)
代码如下:问题显然在最后一行的产品调用中.但是,我的印象是基本情况(x*y):: []只会产生一个列表,而不是它实际生成的列表.
let rec multvec xs ys = function
| [ ], [ ] -> failwith "Both lists cannot be empty"
| x::[ ], y::[ ] -> ( x * y )::[ ]
| x::xs, y::ys -> let product = multvec xs ys
( x * y …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,其中1列可能有2个不同的值为每个ID.我想知道是否有办法找出哪些ID没有其中一个值.
这是我的数据集样本的样子.
Object ID | Relate Type
------------------------
1 | P
1 | S
2 | P
3 | S
4 | P
4 | S
Run Code Online (Sandbox Code Playgroud)
我想写一个查询,告诉我哪个Objet ID没有S的相关类型.
这是我的第一次尝试:
SELECT [obj_id], COUNT([obj_id]) AS [Successor Count]
FROM [Prim].[dbo].[relations]
WHERE [relate_type] = 'S'
GROUP BY [obj_id]
Run Code Online (Sandbox Code Playgroud)
在考虑了一点之后,我意识到这永远不会给我一个0的后继数,因为我特意查询具有相关类型为S的对象ID.知道这一点,我决定我可能需要某种子查询,然后我想出了这两个解决方案:
SELECT [obj_id]
FROM [Prim].[dbo].[relations]
WHERE NOT EXISTS
(SELECT DISTINCT [obj_id], [relate_type]
FROM [Prim].[dbo].[relations]
WHERE relate_type = 'S')
Run Code Online (Sandbox Code Playgroud)
上述解决方案没有给我正确的答案.至少我很确定它没有.无论哪种方式,在相对较小的700,000个条目的数据集上运行需要2.5分钟.
以下查询我非常肯定有效并且运行得很快.但我想知道是否有不同的方法来做到这一点.
SELECT A.[obj_id]
FROM [Prim].[dbo].[relations] A
LEFT JOIN
(SELECT DISTINCT [obj_id], [relate_type]
FROM [Prim].[dbo].[relations]
WHERE [relate_type] = …Run Code Online (Sandbox Code Playgroud)