হামিং দুরত্বের নীচে থাকা সমস্ত জোড়াগুলির মান সন্ধান করুন


11

আমার কয়েকটি মিলিয়ন 32-বিট মান রয়েছে। প্রতিটি মানের জন্য, আমি 5 এর হাতুড়ি দুরত্বের মধ্যে অন্যান্য সমস্ত মান সন্ধান করতে চাই the নিষ্পাপ পদ্ধতির জন্য, এটি তুলনা প্রয়োজন, যা আমি এড়াতে চাই।হে(এন2)

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

11010010101001110001111001010110

01010010101001110001111001010110

যদিও তাদের হাতুড়ি দুরত্বের দূরত্ব ১. যদিও উভয় ঘোরানো হয় তখন 2 টি মানের মধ্যে হ্যামিং দূরত্ব সংরক্ষণ করা হয়, আমি অনুভব করেছি যে 32 টি বাম ঘোরানো এবং তারপরে তালিকাটি প্রত্যেক বার বাছাই করে, সম্ভবত 2 মানগুলি সম্ভবত বাছাই করা তালিকার মধ্যে কমপক্ষে একটিতে পর্যাপ্ত পরিমাণে শেষ হবে।

  1. যদিও এই পদ্ধতিটি আমাকে ভাল ফলাফল দিচ্ছে, আমি আনুষ্ঠানিকভাবে এই পদ্ধতির যথার্থতা প্রতিষ্ঠার জন্য সংগ্রাম করছি।

  2. যেহেতু আমি হ্যামিং দূরত্বের বা তারও কম মানগুলির সাথে মিল খুঁজে পাচ্ছি , তা কি আমাকে সত্যিই সমস্ত 32 বিট ঘূর্ণন করা দরকার? উদাহরণস্বরূপ, যদি কে = 1 এবং আমার উইন্ডোর আকার 1000 হয়, তবে আমাকে সর্বোচ্চ 24 বিট ঘূর্ণন করা দরকার কারণ এমনকি যদি বিভ্রান্ত বিটটি 8 টি নিম্ন অর্ডের বিটগুলির মধ্যে উপস্থিত হয় তবে ফলাফলগুলি সংখ্যা 1000 এর বেশি আলাদা হবে না।=1


মাত্র 20 সেকেন্ডের চিন্তাভাবনা থেকে ধারণা: গ্রে-কোড অনুসারে বাছাইয়ের কী হবে? 32-বিট বিটম্যাপের তালিকাটি 8-বিট বিটম্যাপের চারটি তালিকায় বিভক্ত করার এবং তারপরে আপনার কৌশলটি ব্যবহার করার বিষয়ে কী?
কার্ল ডামগার্ড আসমুসেন

1
আপনি কি খুব বড় সংখ্যক বিটম্যাপ সম্পর্কে আরও সুনির্দিষ্ট হতে পারেন? এটি , 2 30 এর কাছাকাছি বা যা কিছু? 220230
মিনার

@ মিনার: আমার কাছে এই জাতীয় 32-বিট বিটম্যাপের 3-4 মিলিয়ন আছে।
কার্তের্ক

আমি নিশ্চিত না আপনি কি জিজ্ঞাসা করছেন। আপনি কি এই বলে যে আপনি একটি অ্যারে আছে 32 অক্ষর বুলিয়ান স্ট্রিং (বড় কিন্তু সব ধারণকারী না 4 × 10 9 সম্ভব স্ট্রিং), এবং আপনি জোড়া কোনোভাবে সবচেয়ে 5 এ Hamming দূরত্ব আছে চিহ্নিত করতে চান, সম্ভবত একটি যুক্ত তালিকা তৈরি করে প্রতিটি স্ট্রিং এর জন্য কাছাকাছি-প্রতিবেশীদের সূচকের আমি ? একজন[আমি]4×109A[i].closeআমি
আন্দ্রেস সালামন

প্রযোজ্য হাইপারক्यूबগুলি ব্যতীত "চতুষ্কোণ" এর মতো একটি ধারণা রয়েছে বলে মনে করুন । অ্যালগরিদমগুলি হাইপারকিউবে ভেক্টরগুলিকে চিহ্নিত করে এবং পুনরাবৃত্তভাবে সনাক্ত করে এবং তারপরে আপনি যখন "কাছাকাছি" বিটভেেক্টর অনুসন্ধান করতে চান, আপনি কেবল "কাছাকাছি" হাইপারকিউবেস অনুসন্ধান করেন। সন্দেহ হয় এটি কোথাও অধ্যয়ন করা হয়েছে এবং একটি কাগজে .... সঠিক পদগুলি নিশ্চিত নয় ....
ভিজএন

উত্তর:


9

যেমনটি বলা হয়েছে, আপনার পদ্ধতিটি সমস্যাযুক্ত, কারণ যদি 2 বিটম্যাপে সমানভাবে ব্যবধান থাকে তবে যে কোনও ঘূর্ণায়নের ক্ষেত্রে কিছু উচ্চ আদেশের বিটগুলির মধ্যে পার্থক্য থাকবে।

