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

نام تاپیک: آرایه غیر مرتب بهترین الگوریتم برای نمایش تعداد تکرار

  1. #1

    آرایه غیر مرتب بهترین الگوریتم برای نمایش تعداد تکرار

    سلام دوستان
    در یک آرایه غیر مرتب، بهترین الگوریتم برای نمایش تعداد تکرار عناصر چگونه است؟
    مثلا : آرایه=5 6 4 2 6 4 8 3 5 1 5
    5 3 بار
    1 1 بار
    6 2 بار
    8 1 بار
    4 2 بار
    2 1 بار
    3 1 بار

    تورو خدا جواب بدین خیلی گیرم

  2. #2
    کاربر دائمی آواتار hossein taghi zadeh
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    Mofateh dormitory @ Shiraz University
    سن
    38
    پست
    109
    با سلام

    کافی است آرایه‌ اعداد نامرتب را یکبار پیمایش کنید
    و آرایه‌ای دیگر داشته باشید که هر خانه‌ی آن تعداد هر عدد را نگهداری می‌کند و اندیس مربوطه همان عدد است، برای مثال:
    OutArray: Array[1..1000] Of Integer = {0}; // I = integer OutArray[I] = Count of repeat I
    MyArray: Array[1..500] Of Byte; // Input Array Of not sorted integers

    For I := 1 to 500 Do
    OutArray[MyArray[I]]++;

    For I := 1 To 1000 Do
    If OutArray[I] > 0 Then
    Writeln(I, ' : ', OutArray[I]);

  3. #3
    مرسی
    اما این الگوریت زمان زیادی استفاده می کنه، باید یه الگوریتم دیگه باشه که زمان بهتری داشته باشه
    این وسالو واسه درس طراحس الگوریتم می خوام

  4. #4
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    زمانی که شما باید تمام عناصر آرایه را پیمایش کنید ، درجه پیچیدگی شما N است ، مگر اینکه چند پردازنده داشته باشید و بخواهید موازی کار کنید.
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  5. #5
    مرسی اما من بهترین زمانو میخوام.مثلا یه روش اینه که از یه آرایه کمکی استفاده کنیم
    یکی دیگه اینه که جابجایی داشته باشیم

  6. #6
    bayad az segment tree estefade koni

    khodam ham khub balad nistam

    search kon , oeyda mikoni

  7. #7
    شما باید لا اقل یه بار ورودی رو بخونید. پس مرتبه الگوریتم شما نمی تونه کمتر از n باشه. در مورد مطلبی هم که دوستمون گفتند: کافیه برای چاپ خروجی هم یه دور آرایه رو طی کنید و هر عدد غیر ۰ ی رو که چاپ می کنید شمارنده اش رو ۰ کنید تا تکرار نداشته باشیم. این طوری زمان اجرا از مرتبه n و حافظه به مقدار MAXN لازمه.
    سگمت تری هم در این مورد کمکی در کم کردن مرتبه الگوریتم نمی تونه کمکی کنه به همون دلیلی که اول گفتم.

  8. #8
    متوجه نشدم
    می شه با مثال توضیح بدید

  9. #9
    توضیحی بهتر از نوشتن برنامش بلد نیستم:دی

    #include<iostream>
    using namespace std;
    int n;
    int a[100],num[100];
    int main(){
    cin>>n;
    for(int i=0;i<n;i++){
    cin>>a[i];
    num[a[i]]++;
    }
    for(int i=0;i<n;i++)
    if(num[a[i]]){
    cout<<a[i]<<" "<<num[a[i]]<<endl;
    num[a[i]]=0;
    }
    return 0;
    }



  10. #10
    راستی! اینو یادم رفت بگم: اون ۱۰۰ ها که تابلو هست فرمالیته هستن. معمولا سایز num باید بزرگتر از a گرفته شه. دلیلش هم که بدیهیه. فرق این هم با اون کد پاسکالی که بالا هست در اینه که اون با MAXN کار می کنه اما این به اندازه سایز ورودی تایم می بره....

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

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