dxystata 发表于 2013-1-5 15:32 
谢谢京剧兄,能否把你的算法写详细点呢!
比如有10个数(DIFF). 其中的两个(A & B)>0.
先求10个数的RANKS. 设R = RANK(A) + RANK(B).
基于这10个RANK,做不同的组合,包含单个,两两组合,直到10在一起的组合.总共应该是2**10个组合.
对每个组合判断其和是否<=R.记数出所有的满足此条件的组合数.=R1.这是单边的个数.
对于双边来讲,就是P VALUE = 2*P1/2**10.
注意在开始记数R1的时候.从1开始,因为空集合自动满足<=R 的条件.
如果R很大,超过总RANK值的一半,那就把条件转化成<= TOTAL RANK- R.
大概如此.
京剧