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

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

  1. #1

    Question پیشنهاد الگوریتم بهینه تر و سریعتر برای درخت پوشای مینیمال

    با سلام به همه دوستان عزیز
    می خواستم از اساتید فن برنامه نویسی خواهش کنم که من رو در نوشتن یه برنامه با برای درخت پوشای مینیمال به روش خیلی بهینه تر و سریعتر از الگوریتم های پریم و کراسکال و دیجسترا کمک کنن .

    آیا الگوریتم بهتری وجود داره که درخت رو سریعتر پیمایش کنه و به نتیجه برسه .
    اگر بخواهیم همین برنامه در در شبکه برای نود های داخل شبکه استفاده کنیم از چهه روشی باید استفاده کرد .

    اگر بخواهیم از همین برنامه برای فرمت هایی که دارای محتوایی ویدئویی دارن در شبکه بین نود ها جابجا میشن باید چکار کنیم ؟

    بخاطر محدودیت های زمانی و محل کار باید این با C++‎ پیاده سازی بشه .

  2. #2

    نقل قول: پیشنهاد الگوریتم بهینه تر و سریعتر برای درخت پوشای مینیمال

    الگوریتم‌های محاسبات تکاملی مثل الگوریتم ژنتیک و PSO هم وجود دارن که البته بحث دقت و سرعتشون جای بحث داره.

  3. #3

    نقل قول: پیشنهاد الگوریتم بهینه تر و سریعتر برای درخت پوشای مینیمال

    الگوریتم پرایم فکر کنم ازساده ترین الگوریتم ها برای درخت پوشای مینیمال باشه
    اما ما با کروسکال باید پیاده سازی کنیم

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

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

    #include<stdio.h>
    #include<conio.h>

    void sort (int X[][3])
    {
    int i,j,k,r;
    float m;
    for(j=0;j<10;j++)
    for(i=0;i<8;i++)
    if(X[i][2]>X[i+1][2])
    {
    for(k=i;k<8;k++)
    for(r=0;r<3;r++)
    {
    if(k==7)
    continue;
    else
    {
    m=X[k][r];
    X[k][r]=X[k+1][r];
    X[k+1][r]=m;
    }
    }
    }
    }
    void main()
    {
    int M[8][3]={{0,1,10},{0,2,5},{0,4,40},{1,2,15},{1,3,25},{2,3 ,30},{2,4,20},{3,4,5}};
    int N[4][2]={{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
    int S[5]={0,1,2,3,4};
    int i,j,sum=0,p,q;
    printf("+++++++++++++++++\n");
    printf("* is prototype *\n");
    printf("+++++++++++++++++\n\n");
    printf("first point start from node \'0\'\n\n");
    printf("relating betwin node:\n");
    for(i=0;i<8;i++)
    {
    for(j=0;j<3;j++)
    printf(" %d",M[i][j]);
    printf("\n");
    }
    sort(M);
    printf("===================================\n");
    printf("if you ready type \'y\'\n");
    getch();
    printf("===================================\n");
    printf("\nsort by longest:\n");
    for(i=0;i<8;i++)
    {
    for(j=0;j<3;j++)
    printf(" %d",M[i][j]);
    printf("\n");
    }
    for(i=0;i<4;i++)
    {
    p=M[i][0];
    q=M[i][1];
    if(S[p]!=S[q])
    {
    N[i][0]=p;
    N[i][1]=q;
    }
    sum+=M[i][2];
    for(j=0;j<8;j++)
    if(S[j]==S[q])
    S[j]=S[p];
    }
    printf("\n n: point of start line & m: end of line\n");
    printf("\nn\tm\n");
    printf("________________\n");
    for(i=0;i<4;i++)
    {
    printf("%d\t%d",N[i][0],N[i][1]);
    printf("\n");
    }
    printf("\nsumation of yals: %d",sum);
    printf("\n\n");
    }

  4. #4

    نقل قول: پیشنهاد الگوریتم بهینه تر و سریعتر برای درخت پوشای مینیمال

    برنامه نویسان گرامی ، کسی هست تو حل یه مشکل به من کمک کنه ؟؟
    من الگوریتم کروسکال رو خیلی ساده پیاده سازی کردم به زبان c
    که به این صورته
    #include<stdio.h>
    #include<conio.h>

    void sort (int X[][3])
    {
    int i,j,k,r;
    float m;
    for(j=0;j<10;j++)
    for(i=0;i<8;i++)
    if(X[i][2]>X[i+1][2])
    {
    for(k=i;k<8;k++)
    for(r=0;r<3;r++)
    {
    if(k==7)
    continue;
    else
    {
    m=X[k][r];
    X[k][r]=X[k+1][r];
    X[k+1][r]=m;
    }
    }
    }
    }
    void main()
    {
    int M[8][3]={{0,1,10},{0,2,5},{0,4,40},{1,2,15},{1,3,25},{2,3 ,30},{2,4,20},{3,4,5}};
    int N[4][2]={{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
    int S[5]={0,1,2,3,4};
    int i,j,sum=0,p,q;

    printf(" \n");
    printf("geraf vorodi:\n");
    for(i=0;i<8;i++)
    {
    for(j=0;j<3;j++)
    printf(" %d",M[i][j]);
    printf("\n");
    }
    sort(M);
    printf("===================================\n");
    printf("lotfan enter bezanid ta khoroji ra bebinid\n");
    getch();
    printf("===================================\n");
    printf("\nmoratb shde bar asase vazn:\n");
    for(i=0;i<8;i++)
    {
    for(j=0;j<3;j++)
    printf(" %d",M[i][j]);
    printf("\n");
    }
    for(i=0;i<=4;i++)
    {
    p=M[i][0];
    q=M[i][1];
    if(S[p]!=S[q])
    {
    N[i][0]=p;
    N[i][1]=q;
    sum+=M[i][2];
    }

    for(j=0;j<8;j++)
    if(S[j]==S[q])
    S[j]=S[p];
    }
    printf("node shoro \'0\'\n\n");
    printf("\nshoroo payan \n");
    printf("\nn\tm\n");
    printf("________________\n");
    for(i=0;i<=4;i++)
    {
    printf("%d\t%d",N[i][0],N[i][1]);
    printf("\n");
    }
    printf("\nmajmoo yalha: %d",sum);
    printf("\n\n");
    getch();
    clrscr();
    }
    همه چیش درسته اما یه مشکل داره اونم اینکه وقتی نودها رو بر اساس کوچکترین وزن یاد انتخاب میکنه اون دو نودی که تشکیل حلقه میدن رو نباید انتخاب کنه من این شرط رو تو برنامه گذاشتم اما باز هم نودی رو که تشکیل حلقه میده تو خروجی چاپ میشه و دو تا 1- میذاره الان مشکل من اینه که چی کار کنم این عدد منفی یک که در واقع همون نود هایی هست که تشکیل حلقه میدن رو چاپ نکنه ،
    خیلی سعی کردم این مشکل رو حل کنم اما نشد
    حالا اگه کسی بتونه منو راهنمایی کنه ممنون میشم فراوان
    با تشکر

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

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