PDA

View Full Version : اصلاح کد



sa1378
یک شنبه 09 شهریور 1393, 09:43 صبح
سلام
من دوباره مزاحم شدم
اشکال این کد چیه؟
موقع اجرا force close میده
در ضمن این کد برای محاسبه زیرآرایه بیشنیه هست(Maximum Subarray)
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() {
const int N=16;
int a[N]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
int max=0;
int low;
int high;


for(int i=0;i<N;i++)
{
int sum=0;
for(int j=i;i<N;j++)
{
sum+=a[j];
if(sum>max)
{
max=sum;
low=i;
high=j;
}
}
}
cout<<low<<" "<<high<<" "<<max<<endl;

return 0;
}

مسعود اقدسی فام
یک شنبه 09 شهریور 1393, 11:32 صبح
خط 16 باید j < N باشه.

amir.bakhtiari
یک شنبه 09 شهریور 1393, 11:32 صبح
تو حلقه دوم (حلقه داخلی) نوشتی i<N درستش کن بجاش j بزار -فکر کنم درست شه

sa1378
یک شنبه 09 شهریور 1393, 12:47 عصر
ممنون درست شد
من همیشه توی حلقه این اشتباهو میکنم
جالب اینجا هست که هرچندبار هم نگاش کنم فکر میکنم درسته

sa1378
یک شنبه 09 شهریور 1393, 12:50 عصر
یه سوال دیگه هم داشتم
زمان اجرای این( O( n^2 هست دیگه؟
توی این کد بجای محاسبه هر زیر آرایه به صورت جدا اومدیم از ذخیره شده های قبلی استفاده کردیم
اگه هرکدومو جدا محاسبه کنیم هم باز زمان اجراش میشه ( O( n^2
درصورتی که این کد باید سریعتر باشه
پس چرا نیست؟

omid_kma
یک شنبه 09 شهریور 1393, 13:37 عصر
از کجا فهمیدی سریع تر نیست ؟
( این که 2 تا الگوریتم از مرتبه 2^n باشن دلیل نمیشه سرعتشون یکی باشه اون ثابت C هم تاثیر گذاره .)
صفحه ویکیپدیا همین maximum subarray رو ببینید الگوریتم از مرتبه n هم براش هست

مسعود اقدسی فام
یک شنبه 09 شهریور 1393, 13:45 عصر
ممنون درست شد
من همیشه توی حلقه این اشتباهو میکنم
جالب اینجا هست که هرچندبار هم نگاش کنم فکر میکنم درسته
گاهی نگاه کردن کفایت نمی‌کنه. لازمه گام به گام کد رو اجرا و دنبال کنید تا اشکالش مشخص شه.

ciavosh
یک شنبه 09 شهریور 1393, 19:56 عصر
ممنون درست شد
من همیشه توی حلقه این اشتباهو میکنم
جالب اینجا هست که هرچندبار هم نگاش کنم فکر میکنم درسته

شما با مفهوم Trace آشنا نیستید؟

sa1378
یک شنبه 09 شهریور 1393, 20:08 عصر
شما با مفهوم Trace آشنا نیستید؟

دوست عزیز جواب مورد نظر رو گرفتم
الان شما باز میخواین جر و بحث راه بندازین
لطفا دیگه پست نذارین
آشنا هم نیستم با تریس

ciavosh
یک شنبه 09 شهریور 1393, 20:12 عصر
دوست عزیز جواب مورد نظر رو گرفتم
الان شما باز میخواین جر و بحث راه بندازین
لطفا دیگه پست نذارین
آشنا هم نیستم با تریس
دوستان، مشکل شما رو برای شما پیدا میکنن ولی با این رویکرد شما خودتون نمیتونید مشکل رو پیدا کنید. آیا همیشه دیگران باید مشکل کد شما را بیابند؟

sa1378
یک شنبه 09 شهریور 1393, 20:16 عصر
دوستان، مشکل شما رو برای شما پیدا میکنن ولی با این رویکرد شما خودتون نمیتونید مشکل رو پیدا کنید. آیا همیشه دیگران باید مشکل کد شما را بیابند؟

برای همین هم اینجا پرسیدم چجوری باید این مشکلات رو رفع کنم(اگه زحمتتون نشده باشه و پست های قبلی رو خونده باشین)
از این به بعد هم سعی میکنم خودم رفعشون کنم

ciavosh
یک شنبه 09 شهریور 1393, 20:25 عصر
برای همین هم اینجا پرسیدم چجوری باید این مشکلات رو رفع کنم(اگه زحمتتون نشده باشه و پست های قبلی رو خونده باشین)
از این به بعد هم سعی میکنم خودم رفعشون کنم

من عذر میخوام که پست مذکور رو همچنان نمیبینم. فقط آقای اقدسی رو دیدم که به اختصار توضیح دادند. موفق باشید.

sa1378
یک شنبه 09 شهریور 1393, 20:28 عصر
ممنون درست شد
من همیشه توی حلقه این اشتباهو میکنم
جالب اینجا هست که هرچندبار هم نگاش کنم فکر میکنم درسته

گاهی نگاه کردن کفایت نمی‌کنه. لازمه گام به گام کد رو اجرا و دنبال کنید تا اشکالش مشخص شه.


من عذر میخوام که پست مذکور رو همچنان نمیبینم. فقط آقای اقدسی رو دیدم که به اختصار توضیح دادند. موفق باشید.
بفرمایید اینم پست

a.r.khoshghalb
دوشنبه 10 شهریور 1393, 06:59 صبح
یه سوال دیگه هم داشتم
زمان اجرای این( O( n^2 هست دیگه؟
توی این کد بجای محاسبه هر زیر آرایه به صورت جدا اومدیم از ذخیره شده های قبلی استفاده کردیم
اگه هرکدومو جدا محاسبه کنیم هم باز زمان اجراش میشه ( O( n^2
درصورتی که این کد باید سریعتر باشه
پس چرا نیست؟

نه اگر بخوای برای هر زیر آرایه بدون استفاده از مجموع زیر آرایه های قبلی جمع بزنی n^3 میشه.
n^2 تا زیر آرایه داریم برای جمع زدن هر کدوم باید n تا هزینه کنی.