সিভিল এন্ড্যাম্প; কাঠামোবিদ ইঞ্জিনিয়ার
বড় আকারে প্রদর্শনের জন্য গণনািং গণনা করছেন। C# তে ছোট পূর্ণসংখ্যা মান নির্ধারণ করা হচ্ছে বিশাল সংখ্যার গণনা
Table of Contents
নির্ধারিত সময়ের পরে- ধাপের জন্য ছোট সংখ্যার বেশি সংখ্যক অংশের সাথে যুক্ত হয় - যেমন নম্বর, বয়স, বা বিশেষ অক্ষর কোড - প্রতিস্থাপিত হবে। দ্রুত গতির জন্য গাণিতিক অথবা একত্রিতকৃত অ্যালগরিদমের সংখ্যা অনুযায়ী নির্ধারিত হলে, সংশ্লিষ্ট বিন্যাসে এই অ্যালগরিদমটি shoutpust-র অনুরূপ মান দ্বারা পরিচালিত হবে। hy (n n) - nenstandlestationstations - Nof [1], nfr সমান সংখ্যক সংক্ষিপ্ত মান উল্লেখ করা যাবে ও n: nencroiceatherg - narationed [1]-inpue. Shubr] এর সাথে সুসংগতভাবে উল্লেখ করা যাবে। এই মানটির্থের মান লিখতে পারে যে কোনো সীমা অনুযায়ী, ও fienclestpers of avathing
গণনার গণনা
যে জ্ঞান অর্জন করা হবে তা নির্ধারণ করা হয় যা একটি ছোট সীমা থেকে সমান সংখ্যা পর্যন্ত প্রদর্শিত হয়। জোড়া তুলনার পরিবর্তে, এটির মান নির্ধারিত হয় এটির মান নির্ধারিত হয় ও তারপর তার মানের মধ্যে উপস্থিত প্রতিটি বস্তুর জন্য স্তম্ভচিত্র ব্যবহার করা হয়।
মূল এগিয়ে আসছে: সরাসরি প্রতিশোধ
গণনা করার সবচেয়ে সহজ সংস্করণ হচ্ছে দুই পাসে কাজ করা:
- [[F]][FORECT][FO][FLT][FLT] -Q] - এর সাহায্যে প্রতি ইনপুট অ্যারের মধ্যে পার্থক্য বৃদ্ধি করে এবং প্রতিটি সংখ্যার উপর ভিত্তি করে প্রদর্শিত হবে।
- [[[[F] ইনপুট[F] - তে লেখা ইনপুটগুলো লিখুন; প্রতিটি সংখ্যার জন্য এটি সময়ের চেয়ে ছোট থেকে বড় এবং প্রতিটি সংখ্যার মধ্যে এটির ইনপুট অ্যারেতে লেখা হবে ।
এটি একটি সংক্ষিপ্ত আউটপুটের সমষ্টি উৎপন্ন করে কিন্তু [FLT][F][F][F][F][F]] উল্লিখিত নির্দেশ করে না কারণ স্ক্রিপ্টটি স্থির থাকে না । অনুরূপ কী এর মূল আদেশ অনুসারে একটি মূল পদ্ধতি ব্যবহার করা হয় । অধাতুের মান সমান অর্থাৎ পরবর্তী অক্ষরটি ব্যবহৃত হয়, তবে সবচেয়ে সাধারণত: একটি ব্যবহার করা হয় ।
স্টলচার এক্সপেক্টেশন: কলেস্ট
গণনা গণনা করার জন্য আমরা তৃতীয় একটি পাস যোগ করেছি:
- আগে হিসাব করে নাও।
- ফ্রিকোয়েন্সি গণনা করার উদ্দেশ্যে চিহ্নিত অ্যারের মধ্যে একটি দ্রাক্ষা একক নির্ধারণ করুন । এই ধাপের পর, [FFLT] মৌলিক পদার্থের সংখ্যা [F] [FO[F]:[F][FO][F]]:1.1]
- এটি ইনপুট অ্যারের মধ্যে উপস্থিত ইনপুট অ্যারেকে (প্রথম ঘর থেকে শেষ) বিপরীত (বা প্রথম ঘর) চিহ্নিত করে । প্রতিটি উপাদানের জন্য এর আকাঙ্খিত গণনাটি ব্যবহার করুন), আউটপুট অ্যারের মধ্যে অবস্থান খুঁজে বের করার জন্য, এবং এই সংখ্যার গণনাটি গণনা করা হয়।
কারণ আমরা উল্টো দিকে যাচ্ছি, সমান সংখ্যার আপেক্ষিক ধারা সংরক্ষিত রয়েছে। আউটপুট থেকে আউটপুটের মধ্যে আউটপুটটি পৃথক, তাই আউটপুটের জন্য অন্যান্য সংস্করণ ব্যবহার করা হয় ও- র মাত্রা দ্বারা মূল সংস্করণ দ্বারা লগ করা হয়।
ক্রমানুযায়ী গণনা করা হচ্ছে ##
নীচে দুটি সি # প্রয়োগ করা হয়েছে: স্থান-স্থানের মৌলিক সংস্করণ (যেখানে স্থিতি অপ্রয়োজনীয়) এবং একটি সহায়ক অ্যারে ব্যবহার করা স্থায়ী সংস্করণ)। উভয় ক্ষেত্রেই আগে থেকেই সর্বোচ্চ মান জানা প্রয়োজন।
মৌলিক ক্রম (Nicnal/Shynal7B)
অতিরিক্ত বিকল্পের মধ্যে উপস্থিত ইনপুট অ্যারের ক্ষেত্রে সরাসরি স্বয়ংক্রিয়ভাবে নিঃশব্দ অবস্থা ধার্য করা হয়। মেমরির ব্যবহার কিন্তু পুনরুদ্ধারের জন্য এটি পর্যাপ্ত স্থান উপস্থিত নেই।
public static void CountingSortBasic(int[] array, int maxValue)
{
int[] counts = new int[maxValue + 1];
// Count each element's frequency
for (int i = 0; i < array.Length; i++)
{
counts[array[i]]++;
}
// Overwrite the original array in sorted order
int index = 0;
for (int value = 0; value <= maxValue; value++)
{
while (counts[value]-- > 0)
{
array[index++] = value;
}
}
}
পুনরায় সাজানোর যোগ্য গণনা
স্থায়ী সংস্করণর একটি অ্যারের জন্য ইনপুটের অ্যারের প্রয়োজন হয়। অর্থাৎ বিভিন্ন স্থানে এটি প্রডাক্টের সঠিক অবস্থান নির্ণয় করা হয়।
public static int[] CountingSortStable(int[] array, int maxValue)
{
int[] counts = new int[maxValue + 1];
int[] output = new int[array.Length];
// Step 1: Count occurrences
foreach (int num in array)
{
counts[num]++;
}
// Step 2: Transform counts to cumulative counts
for (int i = 1; i <= maxValue; i++)
{
counts[i] += counts[i - 1];
}
// Step 3: Build the output array (iterate input in reverse for stability)
for (int i = array.Length - 1; i >= 0; i--)
{
int value = array[i];
output[counts[value] - 1] = value;
counts[value]--;
}
return output;
}
উভয় বাস্তবায়নে [FLT:] সবচেয়ে বড় পূর্ণসংখ্যাটি হল অ্যারের মধ্যে উপস্থিত সকল পূর্ণসংখ্যা [FLT] । যদি মান সত্য (O) হয়, আপনি এটিকে একটি প্রি-প্লিং স্ক্যানের সঙ্গে মিলিয়ে দেখতে পারেন । স্থায়ী সংস্করণ নতুন একটি অ্যারের মধ্যে দিয়ে প্রতিস্থাপন করা হবে, সংশ্লিষ্ট মূল অংশগুলি মুছে ফেলা হবে ।
জটিল বিশ্লেষণ
[[[F][F][F][F]] সূত্রের সংখ্যা এবং[FLT][FLT] [FLT[ ৩] - সর্বাধিক মানের জন্য ১] [/২] [/২] - ১] [ সম্ভাব্য মান] [-বিজ্ঞের সংখ্যা]
- [[[F]] সময় [F][F][F][F][F]][FO][F] +[FO][F3]][E]][/W]][O]][/b]]][
- [[F]] NFLT [FLT][F]] গণনার জন্য মূল সংস্করণ [F[k] ব্যবহার করো] গণনা করো । স্থায়ী সংস্করণ (k) ব্যবহার করে । এই বৈশিষ্ট্যের ফলে আউটপুটের সংখ্যাও প্রভাবিত হয় । এই গণনা করা হয় যখন সংখ্যা অত্যাধিক হারে সংখ্যা নির্ধারণ করা হয় ।
- [[[F] অন্যান্য ধরনের বর্ধিতাংশসমূহ [F][F] CLIENTৎ :[F] CL] sepss:[1] quations: n(n n(n) এবং আকার পরিবর্তন অন্তত ছোট/বড়ো (n n) । ছোট, এবং সংক্ষিপ্ত নিয়ম ve (g); এবং ngt; এর জন্য 1., and line; U.example; n), 1 (g); এর মান দ্রুত সাজানো হতে পারে ।
পরিবর্তন ও এক্সটেনশন
নন- ব্লকিং ইনট স্বনির্ধারিত বেস
স্থানীয় সংখ্যা দ্বারা গণনা করা হয় নন-tonnter.0 সংখ্যা দ্বারা গণনা করা হয় । নেতিবাচক মানকে নিয়ন্ত্রণ করতে, পুরো সীমা শূন্যের দিকে স্থানান্তর করুন । উদাহরণস্বরূপ, যদি সংখ্যা হয়, তাহলে 0 থেকে ১০০০ থেকে ১০০০,০০০ পর্যন্ত প্রতি ভাগ করা হবে ।
public static int[] CountingSortWithNegative(int[] array)
{
if (array.Length == 0) return array;
int min = array.Min();
int max = array.Max();
int range = max - min + 1;
int[] counts = new int[range];
int[] output = new int[array.Length];
foreach (int num in array)
counts[num - min]++;
for (int i = 1; i < range; i++)
counts[i] += counts[i - 1];
for (int i = array.Length - 1; i >= 0; i--)
{
int value = array[i];
output[counts[value - min] - 1] = value;
counts[value - min]--;
}
return output;
}
ম্যাপিং নন কৌণিক কী
সংখ্যাসূচক গণনাকৃত সংখ্যার জন্য পূর্ণসংখ্যাের প্রয়োজন । যদি আপনার অক্ষরের প্রতি অক্ষর, বা সংখ্যা হিসাবে সংখ্যা, আপনি এখনও ব্যবহার করতে পারেন, তবে আরো বড় বস্তুর জন্য এই ফর্মটি প্রয়োগ করতে পারেন । বড় ধরনের বস্তুর জন্য আপনি পূর্ণসংখ্যা ও প্রতিরূপ হিসাবে ঠিক ব্যবহার করতে পারেন ।
বিলিক্স ক্রমবিবর্তন
র্যাডিক্স ক্রম (বা বিট সংখ্যা) প্রতি প্রত্যেক পাসকে একটি সাধারণ সিদ্ধান্ত হিসাবে দেখানো হয় যখন ভিত্তি করে শুরু হয় (যেমন, ১০ অথবা ২৫৬) এর মানসূচক সংখ্যার (যেমন, বা ২৫৬) ছোট, সীমাবদ্ধ সংখ্যার জন্য পারমাণবিক সংখ্যার (যেমন, ছোট) গণনাকৃত সংখ্যার (যেমন ছোট)।
সি. - তে ব্যবহারিক পরামর্শ
মেমরি ফুটপ্রিন্ট এবং বড়
সবচেয়ে বড় গর্ত হচ্ছে, প্রাপ্তিসাধ্য মেমরির চেয়ে বড় এক গুণ বড় । উদাহরণস্বরূপ, ১,০০,০০০টি বস্তুর একটি অংশের জন্য ১,০০০ উপাদান গঠন করা । পরীক্ষা করুন [FRO:L] [FR][FO][L]: [F] এর চেয়ে বড় মানের] [F] এর সমান [F]
সমান্তরালতা ও স্প্যানিশতা;T এবং প্রতিসরণ;
খুব বিশাল বিশাল অংশের জন্য আপনি গণনাকে একইভাবে গণনা করতে পারেন । প্রতিটি থ্রেডের মধ্যে ইনপুট গণনাকে একটা ব্যক্তিগত অ্যারের মধ্যে ভাগ করে ভাগ করে । এবং এরপর আংশিক ফলাফলকে পৃথক করে । [F] [FL] [F8:] এবং [F8] গণনা করুন গণনা করুন যখন ছোট আকারের গণনা করা হয়, তখন আকার হ্রাস পায় ।
প্রান্তের ছাঁদ
- [[F][F]] ফাঁকা অ্যারে[FLT] - অবিলম্বে ফেরত পাঠানো হবে ।
- [[F] একটি মিল [F][FLT][F] - > কিছু জানা নেই [F] - ছোট মাপের :
- [[F] সমস্ত মিল [FLT] [FLT] - এর মোট মান] - গুনের মধ্যে একটি শূণ্য ব্যতীত অন্য কোনো মিল নেই; পুন:]
- [[[F]] সীমা উল্লিখিত কিন্তু তথ্যের পরিমাণ [FLT] - সংখ্যা] - গণনা করা হবে কারণ অধিকাংশ এন্ট্রি শূন্য । একটি হ্যাশ- নিয়ম অনুযায়ী গণনা করা হয় ।
কর্মক্ষমতা পরীক্ষা করা হয়েছেRAID status
সংখ্যা গণনা করা হবে যখন আপনি ইনপুট পূর্ণসংখ্যাকে একটি ছোট সীমার মধ্যে পড়ে থাকেন। 0 - ১০০, ১০০,০০০, বা ভুল কোড ০ -১-২-২ স্তর হিসাবে গণনা করা হবে। বড় মাপের জন্য র্যাডিিক্স অনুক্রম হিসাবে বিবেচনা করুন যা উচ্চ গতির জন্য দ্রুততার জন্য চিহ্নিত হয়।
ক্রমবিন্যাসের সময় নির্ধারণ করা হবে ( এবং যখন নয়)
| Situation | Recommendation |
|---|---|
| Small integer range (k ~ n) | Excellent choice – linear time, simple code. |
| Large integer range (k >> n) | Avoid – memory waste and O(k) overhead. |
| Need stability | Use the stable variant (cumulative counts). |
| Strings or objects | Consider Radix Sort or a comparison sort. |
| Extremely large datasets | Counting Sort can be parallelized; but watch memory. |
মাপকাঠি এবং কর্মক্ষমতা
১,০০০ এবং ১. ১,০০০ = ১,০০০-এর মধ্যে গণনা করা হয় সময়কে ২০-৩০% সম্পূর্ণ করার মধ্যে দিয়ে (যা ব্যবহার করে) সময়ের সাথে প্রায় ২০-৩০% (যা সাধারণত: ৯. ৯)। এই ব্যবধানের দৈর্ঘ্য হ্রাস পায়, যার দৈর্ঘ্য হ্রাস পায়। নীচে একটি আধুনিক CPU-এর সঙ্গে তুলনা করা হয়েছে (১. ০. ০)
n = 1,000,000 | k = 1,000
Array.Sort (QuickSort variant) : 68 ms
CountingSortBasic : 12 ms
CountingSortStable : 18 ms
যখন এই বৃদ্ধি ১০,০০০ থেকে বেড়ে যায়, গণনা করা ক্রমবিবর্তনী, কিন্তু স্বল্প সংখ্যক হ্রাস পায়।
অন্তর্ভুক্ত
গণনা করা একটি সাধারণ অ্যালগরিদম যা তথ্যের সীমানার সাথে মানানসই হয়। কারণ C# property এর অনেক ছোট সংখ্যার সঙ্গে মোকাবেলা করার জন্য, এটি একটি মূল্যবান টুল যা নাটকীয়ভাবে সময়কে হ্রাস করে দিতে পারে। আপনার তথ্যকে পরিক্রমণিতভাবে হ্রাস করতে পারে: ছোট এবং যা জানা যায়, তা নির্ভর করে যা সাধারণ তুলনা করা যায়, কিন্তু যখন নির্মিত হয়, তখন এর মান নির্ধারণের জন্য তৈরি করা হয়। [1]:
আরও পড়ার জন্য [[F][Fedia] গণনারত ক্রমানুযায়ী প্রতিবেদন দেখুন, [FOPL] [FOPL], [FOPROPRECT]:[FOPL][FW]::[3], এবং একটি ব্যবহারিক নির্দেশনা:L] [FO বলা:L] [F]:L] [FW[[F]:L]:::[FW]::::L]