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

نام تاپیک: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

  1. #1

    معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    سوال: راهی پیشنهاد کنید با پیچیدگی O -nLogn که مشخص کند آیا عدد تکراری در یک آرایه n عضوی وجود دارد یا نه . ( لازم نیست اعداد تکراری رو مشخص کند. همین که به یک مورد تکراری برسد هم کافیه)

    نظر من: بالاخره اول باید سورتش کنیم ( درسته ؟ ) . هیچ روش سورتی هم نداریم از نوع مقایسه ای که بهتر از nLgn باشه. پس چکار کنیم که حالا این کار اضافی هم میخواهیم روی آرایه انجام دهیم، از nLgn بالا نزنه؟

  2. #2
    کاربر دائمی آواتار BOB
    تاریخ عضویت
    خرداد 1383
    محل زندگی
    http://www.mshams.ir
    پست
    450

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    سلام

    در كل همان nLogn ميشود. ميتوانيد در حين مرتب سازي و مقايسه عناصر، برابري آنها را هم بررسي كنيد.
    و يا در غير اينصورت، اگر اول كل آرايه را مرتب كنيد، پس از آن با يك جستجوي n/2 ميتوان عنصر تكراري را پيدا كرد.
    كه البته nLogn + n/2 همان nLogn است.

  3. #3

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    n/2 رو average case گرفتید که اعداد تکراری در میانه آرایه باشند؟ یا از جای دیگری آمده؟
    اگه بدترین حالت رو وقتی بگیریم که دوتا اعداد تکراری در دو خانه آخر آرایه باشند n-1 مقایسه لازم داریم
    بعد پیچیدگی کلی میشه n + nLgn .
    پس nLgn + n از نظر Big O با nLgn برابر هستش؟

  4. #4
    کاربر دائمی آواتار BOB
    تاریخ عضویت
    خرداد 1383
    محل زندگی
    http://www.mshams.ir
    پست
    450

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    نقل قول نوشته شده توسط Kensington مشاهده تاپیک
    n/2 رو average case گرفتید که اعداد تکراری در میانه آرایه باشند
    بله

    البته n، n-1 و n/2 همگي از مرتبه خطي BigO(n) هستند. پس فرقي نميكند كه با nLogn جمع شوند يا خير، چرا كه nLogn مرتبه‌اي بزرگتر از خطي است و هميشه بزرگترين مرتبه، به عنوان BigO در نظر گرفته مي‌شود.

    مثلا در n^2 + 3n^3 + 2nLogn بزرگترين مرتبه همان BigO(n^3) خواهد بود و مابقي قابل چشم پوشي هستند.

    موفق باشيد
    _________________________________________
    آفرين بر شما كه به Tag گذاري اهميت ميدهيد.

  5. #5

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    nLogn یا nLog + ... که دوستان گفتم منطقی نیست.

    چون قرار نیست برای هر بار که می خواین وجود عدد در آرایه رو بررسی کنید، اون رو مرتب کنید.

    کافیه هنگام ساخت آرایه یا برای بار اول (در صورتی که آرایه توسط شما ساخته نمیشه) اون رو مرتب کنید و مرتب نگه دارید.

    در اینصورت می تونید با یه Binary Search با مرتبه Logn/2 وجود/عدم وجود عدد در آرایه رو بررسی کنید.



  6. #6
    VIP آواتار xxxxx_xxxxx
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    X place
    سن
    34
    پست
    4,768

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    من پيشنهاد مي كنم از الگوريتم پارتيشن استفاده كنيد.
    با كمي تغيير ميشه به نتيجه رسيد.
    من يه نمونه مشابه قبلا تو همين بخش گذاشتم.
    البته اون براي كار ديگه اي بود ولي با تغييرات جزئي ميشه درستش كرد
    الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.

  7. #7

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    نقل قول نوشته شده توسط Mbt925 مشاهده تاپیک
    nLogn یا nLog + ... که دوستان گفتم منطقی نیست.

    چون قرار نیست برای هر بار که می خواین وجود عدد در آرایه رو بررسی کنید، اون رو مرتب کنید.

    کافیه هنگام ساخت آرایه یا برای بار اول (در صورتی که آرایه توسط شما ساخته نمیشه) اون رو مرتب کنید و مرتب نگه دارید.

    در اینصورت می تونید با یه Binary Search با مرتبه Logn/2 وجود/عدم وجود عدد در آرایه رو بررسی کنید.
    -سوال رو دقت نکردید. نمیخواهیم وجود عدد تکراری خاصی در آرایه رو بررسی کنیم.
    تا همین مشخص کند که آیا عددی تکراری در آرایه هست یا نیست، کافیه.
    - آرایه هم به ما داده شده. ما نمیسازیمش.
    - چون دنبال عدد خاصی نیستیم، باینری سرچ به کارمان نمی آید. چون باید برای n تا عدد فراخوانیش کنیم که میشود همان nLogn .

  8. #8

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    نقل قول نوشته شده توسط xxxxx_xxxxx مشاهده تاپیک
    من پيشنهاد مي كنم از الگوريتم پارتيشن استفاده كنيد.
    با كمي تغيير ميشه به نتيجه رسيد.
    من يه نمونه مشابه قبلا تو همين بخش گذاشتم.
    البته اون براي كار ديگه اي بود ولي با تغييرات جزئي ميشه درستش كرد
    پارتیشن یعنی pivot ؟ یعنی همان روش quick sort ?
    اگر منظورتون اونه، بهتره استفاده نکنیم چون کوییک سورت گاهی هم به O of N^2 میرسه.
    در حالیکه با nLgn کارمان راه میفته.

    * راستی نمیشه توی این ادیتور نمادهای ریاضی مثل همین توان و ... رو نوشت؟

  9. #9

    نقل قول: معلوم کنیم در یک آرایه، اعداد تکراری هست یا نه

    پس کدش چیزی شبیه این شد:

     
    Boolean AreDistinct ( Array A [1..n])
    HeapSort(A )
    for i: 2 to n do
    if A[i] = A[i-1] then return False
    Return True

برچسب های این تاپیک

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

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