集合所有2个U的算法名称



我正在寻找算法的名称(以及代码:在PL/SQL或PG/SQL中),该算法正在找到一个集合的所有夫妇(2-Uplets)。

示例:A -B -C结果 :1:A -B2:A -C3:b -c

我知道Powerset算法可以完成这一工作的一部分,但是我正在寻找一个优化的夫妇查找器算法。

powerset PG/SQL算法的链接:https://www.postgresql.org/message-id/20060924054759.ga71934@Winnie.fuhr.org

您是否考虑过

之类的东西
Select A.x, B.x
From YourTable as A, YourTable as B
Where A.key <> B.key

您提到SQL,因此这可能是可取的。请注意,跨产品中的行数与对数的数量大致相同,因此效率并不高。

我已经构建了解决方案:

CREATE OR REPLACE FUNCTION twouplets(a anyarray)
  RETURNS SETOF anyarray AS
$BODY$
DECLARE
    retval  a%TYPE;
    size  integer := array_upper(a, 1);
    i       integer;
    j       integer;
BEGIN
    i := 0;
    j := 1;
    FOR i IN 1 .. size LOOP
    FOR j IN 1 .. size-i LOOP
    retval := '{}';
                retval := array_append(retval, a[i]);
                retval := array_append(retval, a[i+j]);
                RETURN NEXT retval;
    END LOOP;
    END LOOP;
    RETURN; 
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE STRICT
  COST 100
  ROWS 1000;
ALTER FUNCTION twouplets(anyarray)
  OWNER TO postgres;

最新更新