نمایش نتایج 1 تا 11 از 11

نام تاپیک: دفعات تکرار هر عنصر درون آرایه

  1. #1

    Question دفعات تکرار هر عنصر درون آرایه

    با سلام
    اگه بخوام تعداد دفعات تکرار تمامی عنصر های یک آرایه رو بدست بیارم دقیقا باید چی کار کنم ؟
    بر فرض مثال :
    یه آرایه ای دارم که عناصرش : 1.2.1.1.3.5.8.8.3.
    هست بعد طبق چه الگوریتمی تعداد دفعات تکرار تمامی عناصر رو بدست بیاریم
    در واقع بهمون بگه 1 سه بار تکرار شده
    8 دوبار
    2 یکبار
    3دوبار و بهم ترتیب
    ممنون میشم راهنمایی بفرمایید ؟

  2. #2
    کاربر دائمی آواتار sa1378
    تاریخ عضویت
    فروردین 1393
    محل زندگی
    شاهی
    پست
    346

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    نقل قول نوشته شده توسط shayan100 مشاهده تاپیک
    با سلام
    اگه بخوام تعداد دفعات تکرار تمامی عنصر های یک آرایه رو بدست بیارم دقیقا باید چی کار کنم ؟
    بر فرض مثال :
    یه آرایه ای دارم که عناصرش : 1.2.1.1.3.5.8.8.3.
    هست بعد طبق چه الگوریتمی تعداد دفعات تکرار تمامی عناصر رو بدست بیاریم
    در واقع بهمون بگه 1 سه بار تکرار شده
    8 دوبار
    2 یکبار
    3دوبار و بهم ترتیب
    ممنون میشم راهنمایی بفرمایید ؟
    فرض کن این رسته رو توی[ a[ n بریزی
    حالا دوتا رشته دیگه[ b[ n و[ c[ n هم میسازیم که مقدار اولیشون صفره
    اول یه مقدار p میزاریم که برابر 0 هست
    یه حلقه میزاریم تا به ازای تمام اعضای a این کارو انجام بده:
    تمام اعضای b رو بگرد و اگه[ a[ i برابر با[ b[ j بود[ c[ j رو یکی زیاد کن
    اگه برابر هیچکدوم نبود :
    [ b[ p ر برابر با [ a[ i قرار بده و [ c[ p و p رو هم یکی زیاد کن

    کد:(به ازای ورودی صفر جواب نمیده)
    #include <iostream>
    using namespace std;
    #define N 1000
    int n,a[N],b[N],c[N],p,ex;

    int main() {

    cin>>n;
    for(int i=0;i<n;i++)
    cin>>a[i];

    for(int i=0;i<n;i++)
    {
    ex=0;
    for(int j=0;j<n;j++)
    {
    if(a[i]==b[j])
    {
    ex++;
    c[j]++;
    break;
    }
    }
    if(ex==0)
    {
    b[p]=a[i];
    c[p]++;
    p++;
    }

    }

    for(int i=0;b[i]!=0;i++)
    cout<<b[i]<<" "<<c[i]<<"\n";



    return 0;
    }

  3. #3

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    اگه دامنه اعداد مشخص باشه یعنی معلوم باشه اعداد ورودی بین 0 تا 9 هستند پس یک آرایه 10 عضوی برای ثبت تعداد ایجاد کنید به نام hist

    int arr[9] = {1,2,1,1,3,5,8,8,3};
    unsigned int hist[10] = {};
    for (int i=0; i < 9; i++)
    hist[arr[i]]++;
    for (int i=0; i < 10; i++)
    cout << i << ":" << hist[i] << "\n";

  4. #4

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    سلام
    راه sa1378 هم خوبه ولی خوب اوردرش زیاده! (n^2)
    2 تا راه با اوردر nlogn هست (من 2 تا به ذهنم میرسه الان) یکی اینکه هر عددی که ورودی گرفتی رو توی multiple set بریزی و بعد تهش از اول تا آخر ست برای هر عدد upper bound منهای lower bound اش رو چاپ کنی.
    راه دوم اینه که از map استفاده کنی! هر عدد که ورودی گرفتی یه خونه براش توی مپ میسازی و یکی زیاد میکنی مقدارش رو!
    اگر اعدادت کوچک باشند و خیلی بزرگ نشن میتونی حتی از آرایه استفاده کنی!
    هر کدوم از راه حل ها رو توضیح بیشتر خواستی بگو. کد هم اگر خواستی بگو.
    حالا برای مسابقه تبیان که دنبال جواب این سوال نبودی؟ بودی؟ اگه بودی باید بگم اون سوال رو لازم نیست اینجوری حل کنی! اگر هم نبودی که هیچی.

  5. #5

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    نه برا مسابقه نبود برای حل یه مسئله بهش نیاز داشتم
    البته دو تا راهی که دوستان گفتن خیلی کمکم کرد
    راهه اول که فرمودید دقیقا به چه شکلی هست ؟ ممنون میشم توضیح بدید
    بعد اگه اندیس محل های تکرار رو هم بخواهیم به چه شکل هست یعنی در واقع مقدار 1 مثلا در محل های 0.5.7 تکرار شده ؟
    با تشکر
    آخرین ویرایش به وسیله shayan100 : سه شنبه 06 آبان 1393 در 10:06 صبح

  6. #6

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    اعداد آرایه ات حداکثر چند هستند؟

  7. #7

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    نقل قول نوشته شده توسط a.r.khoshghalb مشاهده تاپیک
    اعداد آرایه ات حداکثر چند هستند؟
    بر فرض 10 تا

  8. #8

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    منظورم رو اشتباه فهمیدی، نپرسیدم آرایه ات حداکثر چند تا عدد داره. منظورم این بود که هر عدد حداکثر چنده! اگر حداکثر 6^10 باشه یه راه خوبش اینه که یه آرایه از وکتور ها بگیری به اندازه حداکثر مقدار هر عدد (که فرض کردیم 6^10 باشه). بعد هر عددی که خوندی، به وکتورش، اندیسش رو اضافه کنی.
    کد:

    #include <iostream>
    #include <vector>

    using namespace std;

    vector<int> tedad[1000001]; // tedad tekrare har adad va andis ro into negah midarim

    int main()
    {
    int n; // tedad adad ha
    cin >> n;
    int x[100001]; // arraye adad ha
    for (int i = 0; i < n; i++)
    {
    cin >> x[i];
    tedad[x[i]].push_back(i);
    }
    }


    الان توی این کد تعداد تکرار عددی مثل q برابر است با ()tedad[q].size
    و اندیس هایی که عددی مثل q اومدن، توی وکتور [tedad[q هست.

  9. #9

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    نقل قول نوشته شده توسط a.r.khoshghalb مشاهده تاپیک
    منظورم رو اشتباه فهمیدی، نپرسیدم آرایه ات حداکثر چند تا عدد داره. منظورم این بود که هر عدد حداکثر چنده! اگر حداکثر 6^10 باشه یه راه خوبش اینه که یه آرایه از وکتور ها بگیری به اندازه حداکثر مقدار هر عدد (که فرض کردیم 6^10 باشه). بعد هر عددی که خوندی، به وکتورش، اندیسش رو اضافه کنی.
    کد:

    #include <iostream>
    #include <vector>

    using namespace std;

    vector<int> tedad[1000001]; // tedad tekrare har adad va andis ro into negah midarim

    int main()
    {
    int n; // tedad adad ha
    cin >> n;
    int x[100001]; // arraye adad ha
    for (int i = 0; i < n; i++)
    {
    cin >> x[i];
    tedad[x[i]].push_back(i);
    }
    }


    الان توی این کد تعداد تکرار عددی مثل q برابر است با ()tedad[q].size
    و اندیس هایی که عددی مثل q اومدن، توی وکتور [tedad[q هست.

    بله من درست منظورتونو نفهمیدم ... !
    ممنونم ولی راهی نیست که از وکتور استفاده نکنیم خودم یه راههی به ذهنم زد منتها خیلی طولانیه و کاربردی نداره در واقع وقتی ما یه آرایه داریم که تعدادش مشخصه
    بگیم
    if (arr[i] == 0)
    cout <<"about 0 : "<< i;

    مثلا 0 در اندیس ها میباشد که خیلی طولانی میشه و برای آرایه های که تعدادش مشخصه به کارمون میاد :|

  10. #10

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    سلام و تشکر از برنامه. من برنامه رو نوشتم و اجرا شد مشکلی که دارم اینه که در آرایه b , c که تعریف کردیم روند محاسبه رو متوجه نمی شم اینکه خانه ها برای آرایه b چطور در نظر گرفته میشه , و اعداد چطور قرار میگیرن و اندیس برای این دو چطور در نظر گرفته میشه.خیلی ممنون میشم بفرمایید این قسمت رو
    { ex++;
    c[j]++;
    break;
    }
    }
    if(ex==0)
    {
    b[p]=a[i];
    c[p]++;
    p++;
    }

  11. #11

    نقل قول: دفعات تکرار هر عنصر درون آرایه

    دوست عزیز میتونید از هشمپ استفاده کنید به این صورت که هش مثلا عدد باشه و مپش هم عددی که نشون بده چند بار اون عدد تکرار شده. اینجوری فقط لازمه آرایه رو یکبار بخونید یعنی o(n) هست.

تاپیک های مشابه

  1. محاسبه مقادیر درون آرایه ای از TextBox ها
    نوشته شده توسط maa_biz در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: پنج شنبه 29 فروردین 1387, 14:17 عصر
  2. یافتن تعداد دفعات تکرار یک رشته در رشته دیگر
    نوشته شده توسط marz_hosseiny در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 1
    آخرین پست: یک شنبه 23 دی 1386, 09:25 صبح
  3. بزرگ ترین عنصر یک آرایه نامرتب
    نوشته شده توسط zahra_zapata در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 4
    آخرین پست: دوشنبه 17 دی 1386, 22:14 عصر
  4. گرفتن تعداد دفعات تکرار یک رکورد
    نوشته شده توسط MShirzadi در بخش SQL Server
    پاسخ: 9
    آخرین پست: چهارشنبه 07 شهریور 1386, 10:16 صبح
  5. تعدا دفعات تکرار یک رشته در رشته دیگر
    نوشته شده توسط habedijoo در بخش VB.NET
    پاسخ: 2
    آخرین پست: پنج شنبه 24 فروردین 1385, 07:11 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •