سایت ساز وبزیکسب درآمد

مهارت الگوریتم نویسیتون رو به خودتون ثابت کنید

شروع موضوع توسط Sajjad1364 ‏12 مارس 2007 در انجمن برنامه نویسی

  1. Sajjad1364

    Sajjad1364 کاربر تازه وارد

    تاریخ عضویت:
    ‏10 فوریه 2007
    نوشته ها:
    12
    تشکر شده:
    0
    با سلام
    سؤال از این قراره که یه مجموعه داریم و میخایم تمام زیر مجموعه هاشو بدست بیاریم
    مثال 1: مجموعه {1,2,3} زیر مجموعه هاش میشن

    {1}, {2}, {3} , {1,2}, {1,3} , {2,3} ,{1,2,3} ومجموعه تهی که جمعا هشت تا میشه

    مثال 2: مجموعه {1,2,3,4,5} که زیر مجموعه هاش از این قراره

    {1}, {2}, {3} {4}, {5} , {1,2} , {1,3} {1,4} , {1,5} , {2,3}, {2,4}, {2,5} , {3,4} ,{3,5} ,{4,5}

    {1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{1,4,5},{2,3,4},{2,3,5},{2,4,5},{3,4,5}

    {1,2,3,4},{1,2,3,5},{1,2,4,5},{1,3,4,5} , {2,3,4,5}, {1,2,3,4,5} وآخرین زیر مجموعه تهی هستش جمعا 32

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

    در ضمن این مساله فقط برای اثبات تواناییهاتون به خود شماست و اصلا جنبه مسابقه ای نداره .
     
  2. بازدیدیار - افزایش بازدید سایت و سیگنال های برندخرید بک لینک
  3. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    الان کجا این مهارت الگوریتم نمی سی می خواد یکم ریاضی بلد باشید می تونید خیلی راحت یه شمارش رو مجموعه توانی پیدا کنید بعد خیلی راحت همون طور که می شمرید اعضار رو هم چاپ کیند یا اینکه تمام عدد های بین صفر تا n رو به صورت باینری بنویسید هر رقم نشون دهنده یک عضوه یک بودن یعنی هست و صفر بودن یعنی نیست بعد خیلی راحت تر از اونی که به نظر می رسه مسئله حل شده
     
  4. ARTA_ADOBE CO

    ARTA_ADOBE CO کاربر تازه وارد

    تاریخ عضویت:
    ‏22 مارس 2006
    نوشته ها:
    132
    تشکر شده:
    0
    آرش جان با باینری مینویسی (باC )؟
     
  5. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    یعنی چی با باینری می نویسن من گفتم برای تولید زیر مجموعه های می تونیم اعداد صفر تا n رو به صورت باینری بنویسیم
    این یه روش ریاضی برای بدتس آوردن تمام زیر مجموعه های یه مجموعه است به طوری که قابل شمارش هم باشه
     
  6. ARTA_ADOBE CO

    ARTA_ADOBE CO کاربر تازه وارد

    تاریخ عضویت:
    ‏22 مارس 2006
    نوشته ها:
    132
    تشکر شده:
    0
    خوب منم منظورم همین بود...
     
  7. Sajjad1364

    Sajjad1364 کاربر تازه وارد

    تاریخ عضویت:
    ‏10 فوریه 2007
    نوشته ها:
    12
    تشکر شده:
    0
    با سلام

    منظور من از نوشتن الگوریتم این بود که ,الگوریتمی از خودتون بنویسید نه اینکه با استفاده از راه حلهای ریاضی الگوریتم بنویسید .

    البته درسته که با استفاده از ریاضی خیلی آسون میشه ولی بعضی مواقع نیاز هست از ریاضی استفاده نکنید.

    مثلا برای بدست آوردنه تعداد ارقام یک عدد میشه براحتی و با لگاریتم در کمتر از یک خط این کار رو کرد. اما راه برنامه نویسیش کاملا از راه ریاضیش جداس.حالا آرش جان فرض کن اصلا ریاضی بلد
    نیستی ومیخای الگوریتم وبرنامشو بنویسی. پس ریاضی رو فعلا بیخیالش.
     
  8. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    بدون ریاضی که نمی شه برای یه مسئله که ذاتا ریاضی هست الگوریتم نوشت
    این پیاده سازی همون الگوریتمی هست که توضیح دادم (با کمک ارقام باینری)
    کد:
    #include <iostream>
    #include <cstdlib>
    #include <vector>
    
    using namespace std;
    
    template <typename T>
    void subset(const vector<T>&);
    
    int power(int ,unsigned int);
    char * D2B(int,char*);
    int main()
    {
    	cout<<"count :";
    	int count;
    	cin>>count;
    	vector<int> set(count);
    	for(int i=0 ; i < count  ; cin>>set[i++]);
        subset(set);
    	system("pause");
    	return EXIT_SUCCESS;
    }
    
    
    char *D2B(int n , char *b)
    {
        ltoa(n,b,2);
        return b;
    
    }
    template <typename T>
    void subset(const vector<T> &r)
    {
        char buffer[100];
        int k=1;
        long limit=power(2,r.size());
        for (int i=0 ; i < limit ; ++i)
        {
            cout<<endl<<k++<<" : ";
            D2B(i,buffer);
            char *p;
            for(p=buffer ; *p ;++p);
            --p;
            for(int j = 0 ;  p>=buffer; ++j,--p)
                if(*p=='1')
                    cout<<r[j]<<"  ";
        }
        cout<<endl;
    
    }
    
    int power(int x,unsigned int n)
    {
        if(n==0)
            return 1;
        return x*power(x,n-1);
    }
    
     
عسل طبیعی و گرده گل ایرانیخرید و فروش اتوماتیک ارزهای الکترونیکی