لینک‌های مفید برای شرکت در مسابقه:

در طول مسابقه، می‌توانید سؤالات خود را از قسمت «سؤال بپرسید» مطرح کنید.

هش‌شمار


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 را آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.