Hash Collision

محمدرضا علاقه‌ی زیادی به بهینه بودن برنامه‌ها دارد. او که در زمینه‌ی الگوریتم بسیار خفن است، می‌داند که استفاده از hash برای نگه‌داری داده‌ها در برخی مواقع نه تنها کمکی به افزایش پرفورمنس نمی‌کند، بلکه پرفورمنس برنامه را کاهش می‌دهد. نیما که حرف محمدرضا را قبول ندارد، از او درخواست کدی کرده است تا میزان hash collision ها را ببیند. محمدرضا نیز این کار را به شما محول کرده است.

در این سؤال، یک HashSet یا HashMap به شما داده می‌شود. شما باید تعداد یکتای hash code های مقادیر موجود در HashSet یا کلیدهای موجود در HashMap را محاسبه کرده و برگردانید.

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به‌صورت زیر است:

hash-collision-checker
├── HashCollisionChecker.java
└── HashCollisionCheckerSampleTest.java
Plain text

کلاس HashCollisionChecker

این کلاس شامل دو متد زیر است که باید آن‌ها را پیاده‌سازی کنید:

محاسبه‌ی تعداد یکتای hash code های موجود در یک HashSet

public static <T> int countOfUniqueHashCodes(HashSet<T> set)
Java

این متد را طوری پیاده‌سازی کنید که با دریافت یک HashSet، تعداد یکتای hash code های مقادیر موجود در آن را برگرداند.

محاسبه‌ی تعداد یکتای hash code های موجود در یک HashSet

public static <K, V> int countOfUniqueHashCodes(HashMap<K, V> map)
Java

این متد را طوری پیاده‌سازی کنید که با دریافت یک HashMap، تعداد یکتای hash code های کلیدهای موجود در آن را برگرداند.

مثال

با اجرای متد main موجود در کلاس HashCollisionChecker:

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();
    set.add("c#c#c#c#c#c#bBc#c#c#c#bBc#");
    set.add("abcd");
    set.add("c#c#c#c#c#c#bBc#c#c#c#c#aa");
    set.add("1234");
    set.add("c#c#c#c#c#c#bBc#c#c#c#c#bB");
    System.out.println(countOfUniqueHashCodes(set)); // 3

    HashMap<String, Integer> map = new HashMap<>();
    map.put("c#c#c#c#c#c#c#aaaaaaaabBbB", 14);
    map.put("c#c#c#c#c#c#c#aaaaaaaac#c#", 12);
    map.put("c#c#c#c#c#c#c#aaaaaaaac#cc", 16);
    System.out.println(countOfUniqueHashCodes(map)); // 2
}
Java

خروجی باید به‌صورت زیر باشد:

3
2
Plain text

نکات

  • برای دریافت hash code آبجکت‌ها، می‌توانید از متد hashCode استفاده کنید.
  • تست‌های نمونه‌ی سؤال در کلاس HashCollisionCheckerSampleTest موجود هستند. با افزودن JUnit به classpath پروژه، می‌توانید آن‌ها را اجرا کنید.

آن‌چه باید آپلود کنید

پس از پیاده‌سازی متدها، فایل HashCollisionChecker.java را آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.