স্ট্রিংগুলির জন্য ভাল হ্যাশ ফাংশন


160

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

আমি জাভাতে এটি করছি, তবে আমি কল্পনাও করব না যে এটি তার চেয়ে অনেক বেশি পার্থক্য আনবে।


4
ভাল হ্যাশ ফাংশন হ্যাশের ইনপুট এবং অ্যালগরিদমের প্রয়োজনীয়তার উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনার সমস্ত স্ট্রিং একই পাঁচটি অক্ষর দিয়ে শুরু হয় তবে এই জাতীয় হ্যাশ খুব ভাল হবে না। এটির ফলে সাধারণ বিতরণও হয়।
হোয়ারওয়াইন্ড


14
আপনি কেন Stringনিজের ব্যবহার করতে পারবেন না hashCode()?
বার্ট কায়ার্স

@WirlWind, সত্য, আমি নিশ্চিত নই যে স্ট্রিংগুলি কী থাকবে, তা ছাড়া এটি সম্ভবত ইংরেজী পাঠ্য হবে।
লিফ অ্যান্ডারসন

@ বার্ল, প্রধানত যেহেতু আমার অধ্যাপক আমাদের নিজস্ব হ্যাশ ফ্যাক্টর বাস্তবায়নের জন্য বলেছিলেন ... এবং আমি যে কারণটি জাভা ব্যবহার করতে চাইনি তা হ'ল এটি জেনেরিক ছিল, এবং আমি আরও নির্দিষ্ট একটি হ্যাশ ফ্যান্টর আরও ভাল হতে পারব বলে ধারণা করতাম।
লিফ অ্যান্ডারসন

উত্তর:


161

সাধারণত হ্যাশগুলি অঙ্কগুলি করে না, অন্যথায় stopএবং potsএকই হ্যাশ থাকবে।

এবং আপনি এটিকে প্রথম এন অক্ষরে সীমাবদ্ধ রাখবেন না কারণ অন্যথায় বাড়ি এবং ঘরগুলির একই হ্যাশ থাকবে।

সাধারণত হ্যাশগুলি মান নেয় এবং এটিকে একটি মৌলিক সংখ্যায় গুণ করে (এটি অনন্য হ্যাশগুলি উত্পন্ন করার সম্ভাবনা আরও বেশি করে তোলে) তাই আপনি যেমন কিছু করতে পারেন:

int hash = 7;
for (int i = 0; i < strlen; i++) {
    hash = hash*31 + charAt(i);
}

@ জোনাথানএসডিএফ আপনি কীভাবে বলতে পারেন যে এটি আপনাকে সর্বদা একটি অনন্য হ্যাশ কী দেয়। গাণিতিক প্রমাণ আছে কি? আমি মনে করি আমাদের আরও একটি বড় মৌলিক সংখ্যার সাথে হ্যাশ মোড নিতে হবে, অন্যথায় ওভারফ্লো সমস্যা দেখা দেয়।
devsda

17
@ দেবসদা তিনি সর্বদা অনন্য বলেছিলেন না, তিনি বলেছিলেন অনন্য হওয়ার সম্ভাবনা বেশি। কেন গুগলে একটি তাত্ক্ষণিক অনুসন্ধানে এই নিবন্ধটি প্রকাশিত হয়েছে: কম্পিউটিং লাইফ.ওয়ার্ডপ্রেস.com/2008/11/20/… জাভা স্ট্রিং হ্যাশিংয়ের জন্য কেন 31 ব্যবহার করা হয়েছে তা ব্যাখ্যা করে। কোনও গাণিতিক প্রমাণ দেওয়া হয়নি, তবে এটি কেন প্রাইমস আরও ভাল কাজ করে তা সাধারণ ধারণাটি ব্যাখ্যা করে।
ফারাপ

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

1
"হ্যাশ = হ্যাশ * 31 + চারআউট (আই);" স্পট, টপস, স্টপ, অপ্টস এবং পাত্রগুলির জন্য একই হ্যাশ উত্পাদন করে।
জ্যাক স্ট্রাব

1
@ মাক আমি বিশ্বাস করি আপনি সঠিক আছেন। আমি কি ভাবছিলাম জানি না।
জ্যাক স্ট্রাব

139

যদি এটি কোনও সুরক্ষা বিষয় হয় তবে আপনি জাভা ক্রিপ্টো ব্যবহার করতে পারেন:

import java.security.MessageDigest;

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(stringToEncrypt.getBytes());
String encryptedString = new String(messageDigest.digest());

