ハッシュを使用してO(1)にタスクを実行できます。ハッシュについて深く理解するには、articleをお読みください。
Javaを使用しているので、HashMapを使用して作業を完了できます。 hashing
技法の最悪の場合の時間複雑度はO(log n)であるが、平均してO(1)であることに留意されたい。ハッシュテーブルと償却分析について知りたい方は、articleをご覧ください。
コード例:あなたが必要な属性を持つClass
を作成し、以下のようにequals
とhashCode
メソッドを実装することができます。次のようにHashMap
に続い格納値
class Rating {
public int user_id; // id of the user who rated
public int item_id; // id of the item being rated
public Rating(int user_id, int item_id) {
this.user_id = user_id;
this.item_id = item_id;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof Rating)) {
return false;
}
Rating ratingObj = (Rating) o;
return ratingObj.user_id == user_id
&& ratingObj.item_id == item_id;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + user_id;
result = 31 * result + item_id;
return result;
}
}
を[Java collections - hashCode() and equals()を読む]:
public static void main(String[] args) {
HashMap<Rating, Integer> ratingMap = new HashMap<>();
Rating rt = new Rating(1, 5); // user id = 1, item id = 5
ratingMap.put(rt, 3);
rt = new Rating(1, 2); // user id = 1, item id = 2
ratingMap.put(rt, 4);
rt = new Rating(1, 3); // user id = 1, item id = 3
ratingMap.put(rt, 5);
// now search in HashMap
System.out.println(ratingMap.get(new Rating(1, 3))); // prints 5
}
私は混乱しています。あなたはファイルかリンクされたリストから読んでいますか? – shmosel
私は答えがあなたのファイルをどのように作成しているか、そしてあなたがそれを仮定しているかによって決まると思います。たとえば、ソートされている場合は、おそらくBSTを使用できます。しかし、ファイル全体を読んだり、ファイル全体をメモリに保存したりする必要があります。 – Zymus
ファイルの内容をメモリにロードし、ハッシュテーブルなどのより効率的なデータ構造を使用できますか? – spektr