public boolean isIndependent(Node x, Node y, List<Node> z) { int[] all = new int[z.size() + 2]; all[0] = variablesMap.get(x); all[1] = variablesMap.get(y); for (int i = 0; i < z.size(); i++) { all[i + 2] = variablesMap.get(z.get(i)); } int sampleSize = data.get(0).rows(); List<Double> pValues = new ArrayList<Double>(); for (int m = 0; m < ncov.size(); m++) { TetradMatrix _ncov = ncov.get(m).getSelection(all, all); TetradMatrix inv = _ncov.inverse(); double r = -inv.get(0, 1) / sqrt(inv.get(0, 0) * inv.get(1, 1)); double fisherZ = sqrt(sampleSize - z.size() - 3.0) * 0.5 * (Math.log(1.0 + r) - Math.log(1.0 - r)); double pValue; if (Double.isInfinite(fisherZ)) { pValue = 0; } else { pValue = 2.0 * (1.0 - RandomUtil.getInstance().normalCdf(0, 1, abs(fisherZ))); } pValues.add(pValue); } double _cutoff = alpha; if (fdr) { _cutoff = StatUtils.fdrCutoff(alpha, pValues, false); } Collections.sort(pValues); int index = (int) round((1.0 - percent) * pValues.size()); this.pValue = pValues.get(index); // if (this.pValue == 0) { // System.out.println("Zero pvalue "+ SearchLogUtils.independenceFactMsg(x, y, z, // getPValue())); // } boolean independent = this.pValue > _cutoff; if (verbose) { if (independent) { TetradLogger.getInstance() .log("independencies", SearchLogUtils.independenceFactMsg(x, y, z, getPValue())); // System.out.println(SearchLogUtils.independenceFactMsg(x, y, z, getPValue())); } else { TetradLogger.getInstance() .log("dependencies", SearchLogUtils.dependenceFactMsg(x, y, z, getPValue())); } } return independent; }
public long pack(ArrayList<Integer> at) { Collections.sort(at); long a = 0; for (int i = 0; i < N; i++) { a |= (at.get(i) << (6 * i)); } return a; }
int calc(int cnt) { ArrayList<Integer> lst = new ArrayList<Integer>(); for (int i = 0; i < weight.length; ++i) if (weight[i] >= cnt) { int r = 0; for (int j = list[i].size() - 1, k = 0; k < cnt; --j, ++k) r += list[i].get(j); lst.add(r); } Collections.sort(lst); int ret = 0; for (int i = lst.size() - 1, j = 0; j < k; ++j, --i) ret += lst.get(i); return ret; }
void solve() throws IOException { n = ni(); k = ni(); w = new int[n]; c = new int[n]; for (int i = 0; i < n; ++i) { w[i] = ni(); c[i] = ni(); } for (int i = 0; i < list.length; i++) { list[i] = new ArrayList<Integer>(); } for (int i = 0; i < n; ++i) { weight[w[i]]++; list[w[i]].add(c[i]); } for (int i = 0; i < list.length; i++) { Collections.sort(list[i]); } int ret = count(); out.println(ret + " " + calc(ret)); }