93
খুশী হলাম। আমার কাছে একটি মেশিন-লার্নিং অ্যাপ্লিকেশন রয়েছে, একটি বৃহত কর্পাসের উপর পরিসংখ্যান এনএলপি করছে। পাঠ্যের মূল শব্দের উপর কিছু প্রাথমিক পাসের পরে মরফোলজিকাল স্বাভাবিককরণের পরে আমি স্ট্রিংয়ের মানগুলি ফেলে দিই এবং এর পরিবর্তে হ্যাশ কোড ব্যবহার করি। আমার পুরো কর্পাস জুড়ে প্রায় 600,000 অনন্য শব্দ রয়েছে এবং ডিফল্ট জাভা হ্যাশকোড ফাংশনটি ব্যবহার করে আমি প্রায় 3.5% সংঘর্ষ পাচ্ছিলাম। তবে আমি যদি স্ট্রিংয়ের মানটি SHA-256 করে এবং তারপরে হজম স্ট্রিং থেকে একটি হ্যাশকোড উত্পন্ন করি তবে সংঘর্ষের অনুপাতটি 0.0001% এর চেয়ে কম। ধন্যবাদ!
বেনজিসমথ

3
সংঘর্ষ এবং শব্দের সংখ্যা সম্পর্কে তথ্য সরবরাহ করার জন্য ধন্যবাদ। খুব উপকারী.
ফিলিপ

19
@ বেঞ্জিজিথ মিলিয়নে এক একটি খুব বড় ... "0.0001% এর চেয়ে কম" "" ঠিক 0 "বলার একটি তির্যক উপায় কি? আমি সত্যিই সন্দেহ করি যে আপনি কোনও SHA-256 সংঘর্ষ দেখেছিলেন কারণ এটি কখনই, কোথাও, কখনও দেখা যায় নি; এমনকি 160-বিট SHA-1 এর জন্য নয়। যদি আপনার দুটি স্ট্রিং থাকে যা একই SHA-256 উত্পাদন করে তবে সুরক্ষা সম্প্রদায় সেগুলি দেখতে পছন্দ করবে; আপনি বিশ্বখ্যাত ... খুব অস্পষ্ট উপায়ে। SHA ফাংশনগুলির তুলনা
টিম সিলভেস্টার

7
@ টিমসিলভেস্টার, আপনি ভুল বুঝে গেছেন। আমি SHA-256 সংঘর্ষের সন্ধান পাইনি। আমি SHA-256 গণনা করেছি এবং তারপরে ফলস বাইট সিকোয়েন্সগুলি একটি সাধারণ জাভা "হ্যাশকোড" ফাংশনে খাওয়াই, কারণ আমার 32-বিট হ্যাশ দরকার ছিল। সেখানেই আমি সংঘর্ষের সন্ধান পেয়েছি। কিছুই উল্লেখযোগ্য নয় :)
বেনজিসমথ

1
'হ্যাশিং' এবং 'এনক্রিপ্টিং' এর মধ্যে কোনও পার্থক্য নেই? আমি বুঝেছি ম্যাসেজডিজাস্ট একটি উপায় হ্যাশিং ফাংশন, তাই না? এছাড়াও, আমি যখন ফাংশনটি ব্যবহার করেছি, তখন আমি লিবারঅফিসে ফাইলটি খুললে প্রচুর জাঙ্ক ইউটিএফ অক্ষর হিসাবে হ্যাশ স্ট্রিংটি পেয়েছি। জাঙ্ক ইউটিএফ অক্ষরের পরিবর্তে হ্যাশ স্ট্রিংটি আলফানিউমেরিক অক্ষরগুলির এলোমেলো গুচ্ছ হিসাবে পাওয়া সম্ভব?
এনএভি

38

আপনার সম্ভবত স্ট্রিং.হ্যাশকোড () ব্যবহার করা উচিত ।

আপনি যদি সত্যিই নিজেকে হ্যাশকোড প্রয়োগ করতে চান:

কর্মক্ষমতা উন্নত করতে হ্যাশ কোড গণনা থেকে কোনও বস্তুর উল্লেখযোগ্য অংশগুলি বাদ দেওয়ার প্রলোভন করবেন না - জোশুয়া ব্লাচ, কার্যকর জাভা

