use of de.lmu.ifi.dbs.elki.database.ids.DBIDRange in project elki by elki-project.
the class WeightedQuickUnionRangeDBIDsTest method testBruteForce.
@Test
public void testBruteForce() {
final Random r = new Random(0L);
final int size = 100;
DBIDRange range = DBIDUtil.generateStaticDBIDRange(size);
UnionFind uf = new WeightedQuickUnionRangeDBIDs(range);
DBIDArrayIter i1 = range.iter(), i2 = range.iter();
int[] c = new int[size];
for (int i = 0; i < size; i++) {
c[i] = i;
}
int numc = size;
while (numc > 1) {
// Two randoms, with o1 < o2
int o2 = r.nextInt(size - 1) + 1, o1 = r.nextInt(o2);
final int c1 = c[o1], c2 = c[o2];
final boolean ufc = uf.isConnected(i1.seek(o1), i2.seek(o2));
assertEquals(c1 == c2, ufc);
// always
uf.union(i1, i2);
if (c1 != c2) {
for (int j = 0; j < size; j++) {
if (c[j] == c1) {
c[j] = c2;
}
}
--numc;
}
assertEquals(numc, uf.getRoots().size());
}
}
use of de.lmu.ifi.dbs.elki.database.ids.DBIDRange in project elki by elki-project.
the class WeightedQuickUnionStaticDBIDsTest method testTree.
@Test
public void testTree() {
DBIDRange range = DBIDUtil.generateStaticDBIDRange(8);
UnionFind uf = new WeightedQuickUnionStaticDBIDs(range);
DBIDArrayIter i1 = range.iter(), i2 = range.iter();
assertFalse(uf.isConnected(i1.seek(0), i2.seek(7)));
uf.union(i1.seek(0), i2.seek(1));
assertTrue(uf.isConnected(i1.seek(0), i2.seek(1)));
uf.union(i1.seek(2), i2.seek(3));
assertFalse(uf.isConnected(i1.seek(0), i2.seek(2)));
uf.union(i1.seek(0), i2.seek(2));
assertTrue(uf.isConnected(i1.seek(3), i2.seek(1)));
uf.union(i1.seek(4), i2.seek(5));
uf.union(i1.seek(6), i2.seek(7));
uf.union(i1.seek(4), i2.seek(6));
assertFalse(uf.isConnected(i1.seek(0), i2.seek(4)));
uf.union(i1.seek(0), i2.seek(4));
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
assertTrue(uf.isConnected(i1.seek(i), i2.seek(j)));
}
}
}
use of de.lmu.ifi.dbs.elki.database.ids.DBIDRange in project elki by elki-project.
the class MemoryDataStoreFactory method makeRecordStorage.
@Override
public WritableRecordStore makeRecordStorage(DBIDs ids, int hints, Class<?>... dataclasses) {
if (ids instanceof DBIDRange) {
DBIDRange range = (DBIDRange) ids;
Object[][] data = new Object[range.size()][dataclasses.length];
return new ArrayRecordStore(data, range);
} else {
return new MapIntegerDBIDRecordStore(ids.size(), dataclasses.length);
}
}
use of de.lmu.ifi.dbs.elki.database.ids.DBIDRange in project elki by elki-project.
the class TrivialDBIDFactory method generateStaticDBIDRange.
@Override
public DBIDRange generateStaticDBIDRange(int size) {
final int start = next.getAndAdd(size);
if (start > next.get()) {
throw new AbortException("DBID range allocation error - too many objects allocated!");
}
DBIDRange alloc = new IntegerDBIDRange(start, size);
return alloc;
}
Aggregations