static O analyzeBitMap_idToText; // func(long) -> S
// Looks only at the values
static void analyzeBitMap(MultiMap<Long, Long> bitMap) {
analyzeBitMap(values(bitMap.data));
}
static void analyzeBitMap(Collection<L<Long>> bitMap) {
if (bitMap.isEmpty()) ret;
new HashSet<Long> allSeen;
for (L<Long> l : bitMap)
allSeen.addAll(l);
printStruct(+allSeen);
MultiMap<Long, Long> implies = fullSelfMap(allSeen);
MultiMap<Long, Long> eq = fullSelfMap(allSeen);
for (L<Long> l : bitMap) {
HashSet<Long> set = new HashSet(l);
for (Long a : cloneList(implies.keySet())) {
bool ax = set.contains(a);
for (Long b : cloneList(implies.get(a))) {
bool bx = set.contains(b);
if (ax && !bx)
implies.remove(a, b);
}
}
for (Long a : cloneList(eq.keySet())) {
bool ax = set.contains(a);
for (Long b : cloneList(eq.get(a))) {
bool bx = set.contains(b);
if (ax != bx)
eq.remove(a, b);
}
}
}
printStruct(+implies);
//printStruct(+eq);
L<L<Long>> clusters = multiMapToClusters(eq);
for i over clusters:
print("Cluster \* i+1 */: " + struct(mapIfFunctionNotNull(analyzeBitMap_idToText, clusters.get(i))));
}
static MultiMap<Long, Long> fullSelfMap(Collection<Long> l) {
new MultiMap<Long, Long> mm;
for (Long x : l) mm.putAll(x, l);
ret mm;
}
static L<L<Long>> multiMapToClusters(MultiMap<Long, Long> mm) {
// a cluster is a list of concepts.
// first, make trivial clusters (one per item).
Map<Long, L<Long>> clusters = new TreeMap<Long, L<Long>>();
for (Long a : mm.keySet()) {
if (!clusters.containsKey(a))
clusters.put(a, ll(a));
}
// then, merge the clusters.
for (Long a : mm.keySet())
for (Long b : mm.get(a)) {
L<Long> c1 = clusters.get(a);
L<Long> c2 = clusters.get(b);
if (c1 != c2) // different clusters, need to merge!
mergeClusters(clusters, c1, c2);
}
ret asList(new HashSet<L<Long>>(clusters.values()));
}
static void mergeClusters(Map<Long, L<Long>> clusters, L<Long> c1, L<Long> c2) {
for (Long x : c2) {
clusters.put(x, c1);
c1.add(x);
}
}download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1005534 |
| Snippet name: | analyzeBitMap |
| Eternal ID of this version: | #1005534/1 |
| Text MD5: | a41a73c41a52102f55e6478537f2e7b0 |
| Author: | stefan |
| Category: | javax / logic |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2016-11-27 14:04:39 |
| Source code size: | 2265 bytes / 81 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 950 / 1199 |
| Referenced in: | #1005535 - Test analyzeBitMap #1006654 - Standard functions list 2 (LIVE, continuation of #761) |