শুধুমাত্র প্রথম পাঁচটি অক্ষর ব্যবহার করা একটি খারাপ ধারণা । ইউআরএলগুলির মতো শ্রেণিবদ্ধ নামগুলির বিষয়ে চিন্তা করুন: তাদের সবার একই হ্যাশ কোড থাকবে (কারণ তারা সকলেই "http: //" দিয়ে শুরু করেন, যার অর্থ তারা হ্যাশ মানচিত্রে একই বালতির অধীনে সঞ্চিত রয়েছে, ভয়াবহ পারফরম্যান্স প্রদর্শন করে।

" কার্যকর জাভা " থেকে স্ট্রিং হ্যাশকোডে এখানে একটি যুদ্ধকাহিনী তুলে ধরা হয়েছে :

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


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

কার্যকরী জাভা লিঙ্কটি অসম্পূর্ণ @Frederik
কিলোগ্রাম

17

আপনি যদি জাভাতে এটি করছেন তবে আপনি এটি করছেন কেন? শুধু .hashCode()স্ট্রিং কল


2
আমি এটি ক্লাসের অংশ হিসাবে করছি এবং কার্যভারের অংশটি হ'ল বিভিন্ন হ্যাশ ফাংশন লিখতে। অধ্যাপক আমাদের 'আরও ভাল'গুলির জন্য বাইরের সহায়তা পেতে বলেছিলেন।
লিফ অ্যান্ডারসন

20
আপনার যদি প্রয়োজন হয় আপনার JVM সংস্করণ এবং প্রয়োগগুলি জুড়ে সামঞ্জস্যপূর্ণ হতে হবে, আপনার উপর নির্ভর করা উচিত নয় .hashCode()। বরং কিছু পরিচিত অ্যালগরিদম ব্যবহার করুন।
স্টিফেন অস্টেরমিলার

7
এর জন্য অ্যালগরিদমটি String::hashCodeজেডিকেতে নির্দিষ্ট করা হয়েছে, সুতরাং এটি শ্রেণীর অস্তিত্বের মতোই বহনযোগ্য java.lang.String
ysavit


8

নিক দ্বারা সরবরাহিত এই ফাংশনটি ভাল তবে আপনি স্ট্রিংয়ে রূপান্তর করতে যদি নতুন স্ট্রিং (বাইট [] বাইটস) ব্যবহার করেন তবে এটি ব্যর্থ হয়েছিল। আপনি এটি করতে এই ফাংশনটি ব্যবহার করতে পারেন।

private static final char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

public static String byteArray2Hex(byte[] bytes) {
    StringBuffer sb = new StringBuffer(bytes.length * 2);
    for(final byte b : bytes) {
        sb.append(hex[(b & 0xF0) >> 4]);
        sb.append(hex[b & 0x0F]);
    }
    return sb.toString();
}

public static String getStringFromSHA256(String stringToEncrypt) throws NoSuchAlgorithmException {
    MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
    messageDigest.update(stringToEncrypt.getBytes());
    return byteArray2Hex(messageDigest.digest());
}

এটি কারও সাহায্য করতে পারে


আপনি কেবলমাত্র বাইট অ্যারেটি ম্যাসেজডিজস্ট.আপডেট () এ পাস করতে পারেন।
স্জাল

byteArray2Hex () - এটিই আমি ঠিক যা খুঁজছিলাম! অনেক অনেক ধন্যবাদ :)
ক্রিজিসিক

5
// djb2 hash function
unsigned long hash(unsigned char *str)
{
    unsigned long hash = 5381;
    int c;

    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}

উত্স ডিজেবি 2 হ্যাশ ফাংশনের পিছনে যুক্তি - এসও


1
আমি মনে করি এটি শুরু করার জন্য এটি কেবলমাত্র একটি প্রাথমিক সংখ্যা, যাতে আমাদের কম সংঘর্ষ হয়।
কর্নস্মিথ

5

এফএনভি -1 স্ট্রিংগুলির জন্য একটি ভাল হ্যাশ ফাংশন হিসাবে গুজব।

দীর্ঘ স্ট্রিংগুলির জন্য (প্রায় 200 অক্ষরের চেয়ে দীর্ঘ, বলুন), আপনি MD4 হ্যাশ ফাংশনটি থেকে ভাল পারফরম্যান্স পেতে পারেন । একটি ক্রিপ্টোগ্রাফিক ফাংশন হিসাবে, এটি প্রায় 15 বছর আগে ভেঙে গেছে, তবে অ ক্রিপ্টোগ্রাফিক উদ্দেশ্যে এটি এখনও খুব ভাল এবং আশ্চর্যজনকভাবে দ্রুত। জাভা প্রসঙ্গে, আপনাকে 16-বিট charমানগুলি 32-বিট শব্দের মধ্যে রূপান্তর করতে হবে , যেমন এই জাতীয় মানগুলিকে জোড়ায় ভাগ করে into জাভাতে এমডি 4-র একটি দ্রুত বাস্তবায়ন স্ফলিব পাওয়া যাবে । সম্ভবত শ্রেণিকক্ষের কার্যভারের প্রসঙ্গে ওভারকিল, তবে অন্যথায় চেষ্টা করার মতো মূল্য রয়েছে।


