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

نام تاپیک: بهترین الگوریتم با پیچیدگی زمان مناسب

  1. #1

    Exclamation بهترین الگوریتم با پیچیدگی زمان مناسب

    ما n تا عدد داریم و می خواهیم الگوریتمی را ارائه دهیم که پیچیدگی زمان آن o=(n^2) باشد بطوریکه این الگوریتم دو عدد را از این n عدد را بیابد که جمع آنها مساوی عدد ثابت k شود.

    بهترین الگوریتم با پیچیدگی زمان مناسب

  2. #2

    نقل قول: طراحی الگوریتم

    اين الگوريتم رو ميشه با مرتبه زماني n log n نيز حل كرد (كمتر از n^2)
    ابتدا ليست رو با مرتبه زماني n log n مرتب ميكنيم (مثلا با mergsort)
    بعد يك اشاره گر در ابتداي ليست و يك اشاره گر در انتهاي ليست قرار ميدهيم سپس عدد ابتدا و انتهاي ليست را با هم جمع ميكنيم اگر از عدد مورد نظر كوچكتر بود اشاره گر ابتداي ليست را يك خانه جلو مي بريم و اگر از عدد مورد نظر بزرگتر بود اشاره گر انتهاي ليست را يك خانه عقب مي آوريم تا به عدد مورد نطر برسيم يا اينكه اشاره گرها به هم برسند

  3. #3

    نقل قول: طراحی الگوریتم

    نقل قول نوشته شده توسط amirniknam مشاهده تاپیک
    اين الگوريتم رو ميشه با مرتبه زماني n log n نيز حل كرد (كمتر از n^2)
    ابتدا ليست رو با مرتبه زماني n log n مرتب ميكنيم (مثلا با mergsort)
    بعد يك اشاره گر در ابتداي ليست و يك اشاره گر در انتهاي ليست قرار ميدهيم سپس عدد ابتدا و انتهاي ليست را با هم جمع ميكنيم اگر از عدد مورد نظر كوچكتر بود اشاره گر ابتداي ليست را يك خانه جلو مي بريم و اگر از عدد مورد نظر بزرگتر بود اشاره گر انتهاي ليست را يك خانه عقب مي آوريم تا به عدد مورد نطر برسيم يا اينكه اشاره گرها به هم برسند
    میشه کد اون رو یا شبه کدشو واسم در بیارین( اخه واسم مهمه)
    ممنون

  4. #4
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: طراحی الگوریتم

    سلام دوست عزیز
    اینم کدش با زمانی که دوستمون به درستی گفت n log n

    SUM-X(S, x)
    MERGE SORT(S)
    i=1
    j=n
    while i < j
    do if S[i] + S[j] < x
    then i i + 1
    else if S[i] + S[j] > x
    then j j 1
    else return S[i], S[j]
    if i = j
    then return nil

  5. دوشنبه 12 اسفند 1387, 09:20 صبح

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

  6. #5
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: طراحی الگوریتم

    این چیز که نوشتم شبه کده. به زبان خاصی نیست. کاملا هم واضحه. باز اگه نیاز داشتید بگید به کدوم زبون مسلطید که کدش رو به اون زبون بنویسم.

  7. #6

    Smile نقل قول: طراحی الگوریتم

    به همون زبون c+ خوبه اما اگه ميشه كد كاملشو كه اجرايي باشه بنويسين البته اگه زحمتي نيست

  8. #7
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: بهترین الگوریتم با پیچیدگی زمان مناسب

    چشم
    براتون مینویسم تا فردا

  9. #8

    نقل قول: بهترین الگوریتم با پیچیدگی زمان مناسب

    با عرض سلام.آقا ببینید اینی که من نوشتم درسته؟ کد سی پلاس هست.


    void buble_sort(int *aray , int lenth)
    {
    ...
    }

    void find(int *aray ,int lenth ,int k , int *x1 , int *x2)
    {
    int i=0;
    int j=lenth;
    while(i!=j)
    {
    if( aray[i]+aray[j] > k )
    j--;
    else if( aray[i]+aray[j] < k )
    i++;
    else if( aray[i]+aray[j] == k )
    {
    x1=aray[i];
    x2=aray[j];
    break;
    }//end of if
    }//end of while

    }

    void main()
    {
    int aray[lenth]=...//aray
    int lenth;
    buble_sort(aray , lenth);
    int k=...
    int x1;
    int x2;
    find(aray , lenth , k , *x1 , *x2);
    cout<<k<<"="<<x1<<"+"<<x2;
    getch();
    }

  10. #9
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: بهترین الگوریتم با پیچیدگی زمان مناسب

    اینم کدش به زبون ++C
    #include "stdio.h"

    //*****MERGE SORT********************************************** *
    const int MAX_SIZE = 50;
    void Merge(int A[], int F, int Mid, int L)
    // ---------------------------------------------------------
    // Merges two sorted array segments A[F..Mid] and
    // A[Mid+1..L] into one sorted array.
    // Precondition: F <= Mid <= L. The subarrays A[F..Mid] and
    // A[Mid+1..L] are each sorted in increasing order.
    // Postcondition: A[F..L] is sorted.
    // Implementation note: This function merges the two
    // subarrays into a temporary array and copies the result
    // into the original array A.
    // ---------------------------------------------------------
    {
    int TempArray[MAX_SIZE]; // temporary array
    // initialize the local indexes to indicate the subarrays
    int First1 = F; // beginning of first subarray
    int Last1 = Mid; // end of first subarray
    int First2 = Mid + 1; // beginning of second subarray
    int Last2 = L; // end of second subarray
    // while both subarrays are not empty, copy the
    // smaller item into the temporary array
    int Index = First1; // next available location in
    // TempArray
    for (; (First1 <= Last1) && (First2 <= Last2); ++Index)
    { // Invariant: TempArray[First1..Index-1] is in order
    if (A[First1] < A[First2])
    { TempArray[Index] = A[First1];
    ++First1;
    }
    else
    { TempArray[Index] = A[First2];
    ++First2;
    } // end if
    } // end for
    // finish off the nonempty subarray
    // finish off the first subarray, if necessary
    for (; First1 <= Last1; ++First1, ++Index)
    // Invariant: TempArray[First1..Index-1] is in order
    TempArray[Index] = A[First1];
    // finish off the second subarray, if necessary
    for (; First2 <= Last2; ++First2, ++Index)
    // Invariant: TempArray[First1..Index-1] is in order
    TempArray[Index] = A[First2];
    // copy the result back into the original array
    for (Index = F; Index <= L; ++Index)
    A[Index] = TempArray[Index];
    } // end Merge
    void Mergesort(int A[], int F, int L)
    // ---------------------------------------------------------
    // Sorts the items in an array into ascending order.
    // Precondition: A[F..L] is an array.
    // Postcondition: A[F..L] is sorted in ascending order.
    // Calls: Merge.
    // ---------------------------------------------------------
    {
    if (F < L)
    { // sort each half
    int Mid = (F + L)/2; // index of midpoint
    Mergesort(A, F, Mid); // sort left half A[F..Mid]
    Mergesort(A, Mid+1, L); // sort right half A[Mid+1..L]
    // merge the two halves
    Merge(A, F, Mid, L);
    } // end if
    } // end Mergesort
    //*****END OF MERGE SORT****************************************
    //*****FIND SUM-X***********************************************
    void SUMX(int S[],int n, int x)
    {
    Mergesort(S,0,n-1);
    int i=0,j=n-1;
    while (i < j)
    {
    if (S[i] + S[j] < x)
    i=i + 1;
    else if (S[i] + S[j] > x)
    j=j - 1;
    else
    {
    printf("\nThe sum of %d and %d in this array is %d",S[i],S[j],x);
    return;
    }
    }
    if (i == j)
    {
    printf("\nThis array have not any two numbers that their sum be %d ",x);
    return;
    }
    }
    //*****END OF SUM-X************************************************* *****
    void main()
    {
    //example
    int a[]={2,20,10,5,46,11,81};
    SUMX(a,7,91);
    }

  11. #10
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: بهترین الگوریتم با پیچیدگی زمان مناسب

    آقای مرتضی رو چه حساب از buble sort استفاده کردید. بدترین الگوریتم مرتب سازی که میتونستید انتخاب کنید و زمان ما رو به (n^2) افزایش میده.

  12. #11
    کاربر دائمی آواتار pesar irooni
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    سن
    40
    پست
    495

    نقل قول: بهترین الگوریتم با پیچیدگی زمان مناسب

    آقای / خانم mortezamsp رو چه حساب از bubble استفاده کردید. بدترین الگوریتم مرتب سازی که میشه انتخاب کرد و زمان الگوریتم ما رو به n^2 افزایش میده.

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

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