小编wma*_*uez的帖子

Max Heapify算法结果

我一直在玩"算法入门"教科书中的一些算法,特别是我试图让二进制堆正确地工作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)

java algorithm

8
推荐指数
1
解决办法
2万
查看次数

F#功能 - 预期类型与实际不同

我一直试图写一个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)

f# f#-scripting f#-3.0

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

SQL Server:如何确定行是否存在值

我有一个数据集,其中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)

sql t-sql sql-server sql-server-2008

0
推荐指数
1
解决办法
106
查看次数

标签 统计

algorithm ×1

f# ×1

f#-3.0 ×1

f#-scripting ×1

java ×1

sql ×1

sql-server ×1

sql-server-2008 ×1

t-sql ×1