我有一組實體,我需要將這些實體分組,稱爲specie
。所有物種的集合定義爲調用Universe
,並且一個實體必須屬於一個且只有一個種類。爲此,我有一個名爲f
的布爾型不靈敏函數,如果通過參數傳遞的兩個實體是兼容的,則返回該函數。 A specie
由一組實體相互定義,並且由一組物種定義,這些物種彼此不完全相容,假設兩個物種的兼容性由其所有實體的兼容性定義。找到最佳的兼容元素組的算法
如何確定包含給定實體集可能的最小物種數的宇宙?
我嘗試如下,我的函數返回一個有效的宇宙,但不是最小的物種數量可能。
public class Specie {
private List<Entity> individuals;
public Specie() {
this.individuals = new ArrayList<>();
}
public boolean matches(Entity e) {
for (Entity s : this.individuals) {
if (!f(s, e)) {
return false;
}
}
return true;
}
public void add(Entity i) {
this.individuals.add(i);
}
}
private static int numberOfSpeciesRecursive(List<Entity> entities, List<Specie> universe) {
if (entities.size() == 0) {
return 0;
} else {
List<Entity> remains = new ArrayList<>();
Specie specie = new Specie();
for (Entity e : entities) {
if (specie.matches(e)) {
specie.add(e);
} else {
remains.add(e);
}
}
universe.add(specie);
return 1 + numberOfSpeciesRecursive(remains, universe);
}
}
btw:物種的單數是物種。硬幣是一個完全不同的詞。 – ciamej
不幸的是,你的解決方案是'O(n^3)'而我的是'O(n^4)'。如果性能對您來說是一個問題,我可能會想到一個更快的計算方法。 – ciamej
你能提供什麼是輸入和什麼是輸出。而複雜性應該是什麼。 – codebusta