全パスの分布を数えてみた。
SQL らしい方法で(そうか?)。
(SQL Server 2012 Express Edition)
Intel Core i3 U380 1.33GHz で2分弱~3分強かかった。
—
SELECT
*
FROM
(
SELECT
level,value_sum as position ,COUNT(*) / Power(2,20-level) as Value
FROM
(
SELECT
a.level
, (
CASE WHEN t1.level <= a.level THEN t1.value ELSE 0 END
+ CASE WHEN t2.level <= a.level THEN t2.value ELSE 0 END
+ CASE WHEN t3.level <= a.level THEN t3.value ELSE 0 END
+ CASE WHEN t4.level <= a.level THEN t4.value ELSE 0 END
+ CASE WHEN t5.level <= a.level THEN t5.value ELSE 0 END
+ CASE WHEN t6.level <= a.level THEN t6.value ELSE 0 END
+ CASE WHEN t7.level <= a.level THEN t7.value ELSE 0 END
+ CASE WHEN t8.level <= a.level THEN t8.value ELSE 0 END
+ CASE WHEN t9.level <= a.level THEN t9.value ELSE 0 END
+ CASE WHEN t10.level <= a.level THEN t10.value ELSE 0 END
+ CASE WHEN t11.level <= a.level THEN t11.value ELSE 0 END
+ CASE WHEN t12.level <= a.level THEN t12.value ELSE 0 END
+ CASE WHEN t13.level <= a.level THEN t13.value ELSE 0 END
+ CASE WHEN t14.level <= a.level THEN t14.value ELSE 0 END
+ CASE WHEN t15.level <= a.level THEN t15.value ELSE 0 END
+ CASE WHEN t16.level <= a.level THEN t16.value ELSE 0 END
+ CASE WHEN t17.level <= a.level THEN t17.value ELSE 0 END
+ CASE WHEN t18.level <= a.level THEN t18.value ELSE 0 END
+ CASE WHEN t19.level <= a.level THEN t19.value ELSE 0 END
+ CASE WHEN t20.level <= a.level THEN t20.value ELSE 0 END
) AS value_sum
FROM
(VALUES(1,0),(1,1)) AS t1(level,value)
,(VALUES(2,0),(2,1)) AS t2(level,value)
,(VALUES(3,0),(3,1)) AS t3(level,value)
,(VALUES(4,0),(4,1)) AS t4(level,value)
,(VALUES(5,0),(5,1)) AS t5(level,value)
,(VALUES(6,0),(6,1)) AS t6(level,value)
,(VALUES(7,0),(7,1)) AS t7(level,value)
,(VALUES(8,0),(8,1)) AS t8(level,value)
,(VALUES(9,0),(9,1)) AS t9(level,value)
,(VALUES(10,0),(10,1)) AS t10(level,value)
,(VALUES(11,0),(11,1)) AS t11(level,value)
,(VALUES(12,0),(12,1)) AS t12(level,value)
,(VALUES(13,0),(13,1)) AS t13(level,value)
,(VALUES(14,0),(14,1)) AS t14(level,value)
,(VALUES(15,0),(15,1)) AS t15(level,value)
,(VALUES(16,0),(16,1)) AS t16(level,value)
,(VALUES(17,0),(17,1)) AS t17(level,value)
,(VALUES(18,0),(18,1)) AS t18(level,value)
,(VALUES(19,0),(19,1)) AS t19(level,value)
,(VALUES(20,0),(20,1)) AS t20(level,value)
,(VALUES (1)
,(2)
,(3)
,(4)
,(5)
,(6)
,(7)
,(8)
,(9)
,(10)
,(11)
,(12)
,(13)
,(14)
,(15)
,(16)
,(17)
,(18)
,(19)
,(20)) AS a(level)
) AS Try_Sum
GROUP BY
level,value_sum
) X
PIVOT(
MAX(value)
FOR position IN (
[0]
,[1]
,[2]
,[3]
,[4]
,[5]
,[6]
,[7]
,[8]
,[9]
,[10]
,[11]
,[12]
,[13]
,[14]
,[15]
,[16]
,[17]
,[18]
,[19]
,[20]) ) AS P
ORDER BY
level