কেন '397' রিসার্পার গেটহ্যাশকোড ওভাররাইডের জন্য ব্যবহৃত হয়?


150

আপনার অনেকের মত, আমি উন্নয়ন প্রক্রিয়াটি গতি বাড়ানোর জন্য রি-শেয়ারার ব্যবহার করি। আপনি যখন এটি কোনও শ্রেণীর সমতা সদস্যদের ওভাররাইড করতে ব্যবহার করেন, তখন গেটহ্যাশকোড () এর জন্য কোড-জেন উত্পন্ন করে:

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (Key != null ? Key.GetHashCode() : 0);
            result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
            result = (result * 397) ^ ObjectId;
            return result;
        }
    }

অবশ্যই সেখানে আমার নিজস্ব কিছু সদস্য রয়েছে, তবে আমি যা জানতে চাইছি তা 397 কেন?

  • সম্পাদনা: সুতরাং আমার প্রশ্নটি আরও ভালভাবে বলা হবে, 397 প্রধান সংখ্যাটির বাইরে একটি মৌলিক সংখ্যা হওয়ার বিষয়ে কিছু আছে 'বিশেষ'?

উত্তর:


166

সম্ভবত কারণ 397 ফলাফলের ভেরিয়েবলকে অতিরিক্ত প্রবাহিত করতে এবং হ্যাশের বিটগুলিকে কিছুটা মিশ্রিত করার জন্য পর্যাপ্ত আকারের একটি প্রধান, হ্যাশ কোডগুলির আরও ভাল বিতরণ সরবরাহ করে। 397 এর মতো বিশেষ কিছু নেই যা এটিকে একই মাত্রার অন্যান্য প্রধান থেকে পৃথক করে।


73
এবং 397 খুশি। আমরা সবাই কি শুধু সুখী হতে চাই না?
রাসেল বি

2
ঠিক আছে, তবে কেন এটি প্রধান হতে হবে, এবং কেন এটি সঠিক মাত্রার হতে হবে? এটি যদি প্রধান হতে হয় তবে 2 বা 2147483647 কেন নয়? আমি অনুমান করি ভাল মিউটেশনটি (এবং এই গুণটির একমাত্র কারণ হল মিউটেশন) আমাদের প্রধান হওয়ার জন্য সংখ্যার দরকার নেই। তুলনামূলকভাবে একই সংখ্যা বা শূন্য এবং সংখ্যার জন্য আমাদের গুণক প্রয়োজন, বিশেষত স্পষ্ট নিদর্শন ছাড়াই। 397 = 110001101b মেনে চলে। মাত্রা সম্পর্কে এখনও নিশ্চিত নয়।
অ্যান্ড্রি কে

5
নিক যেমন বলেছিল, এটি সম্পর্কে বিশেষ কিছু নেই। এটি আকারের হওয়ার দরকার নেই, এটি কেবলমাত্র একটি সংখ্যা যা যথেষ্ট বড় যে আপনি একটি হ্যাশ গণনা করার সময় ফলাফল উপচে পড়বে (যেহেতু গেটহ্যাশকোড () একটি আন্তঃ 32 প্রদান করে)। প্রাইম নির্বাচন করা কেবল বিতরণের জন্য সহায়ক, আমার কাছে গণিতের ডিগ্রি নেই তাই আমি এটিকে চেষ্টা করে ব্যাখ্যা করতে যাচ্ছি না, তবে কোনও মৌলিক দ্বারা গুণনের ফলাফল হবে যা অন্য কোনও স্বেচ্ছাসেবী সংখ্যা দ্বারা গুণনের চেয়ে আরও ভালভাবে বিতরণ করা হবে।
বেন র্যান্ডাল

16

রিশার্পার যে হ্যাশ ব্যবহার করে তা দেখতে এফএনভি হ্যাশটির রূপের মতো লাগে । এফএনভি প্রায়শই বিভিন্ন প্রাইম সহ প্রয়োগ করা হয়। এফএনভির জন্য প্রাইমগুলির উপযুক্ত পছন্দ সম্পর্কে এখানে আলোচনা রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.