اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

تاریخچه‌ی ویرایش برای ارسال #1598

جمعه ۱۰ خرداد ۱۳۹۲ ارسال شده توسط prodo

در صورتی که بازه‌ی اعداد مورد استفاده کوچیک باشه مثلاً ۱ تا ۱۰۰ باشه. در این صورت می‌شه یه آرایه‌ی ۱۰۰ تایی ساخت که تعداد هر کدوم از اعداد رو نگه می‌داره

int count[100] = {0}:
for(int i=0; i count[array[i]]++;
در صورتی که اسم آرایه‌ی اولیه `array` باشه که `n` خونه داره.

اما در حالت کلی این روش حافظه‌ی زیادی مصرف می‌کنه. چون ممکنه `array` آرایه‌ای از اعداد `long int` باشه که نمی‌شه برای هر عددش یه خونه‌ی آرایه در نظر گرفت. در این صورت من دو یه راه به نظرم می‌رسه.
ابتدا آرایه رو مرتب می‌کنیم. حالا فرض کنیم آرایه‌ی مرتب شده `array` با `n` عضو باشه. الگوریتم زیر مد رو می‌ده

int number = 0, count = 0, max_number = 0, max_count = 0;
number = max_number = array[0];
count = max_count = 1;

for(int i=1; i {
if(number == array[n])
{
count++;
}
else
{
if(count > max_count)
{
max_count = count;
max_number = number;
}
count = 1;
number = array[i];
}
}
جمعه ۱۰ خرداد ۱۳۹۲ ویرایش شده توسط prodo

در صورتی که بازه‌ی اعداد مورد استفاده کوچیک باشه مثلاً ۱ تا ۱۰۰ باشه. در این صورت می‌شه یه آرایه‌ی ۱۰۰ تایی ساخت که تعداد هر کدوم از اعداد رو نگه می‌داره

int count[100] = {0}:
for(int i=0; i<n; i++)
count[array[i]]++;
در صورتی که اسم آرایه‌ی اولیه `array` باشه که `n` خونه داره.

اما در حالت کلی این روش حافظه‌ی زیادی مصرف می‌کنه. چون ممکنه `array` آرایه‌ای از اعداد `long int` باشه که نمی‌شه برای هر عددش یه خونه‌ی آرایه در نظر گرفت. در این صورت من دو یه راه به نظرم می‌رسه.
ابتدا آرایه رو مرتب می‌کنیم. حالا فرض کنیم آرایه‌ی مرتب شده `array` با `n` عضو باشه. الگوریتم زیر مد رو می‌ده

int number = 0, count = 0, max_number = 0, max_count = 0;
number = max_number = array[0];
count = max_count = 1;

for(int i=1; i<n; i++)
{
if(number == array[n])
array[i])
{
count++;
}
else
{
if(count > max_count)
{
max_count = count;
max_number = number;
}
count = 1;
number = array[i];
}
}