আপনি আরও জটিল ফ্যাশনে বিট অবস্থানের অনুমতি দিয়ে আপনার পদ্ধতির সাধারণীকরণ করতে পারেন। প্রকৃতপক্ষে, যদি আপনি বিট একটি র্যান্ডম বিন্যাস নির্বাচন করুন, তারপর দূরত্ব সহ 2 বিটম্যাপ মধ্যে সব পার্থক্য 16 কম-অর্ডার বিট মধ্যে সম্ভাব্যতা সঙ্গে বেশী ভালো প্রদর্শিত হবে 1 / 50 । সুতরাং কয়েকশবার পুনরাবৃত্তি করা আপনার বিটম্যাপ জোড়ার একটি খুব বড় অনুপাত খুঁজে পাওয়া উচিত। প্রতিটি পরীক্ষার জন্য, পরীক্ষার জন্য জোড়ার সংখ্যা (একই 16 টি উচ্চ বিট সহ) 64 N ( N 2 22 এর জন্য ) এর কাছাকাছি।51/5064এনএন222

তবে, আমি নিম্নলিখিত পদ্ধতির চেষ্টা করব। সর্বাধিক 2 বিট পজিশনে সংশোধিত আপনার বিটম্যাপের একটি তালিকা তৈরি করুন এবং এই তালিকাটিকে বাছাই করুন। এই তালিকার মধ্যে যদি সংঘর্ষ হয় তবে আপনার দূরত্ব মধ্যে দুটি বিটম্যাপ রয়েছে । তারপরে আপনার প্রাথমিক বিটম্যাপের সমস্ত মানকে তিনটি অবস্থান সংশোধন করে এবং 5 টি দূরত্বে বিটম্যাপের জোড়া খুঁজে পেতে তালিকায় তাদের অনুসন্ধান করুন । এই পদ্ধতির মেমরির খরচ সংরক্ষণ প্রয়োজন 529 এন দ্বিতীয় দফায় অনুসন্ধান করতে উপাদান এবং উপাদানের সংখ্যা হল 4960 এন45529এন4960এন


অতিরিক্ত তথ্য:

  1. ৩২ বিট-পজিশনের এলোমেলো অনুক্রমের পরে low টি লো অর্ডার বিটের মধ্যে পার্থক্য থাকার সম্ভাবনাটি কেবল দুটি দ্বি-দ্বিফলের একটি ভাগফল: ( 16)51632
    (165)(325)0,0217
  2. মূল তালিকার প্রতিটি উপাদানগুলির জন্য তালিকাগুলি বর্ধিত তালিকায় রাখুন: উপাদানটি নিজেই, সমস্ত উপাদান একটি পজিশনে পৃথক এবং সমস্ত উপাদান দুটি পদে পৃথক (মূল উপাদান সম্পর্কিত তথ্য রাখে)। প্রতিটি উপাদানের অনুলিপিগুলির সংখ্যা এই তালিকার মধ্যে যে কোনও সংঘর্ষ (সাজানোর পরে সনাক্ত) সর্বোচ্চ4 এরদূরত্বে দুটি মূল উপাদানটির সাথে মিল রয়েছে। মনে রাখবেন যে প্রতিটি জুটি বেশ কয়েকবার সনাক্ত করা যায় সুতরাং আপনাকে নকলগুলি সরিয়ে ফেলতে হবে (তবে এটি ইতিমধ্যে আপনার প্রাথমিক অ্যালগরিদমের ক্ষেত্রেই ছিল)।1+ +32+ +(322)=529।4
  3. চূড়ান্ত পাসের জন্য, কেবলমাত্র তাদের মূল উপাদান থেকে ঠিক দূরত্ব এ থাকা উপাদানগুলির তালিকাভুক্ত তালিকাকে ছাঁটাই করা ভাল । তারপরে, প্রতিটি আসল উপাদানটির জন্য, ( 32) তৈরি করুন2উপাদান3দূরত্বেএবং সেগুলি বাড়ানো তালিকার মধ্যে অনুসন্ধান করুন। আবার, আপনার প্রতিটি নকল ( 5)সনাক্ত হতে চলেছে তাই আপনাকে নকলগুলি সরিয়ে ফেলতে হবে(323)=49603(53)=10

প্রথম পদ্ধতির জন্য, আপনি কি বলছেন যে আমি কিছু বিট ঘূর্ণন না করে কিছু প্রাক-নির্ধারিত অর্ডারে বিটম্যাপটিকে অনুমতি দিচ্ছি? আপনি কীভাবে ব্যাখ্যা করতে পারেন আপনি কীভাবে 1/50 সম্ভাবনাটি পেয়েছেন? এছাড়াও, দ্বিতীয় পদ্ধতির জন্য, আমাকে কি প্রথমে আমার তালিকার একটি সূচক তৈরি করতে হবে এবং তারপরে প্রতিটি উপাদানগুলির জন্য - (32 সি 1 + 32 সি 2) সংমিশ্রণ তৈরি করতে হবে এবং 2 এর দূরত্ব দ্বারা পৃথক সমস্ত বিটম্যাপগুলি সনাক্ত করতে এই সূচির বিপরীতে তাদের পরীক্ষা করতে হবে? আপনি যদি আরও এটি ব্যাখ্যা করতে পারেন তবে দুর্দান্ত হবে। ধন্যবাদ।
কার্তের্ক

5

মিনারের উত্তরটি দুর্দান্ত এবং সম্ভবত এই বিশেষ সমস্যার জন্য সঠিক পদ্ধতি। তবে আমি আরও একটি সম্ভাব্য পদ্ধতির কথা উল্লেখ করব:

এইচএক্স,Yএইচ(এক্স)=এইচ(Y)এইচএইচ

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

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