এই হ্যাশ ফাংশনটি তাই আরও ভাল যা জাভা দিয়ে আসে।
clankill3r

3

আপনি যদি শিল্পের মান বাস্তবায়ন দেখতে চান তবে আমি জাভা.সিকিউরিটি.ম্যাসেজডাইজেস্টটি দেখব

"বার্তা হজম নিরাপদ একমুখী হ্যাশ ফাংশন যা স্বেচ্ছাসেবী আকারের ডেটা গ্রহণ করে এবং একটি নির্দিষ্ট দৈর্ঘ্যের হ্যাশ মান আউটপুট দেয়" "


1

এখানে একটি লিঙ্ক রয়েছে যা অনেকগুলি বিভিন্ন হ্যাশ ফাংশন ব্যাখ্যা করে, এখন আমি আপনার বিশেষ সমস্যার জন্য ELF হ্যাশ ফাংশনটি পছন্দ করি। এটি ইনপুট হিসাবে স্বেচ্ছা দৈর্ঘ্যের একটি স্ট্রিং লাগে।


1

এসডিবিএম: এই অ্যালগরিদমটি এসডিবিএম (এনডিবিএমের একটি পাবলিক-ডোমেন রিম্পিমিলেশন) ডাটাবেস লাইব্রেরির জন্য তৈরি করা হয়েছিল

static unsigned long sdbm(unsigned char *str)
{   
    unsigned long hash = 0;
    int c;
    while (c = *str++)
            hash = c + (hash << 6) + (hash << 16) - hash;

    return hash;
}

0
         public String hashString(String s) throws NoSuchAlgorithmException {
    byte[] hash = null;
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        hash = md.digest(s.getBytes());

    } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.length; ++i) {
        String hex = Integer.toHexString(hash[i]);
        if (hex.length() == 1) {
            sb.append(0);
            sb.append(hex.charAt(hex.length() - 1));
        } else {
            sb.append(hex.substring(hex.length() - 2));
        }
    }
    return sb.toString();
}

-1

স্ট্রিংয়ের জন্য একটি ভাল হেস ফাংশন বিকাশের চেষ্টা করার সময় বিজোড় সংখ্যার সাথে কাজ করা ভাল ধারণা। এই ফাংশনটি একটি স্ট্রিং নেয় এবং একটি সূচক মান ফেরত দেয়, এখন পর্যন্ত এটির কাজটি বেশ ভাল। এবং কম সংঘর্ষ আছে। সূচকটি 0 - 300 থেকে তার চেয়েও বেশি হতে পারে তবে "ইলেক্ট্রোমেকানিকাল ইঞ্জিনিয়ারিং" এর মতো দীর্ঘ শব্দ দিয়েও আমি এখন পর্যন্ত কোনও উচ্চতা অর্জন করতে পারি নি

int keyHash(string key)
{
    unsigned int k = (int)key.length();
    unsigned int u = 0,n = 0;

    for (Uint i=0; i<k; i++)
    {
        n = (int)key[i];
        u += 7*n%31;
    }
    return u%139;
}

"বিয়ার" (0 * খ) + (1 * ই) + (2 * ক) + (3 * আর) যা আপনাকে দেবে তার মতোই আপনি আরও একটি কাজ করতে পারেন যা সূচক দ্বারা প্রতিটি অক্ষরকে পার্স গুণ করা হয় সাথে খেলতে একটি int মান। উপরের প্রথম হ্যাশ ফাংশনটি "এখানে" এবং "শুনুন" এ সংঘর্ষিত হয়েছে তবে কিছু ভাল অনন্য মূল্যবোধ দেওয়ার ক্ষেত্রে এটি দুর্দান্ত। নীচের একটিটি "এখানে" এবং "শুনুন" এর সাথে সংঘর্ষে আসে না কারণ আমি প্রতিটি অক্ষরকে সূচক দিয়ে বাড়ানোর সাথে সাথে গুণ করি।

