কার্ডের একটি ডেকে 52. একটি হাত 52 টি থেকে 5 কার্ড (ডুপ্লিকেট থাকতে পারে না)।
5 টি কার্ডের হাতের প্রতিনিধিত্ব করতে বিটসের সর্বনিম্ন পরিমাণ কীভাবে এবং কীভাবে?
একটি হাত নির্ভর আদেশ নয় (কে কিউ = কিউ)) 64329 = 96432
হ্যাঁ, 52 বিট ব্যবহার করতে পারেন। যে কোনও কার্ডের একটি হাত উপস্থাপন করতে পারে।
একটি হাত দেওয়া হ'ল ৫ টি কার্ডের পক্ষে এটির পক্ষে 52 টিরও কম বিট উপস্থাপন করার উপায় রয়েছে।
একটি একক কার্ড 6 বিট = 64 দিয়ে প্রতিনিধিত্ব করা যেতে পারে। সুতরাং 6 বিট * 5 কার্ড = 30 বিট ব্যবহার করতে পারে। তবে সেটি অর্ডার নির্ভর। আমি ঠিক বাছাই করতে পারি এবং এটি কাজ করা উচিত। যদি এটি কাজ না করে তবে আমাকে জানান let
32 বিট বা এর নিচে কীটি পাওয়ার কোনও উপায় আছে এবং 5 টি কার্ড টিপলকে বাছাই করতে হবে না।
এটি জুজু সিমুলেশনের জন্য এবং বাছাই করা কেবলমাত্র হাত তৈরির তুলনায় অনেক বেশি ওভারহেড হবে। যদি আমার প্রতিটি হাতের আপেক্ষিক মানের সাথে অভিধান থাকে তবে এটি দুটি সহজ চেহারা এবং দুটি হাতের মানের তুলনা করার জন্য একটি তুলনা। আমি যদি প্রথমে হাতগুলি বাছাই করতে পারি তবে এটি দুটি লকআপ এবং তুলনার তুলনায় বড়। একটি সিমুলেশন মিলিয়ন তুলনা করা হবে। সিমুলেশন থেকে আমি বাছাই করা হাত পাব না। সাজানো 52 51 50 49 47 এর আগে 52 51 50 49 48 এর মতো সহজ নয় You আপনার সরাসরি ফ্লাশ কোয়াড থাকতে পারে ....
2598960 সম্ভাব্য 5 কার্ড হাত রয়েছে। এটি সারি সংখ্যা। কীটি হ'ল 5 টি কার্ড। আমি 32 টি বিট বা যেখানে কার্ডগুলি প্রথমে বাছাই করার প্রয়োজন নেই তার নীচে একটি চাবি পেতে চাই।
যত হাত বেঁধে দেওয়া হয়েছে কেবল তালিকার অর্ডার করতে পারি না। স্যুট হ'ল কোদাল, ক্লাব, হীরা এবং হৃদয়। 7 সি 8 সি 2 ডি 3 ডি 4 এস = 7 এস 8 এস 2 সি 3 সি 4 ঘন্টা। এখানে প্রচুর সংযোগ রয়েছে।
পরবর্তী পদক্ষেপটি b৪ বিট এবং কীটির আকারের দ্বিগুণ হওয়ার পরিবর্তে বাছাইয়ের হিট নেবে।
আমি SortedSet<int> quickSort = new SortedSet<int>() { i, j, k, m, n };
অপারেশনের সময় পরীক্ষা করেছি এবং দ্বিগুণ করেছি তবে আমি এখনও এটি করতে পারি।
এটি আরও জটিল হয়। আমার পাঁচটা (22255) এরও বেশি হিসাবে একটি নৌকার প্রতিনিধিত্ব করতে সক্ষম হওয়া দরকার। সুতরাং তাদের বাছাই যে বিরতি। আমি জানি আপনি বলতে যাচ্ছেন তবে তা দ্রুত। হ্যাঁ এটি দ্রুত এবং তুচ্ছ কিন্তু আমার যত দ্রুত সম্ভব প্রয়োজন।
গৃহীত উত্তরের জন্য সি #
private int[] DeckXOR = new int[] {0x00000001,0x00000002,0x00000004,0x00000008,0x00000010,0x00000020,0x00000040,
0x00000080,0x00000100,0x00000200,0x00000400,0x00000800,0x00001000,0x00002000,
0x00004000,0x00008000,0x00010000,0x00020000,0x00040000,0x00080000,0x00100000,
0x00200000,0x00400000,0x00800000,0x01000000,0x02000000,0x04000000,0x07fe0000,
0x07c1f000,0x0639cc00,0x01b5aa00,0x056b5600,0x04ed6900,0x039ad500,0x0717c280,
0x049b9240,0x00dd0cc0,0x06c823c0,0x07a3ef20,0x002a72e0,0x01191f10,0x02c55870,
0x007bbe88,0x05f1b668,0x07a23418,0x0569d998,0x032ade38,0x03cde534,0x060c076a,
0x04878b06,0x069b3c05,0x054089a3};
public void PokerProB()
{
Stopwatch sw = new Stopwatch();
sw.Start();
HashSet<int> cardsXOR = new HashSet<int>();
int cardXOR;
int counter = 0;
for (int i = 51; i >= 4; i--)
{
for (int j = i - 1; j >= 3; j--)
{
for (int k = j - 1; k >= 2; k--)
{
for (int m = k - 1; m >= 1; m--)
{
for (int n = m - 1; n >= 0; n--)
{
counter++;
cardXOR = DeckXOR[i] ^ DeckXOR[j] ^ DeckXOR[k] ^ DeckXOR[m] ^ DeckXOR[n];
if (!cardsXOR.Add(cardXOR))
Debug.WriteLine("problem");
}
}
}
}
}
sw.Stop();
Debug.WriteLine("Count {0} millisec {1} ", counter.ToString("N0"), sw.ElapsedMilliseconds.ToString("N0"));
Debug.WriteLine("");
}