অর্ডার উপেক্ষা করে দুটি পূর্ণসংখ্যাকে সংকুচিত করা


20

অর্ডারযুক্ত জোড় (x, y) একটি আনর্ডারড জোড় {x, y} (সেট) এর সাথে তুলনা করে, তাত্ত্বিকভাবে তথ্যগুলির মধ্যে পার্থক্যটি কেবলমাত্র একটি বিট, যেমন x প্রথম আসে বা y এর প্রতিনিধিত্ব করার জন্য ঠিক একক বিটের প্রয়োজন হয় requires

সুতরাং, যদি আমাদের এমন একটি সেট দেওয়া থাকে যেখানে {x, y} যেখানে x, y দুটি পৃথক 32-বিট পূর্ণসংখ্যা হয়, তবে আমরা কি তাদের 63 টি বিটগুলিতে (বরং 64) প্যাক করতে পারি? Bit৩ বিটের ফলাফল থেকে মূল 32 বিট পূর্ণসংখ্যার পুনরুদ্ধার করা সম্ভব হবে তবে তাদের ক্রমটি পুনরুদ্ধার করতে সক্ষম না হয়ে।

উত্তর:


27

হ্যাঁ, পারে। তাহলে , সেট মানচিত্র { এক্স , Y } নম্বরেx<y{x,y}

f(x,y)=y(y1)/2+x.

এটি সহজেই দেখানো যায় যে দ্বি দ্বিচরিত, এবং তাই এটি অনন্যভাবে ডিকোড করা যায়। এছাড়াও, যখন 0 এক্স < Y < 2 32 , আমরা 0 ( এক্স , Y ) < 2 63 - 2 31 তাই এই সেট মানচিত্র, { এক্স , Y } একটি 63-বিট নম্বরে ( এক্স , Y ) । ডিকোড করতে, আপনি y তে বাইনারি অনুসন্ধান ব্যবহার করতে পারেন , বা একটি বর্গাকার রুট নিতে পারেন: y আনুমানিক f0x<y<2320f(x,y)<263231{x,y}f(x,y)yy2f(x,y)


1
ঠিক 1 + 2 + 3 + ... + y + x এর মতো!
ট্রয় ম্যাকক্লিউর

1
আনর্ডার্ড ইনটসের কোনও সাধারণীকরণ? :) দ্বিতীয় চিন্তায়, যথেষ্ট পরিমাণে আংশিক ডেরিভেটিভসের সাথে অনেকগুলি চতুষ্পদ কাজটি করবে
ট্রয় ম্যাকক্লিউর

4
এর কম উত্তর ব্যয়ের জন্য আকর্ষণীয় হতে পারে এমন আরও একটি উত্তর: যদি xএবং yআলাদা হয় তবে হয় x-y-1বা y-x-1( অবশ্যই মোড 2 32 অবশ্যই) 31 বিটগুলিতে ফিট করে। যদি ছোট হয়, তবে সম্মতিযুক্ত এবং শেষের 31 টি বিট ; অন্যথায় সংক্ষিপ্ত এবং শেষ 31 বিট । এক নম্বর হিসাবে প্রথম 32 বিট গ্রহণ এবং প্রথম 32 বিট, গত 31 বিট, এবং ধ্রুব 1 (গেলিক ভাষার যোগ করে দুটি সংখ্যার উদ্ধার 2 32 অন্যান্য হিসাবে)। 232x-y-1yx-y-1xy-x-1232
ড্যানিয়েল ওয়াগনার

1
আপনার পদ্ধতিটি আরও সংখ্যার যোগ করার জন্য খুব সাধারণভাবে সাধারণীকরণ করেছে, কারণ প্রথম সংখ্যাটি "ঠিক আছে" তাই চেইন করতে পারে
ট্রয় ম্যাকক্লিউর

4
@ ডাব্লুডাব্লু: আপনি কীভাবে এই উপস্থাপনাটি দিয়ে এসেছেন দয়া করে যোগ করতে পারেন? অন্যথায় মনে হচ্ছে আপনি এটিকে পাতলা বাতাস থেকে টানছেন।
মেহেরদাদ

9

ডয়চে ভেলের উত্তর অতিরিক্ত হিসাবে, নোট যে এই একটি বিশেষ ক্ষেত্রে দেখা যায় সংযুক্তিকরণ সংখ্যা পদ্ধতি , যা কষে মানচিত্রের একটি কঠোরভাবে কমে ক্রম অ নেতিবাচক পূর্ণসংখ্যার > > 1 থেকে kck>>c1

N=i=1k(cii).

এই সংখ্যাটির একটি সহজ ব্যাখ্যা রয়েছে। যদি আমরা এই সিকোয়েন্সগুলি ডিক্সিকোগ্রাফিকভাবে অর্ডার করি তবে ছোট ছোট সিকোয়েন্সগুলির সংখ্যা গণনা করে।N