int keyHash(string key)
{
    unsigned int k = (int)key.length();
    unsigned int u = 0,n = 0;

    for (Uint i=0; i<k; i++)
    {
        n = (int)key[i];
        u += i*n%31;
    }
    return u%139;
}

-1

এখানে আমি তৈরি একটি হ্যাশ টেবিলের জন্য একটি সাধারণ হ্যাশ ফাংশন। এটি মূলত একটি পাঠ্য ফাইল নেওয়ার জন্য এবং প্রতিটি শব্দকে একটি সূচীতে সংরক্ষণ করে যা বর্ণানুক্রমিক ক্রমের প্রতিনিধিত্ব করে।

int generatehashkey(const char *name)
{
        int x = tolower(name[0])- 97;
        if (x < 0 || x > 25)
           x = 26;
        return x;
}

এটি মূলত যা করে তা হ'ল শব্দগুলি তাদের প্রথম অক্ষর অনুসারে হ্যাশ করা হয়। সুতরাং, 'a' দিয়ে শুরু হওয়া শব্দের সাথে 0 এর একটি হ্যাশ কী পাওয়া যাবে, 'বি' 1 এবং এ জাতীয় 'z' 25 হবে umbers সংখ্যা এবং চিহ্নগুলির একটি হ্যাশ কী 26 হবে TH এই সুবিধাটি এটি প্রদান করে ; আপনি সহজেই এবং দ্রুত গণনা করতে পারেন যেখানে দেওয়া শব্দটি হ্যাশ টেবিলের সাথে বর্ণানুক্রমিক অনুসারে সূচিযুক্ত করা হবে, এর জাতীয় কিছু: কোডটি এখানে পাওয়া যাবে: https://github.com/abhijitcpatil/ জেনারাল

নিম্নলিখিত পাঠ্যটিকে ইনপুট হিসাবে প্রদান করা: অ্যাটিকাস একদিন জেমকে বলেছিলেন, "আমি বরং আপনি বাড়ির উঠোনের টিনের ক্যানগুলিতে গুলি করেছিলেন তবে আমি জানি আপনি পাখির পিছনে যাবেন। আপনি যদি তাদের আঘাত করতে পারেন তবে আপনি চান এমন সমস্ত নীল জে গুলি করুন, তবে মনে রাখবেন একটি মকিংবার্ড হত্যা করা একটি পাপ ” এটাই কেবল একবার আমি শুনেছিলাম যে অ্যাটিকাস বলতে কিছু করা পাপ, এবং আমি মিস মৌদীকে এটি সম্পর্কে জিজ্ঞাসা করেছি। "আপনার বাবার অধিকার," সে বলল। "মকিংবার্ডস আমাদের উপভোগ করার জন্য সংগীত তৈরি করা ছাড়া একটি কাজ করে না। তারা মানুষের উদ্যান খায় না, ভুট্টা পাত্রে বাসা বাঁধে না, তারা একটি কাজ করে না তবে আমাদের জন্য তাদের হৃদয় গায়। এজন্য মকিংবার্ডকে হত্যা করা পাপ।

এটি আউটপুট হবে:

0 --> a a about asked and a Atticus a a all after at Atticus
1 --> but but blue birds. but backyard
2 --> cribs corn can cans
3 --> do dont dont dont do dont do day
4 --> eat enjoy. except ever
5 --> for for fathers
6 --> gardens go
7 --> hearts heard hit
8 --> its in it. I it I its if I in
9 --> jays Jem
10 --> kill kill know
11 --> 
12 --> mockingbird. music make Maudie Miss mockingbird.”
13 --> nest
14 --> out one one only one
15 --> peoples
16 --> 17 --> right remember rather
18 --> sin sing said. she something sin say sin Shoot shot said
19 --> to Thats their thing they They to thing to time the That to the the tin to
20 --> us. up us
21 --> 
22 --> why was was want
23 --> 
24 --> you you youll you
25 --> 
26 --> Mockingbirds  Your em Id

2
একটি ভাল হ্যাশ ফাংশন বালতি জুড়ে সমান মানগুলি বিতরণ করে।
জোনাথন পিটারসন

-1

এটি কোনও সংঘর্ষ এড়াতে সক্ষম হবে এবং যতক্ষণ না আমরা গণনাগুলিতে স্থানান্তর ব্যবহার না করি ততক্ষণ তা দ্রুত হবে।

 int k = key.length();
    int sum = 0;
    for(int i = 0 ; i < k-1 ; i++){
        sum += key.charAt(i)<<(5*i);
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.