ডিকোড করার জন্য, কেবলমাত্র কে সর্বাধিক মান নির্ধারণ করুন যেমন এবং ডিকোড কে -সিকোয়েন্স হিসাবে।( সি কে)ckএন- ((ckk)N (কে-1)N(ckk)(k1)


4

একটি সেটে আনর্ডারড জোড়া সংখ্যার মোট সংখ্যা হ'ল । স্বতন্ত্র সংখ্যার আনর্ডার্ড জোড়গুলির মোট সংখ্যা হ'ল । লাগে বিট সংখ্যার একটি আদেশ যুগল প্রতিনিধিত্ব করতে, এবং যদি আপনি এক কম বিট আছে, আপনি আপ এর একটি স্থান উপাদান উপস্থাপন করতে পারেন । অর্ডারড নন-অগত্যা-স্বতন্ত্র জোড়গুলির সংখ্যা অর্ডারযুক্ত জোড়ার সংখ্যার অর্ধেকের চেয়ে কিছুটা বেশি যাতে আপনি উপস্থাপনায় কিছুটা সংরক্ষণ করতে পারবেন না; অর্ডারযুক্ত স্বতন্ত্র জোড়গুলির সংখ্যা অর্ধেকের তুলনায় কিছুটা কম, সুতরাং আপনি কিছুটা সংরক্ষণ করতে পারেন।এন ( এন + + 1 ) / 2 এন ( এন - 1 ) / 2 2 লগ 2 ( এন ) = log 2 ( এন 2 ) এন 2 / 2NN(N+1)/2N(N1)/22log2(N)=log2(N2)N2/2

এমন একটি ব্যবহারিক স্কিমের জন্য যা সহজেই গণনা করা যায়, 2 এর শক্তি হওয়ায় আপনি বিটওয়াইজ উপস্থাপনায় কাজ করতে পারেন। নিন যেখানে XOR যাও (, bitwise একচেটিয়া বা) অপারেটর। The জোড়াটি বা থেকে পুনরুদ্ধার করা যেতে পারে । এখন আমরা একটি কৌতুক দ্বিতীয় অংশে এক বিট সংরক্ষণ জন্য, এবং আপনি একটি প্রতিসম ভূমিকা দিতে সন্ধান করব এবং তাই অর্ডার পুনরুদ্ধার করা সম্ভব নয় যে। উপরের কার্ডিনালিটির গণনা দেওয়া, আমরা জানি যে এই স্কিমটি ক্ষেত্রে কাজ করবে না ।a = x y { x , y } ( a , x ) ( a , y ) x y x = yNa=xy{x,y}(a,x)(a,y)xyx=y

যদি তবে কিছুটা বিট অবস্থান রয়েছে যেখানে তারা পৃথক। আমি লিখবো জন্য এর ম বিট (অর্থাত ), এবং অনুরূপভাবে জন্য । যাক ক্ষুদ্রতম বিট অবস্থান যেখানে নেওয়া এবং পৃথক: সবচেয়ে ছোট যেমন যে । হ'ল সবচেয়ে ছোট যেটি : আমরা থেকে পুনরুদ্ধার করতে পারি । যাক পারেন হতে বাx i i x x = i x i 2 i y k x y k i i < k y i 2 i + xyxiixx=ixi2iykxyki k i a i = 1 k a b x y k b = i < k x i 2 i + i > কে x i 2 i - 1=xiyikiai=1kabxyসঙ্গে ম মুছে ফেলা বিট (অর্থাত বা ) - নির্মাণ প্রতিসম করা, বাছাই যদি এবং , এবং বাছাই যদি এবং । জোড়ের সংক্ষিপ্ত প্রতিনিধিত্ব হিসাবে ব্যবহার করুন । মূল যুগল সর্বনিম্ন-অর্ডার বিট যে সেট করা হয় কম্পিউটিং দ্বারা উদ্ধার করা সম্ভব এই অবস্থানে ঢোকাতে 0 বিট (এক ফলনশীল বা ), এবং যে সংখ্যা XOR গ্রহণkb=i<kxi2i+i>kxi2i1 x x k =0 y k =1y x k =1 y k =0(a,b)abxyab=i<kyi2i+i>kyi2i1xxk=0yk=1yxk=1yk=0(a,b)abxya (জোড়ের অন্যান্য উপাদান উপার্জন)।

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

Pseudocode মধ্যে, সঙ্গে ^, &, |, <<, >>, ~হচ্ছে সি-মত bitwise অপারেটরদের (XOR, এবং, বা, বাম-শিফট, ডান-শিফট, সম্পূরক):

encode(x, y) =
  let a = x ^ y
  let k = lowest_set_bit_position(a)
  let low_mask = (1 << k) - 1
  let z = if x & (1 << k) = 0 then x else y
  return (a, (z & low_mask) | (z & ~low_mask) >> 1)
decode(a, b) =
  let k = lowest_set_bit_position(a)
  let low_mask = (1 << k) - 1
  let x = (b & low_mask) | ((b & ~low_mask) << 1)
  return (x, a ^ x)

0

একটি অ-গঠনমূলক প্রমাণ: এখানে রয়েছে আনঅর্ডারড বিভিন্ন 32-বিট পূর্ণসংখ্যার জোড়।(232×232232)/2=231(2321)<263

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