تالار گفتمان مانشت
پرانتز گذاری ضرب ماتریس ها - نسخه‌ی قابل چاپ

پرانتز گذاری ضرب ماتریس ها - shirin ftf - 13 خرداد ۱۳۹۵ ۰۹:۰۱ ب.ظ

یه برنامه سی شارپ برای پرانتز گذاری ضرب ماتریس ها نوشتم یکم خطا داره
هیشکی خیر هست برناممو براش بفرستم اشکالامو بگه؟؟Blush

RE: پرانتز گذاری ضرب ماتریس ها - blackhalo1989 - 13 خرداد ۱۳۹۵ ۱۰:۰۰ ب.ظ

کار من سی شارپ نیست. اگه یه سی شارپ کار کدتون رو ببینه بهتر میتونه نظر بده. پرانتز گذاری ضرب ماتریس رو هم فراموش کردم. فقط چند تا نکته که به ذهنم میرسه رو میگم:
- بهتر بود خطای کدتون رو مشخص کنید. مثلا خطای سینتکسی داره یا خطای منطقی؟
- فاصله گذاری ها رو رعایت کنید. بعد و قبل از عملگر ها (مثل >=) و همینطور بعد از "," باید یه اسپیس بذارید.
- بهتره برای هر متدی که مینوسید یه داکیومنتیشن کوچیک بنویسید. مثلا اینکه اون متد چیکار می کنه، هر ورودی قراره چه مقداری بگیره، مقدار خروجی چیه، چه استثناها (exception) هایی رو میندازه بیرون و هر استثنا رو در چه صورتی میندازه بیرون.
- از اسم های فینگلیش (zarb) استفاده نکنید. zarb3 اسم خوبی نیست.
- بهتره بالای کد مشخص باشه این کد رو چه کسی و در چه تاریخی نوشته و یه توضیح کلی بدید که این کد قراره چیکار کنه.
- سعی کنید متد ها خودشون چیزی رو چاپ نکنن (مگر اینکه log باشه). بهتره خروجی رو return کنن و موارد خطا و استثنایی و غیر قابل انتظار رو به صورت استثنا (exception) بندازن بیرون.
- پیشنهاد میشه ساختار هایی مثل if‌ همیشه بریس ({}) داشته باشن حتی مواقعی که قسمت بدنه اونها یه دستوره و از لحاظ سینتکس احتیاجی به بریس ندارن.
- بعضی از قسمت ها indentation کدتون به هم خورده. IDE ها معمولا دارای ابزاری هستن که به صورت خودکار فاصله گذاری ها و همینطور indentation کد رو درست می کنه. چون من با visual studio کار نمی کنم نمیتونم نظر بدم که چجوری میشه تو visual studio این کار رو انجام داد.
- بهتره که کد قسمت هایی که به صورت موقت کامنت میشن نداشته باشه مگر اینکه دلیل خوبی برای وجودشون داشته باشید.

RE: پرانتز گذاری ضرب ماتریس ها - Behnam‌ - ۱۳ خرداد ۱۳۹۵ ۱۰:۲۳ ب.ظ

(۱۳ خرداد ۱۳۹۵ ۰۹:۰۱ ب.ظ)shirin ftf نوشته شده توسط:  یه برنامه سی شارپ برای پرانتز گذاری ضرب ماتریس ها نوشتم یکم خطا داره
هیشکی خیر هست برناممو براش بفرستم اشکالامو بگه؟؟Blush
برنامه که دارای اشکال هست اما منظورتون از پرانتزگذاری چی هست؟ قرار هست دقیقاً چه کاری انجام بدید؟

RE: پرانتز گذاری ضرب ماتریس ها - shirin ftf - 13 خرداد ۱۳۹۵ ۱۰:۲۴ ب.ظ

یعنی هیشکییییییییییییی سی شارپ بلد نیست که کمک کنه؟؟!!!!Huh

(۱۳ خرداد ۱۳۹۵ ۱۰:۲۳ ب.ظ)behnam5670 نوشته شده توسط:  
(13 خرداد ۱۳۹۵ ۰۹:۰۱ ب.ظ)shirin ftf نوشته شده توسط:  یه برنامه سی شارپ برای پرانتز گذاری ضرب ماتریس ها نوشتم یکم خطا داره
هیشکی خیر هست برناممو براش بفرستم اشکالامو بگه؟؟Blush
برنامه که دارای اشکال هست اما منظورتون از پرانتزگذاری چی هست؟ قرار هست دقیقاً چه کاری انجام بدید؟

خوب پرانتز گذاری ضرب ماتریس هاست
ورودی تعدادی ماتریس هست .که تعداد ماتریس و ابعاد ان ها از کاربر گرفته میشه بعد باتوجه بهmin جواب ضرب انها رو پرانتز گذاری میکنه
مثلا خروجی باید این مدلی باشه(CD)(AB)
که این مدل وقتی ماتریس ها ضرب میشن(با این روش پرانتز گذاری) جواب ضرب از روش های دیگر کمتر است
فهمیدین چی شد؟؟Big Grin

RE: پرانتز گذاری ضرب ماتریس ها - Behnam‌ - ۱۴ خرداد ۱۳۹۵ ۰۱:۱۴ ق.ظ

جواب ضرب ماتریس‌ها ربطی به نحوه‌ی پرانتزگذاری نداره، یعنی جواب برابر هست در هر حالت! یعنی مثلاً [tex]A(BC)=(AB)C[/tex]
چیزی به اسم مینیمم نداریم.

RE: پرانتز گذاری ضرب ماتریس ها - Behnam‌ - ۱۴ خرداد ۱۳۹۵ ۰۵:۴۰ ق.ظ

نقل قول: که این مدل وقتی ماتریس ها ضرب میشن(با این روش پرانتز گذاری) جواب ضرب از روش های دیگر کمتر است
نکنه منظورتون از "جواب ضرب"، تعداد عملیات لازم برای انجام عمل ضرب هست!؟ چون تغییر پرانتزها فقط روی تعداد عملیات لازم اثر میذاره.
شبه‌کد و یا کد جاوای لینک زیر رو نگاه کنید، به راحتی میتونید به سی‌شارپ تبدیل کنید. خصوصاً جاوا که کافی هست خط به خط تبدیل کنید

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: پرانتز گذاری ضرب ماتریس ها - shirin ftf - 15 خرداد ۱۳۹۵ ۰۱:۴۶ ق.ظ

(۱۴ خرداد ۱۳۹۵ ۰۱:۱۴ ق.ظ)behnam5670 نوشته شده توسط:  جواب ضرب ماتریس‌ها ربطی به نحوه‌ی پرانتزگذاری نداره، یعنی جواب برابر هست در هر حالت! یعنی مثلاً [tex]A(BC)=(AB)C[/tex]
چیزی به اسم مینیمم نداریم.
خوب با مثال میگم منظورمو بفهمی

۴ماتریس abcd داریم:a4*5......b5*2.............c2*6..........d6*3 با این ابعادی که نوشتم
۱۰۰=(cd)(ab)
a(bc)d=256
جوابمون میشه اولیه که ۱۰۰ هست و کمتره.همون میشه مینیمم تعداد ضرب ها


RE: پرانتز گذاری ضرب ماتریس ها - Behnam‌ - ۱۵ خرداد ۱۳۹۵ ۰۲:۰۱ ق.ظ

(۱۵ خرداد ۱۳۹۵ ۰۱:۴۶ ق.ظ)shirin ftf نوشته شده توسط:  
(14 خرداد ۱۳۹۵ ۰۱:۱۴ ق.ظ)behnam5670 نوشته شده توسط:  جواب ضرب ماتریس‌ها ربطی به نحوه‌ی پرانتزگذاری نداره، یعنی جواب برابر هست در هر حالت! یعنی مثلاً [tex]A(BC)=(AB)C[/tex]
چیزی به اسم مینیمم نداریم.
خوب با مثال میگم منظورمو بفهمی

۴ماتریس abcd داریم:a4*5......b5*2.............c2*6..........d6*3 با این ابعادی که نوشتم
۱۰۰=(cd)(ab)
a(bc)d=256
جوابمون میشه اولیه که ۱۰۰ هست و کمتره.همون میشه مینیمم تعداد ضرب ها

متوجه شدم منظورتون رو. توو پست بالا هم یه لینکی از ویکی‌پدیا دادم که این کد رو به صورت شبه کد و هم به صورت جاوا نوشتند که تفاوت جزئی با سی‌شارپ داره و میتونید خط به خط کدش رو تبدیل کنید.
علت اینکه بهتون کد رو نشون دادم این هست که خیلی شبیه کد خودتون هست و میتونید با مقایسه با کدی که نوشتید، متوجه بشید که کجا اشتباه کردید. یه سری متغیرها رو هم حواستون باید باشه که global تعریف کنید. اون تابع min هم که استفاده میکنید و هیچ جا هم تعریف نکردید اشتباه هست چون min باید حداقل دو تا عدد بگیره، اینجا شما یه عدد میگیرید اگه اشتباه نکنم. باید با مقدار قبلی cost مقایسه کنید به نظرم (یعنی min بگیرید).

RE: پرانتز گذاری ضرب ماتریس ها - shirin ftf - 15 خرداد ۱۳۹۵ ۰۲:۲۶ ق.ظ

(۱۵ خرداد ۱۳۹۵ ۰۲:۰۱ ق.ظ)behnam5670 نوشته شده توسط:  
(15 خرداد ۱۳۹۵ ۰۱:۴۶ ق.ظ)shirin ftf نوشته شده توسط:  
(14 خرداد ۱۳۹۵ ۰۱:۱۴ ق.ظ)behnam5670 نوشته شده توسط:  جواب ضرب ماتریس‌ها ربطی به نحوه‌ی پرانتزگذاری نداره، یعنی جواب برابر هست در هر حالت! یعنی مثلاً [tex]A(BC)=(AB)C[/tex]
چیزی به اسم مینیمم نداریم.
خوب با مثال میگم منظورمو بفهمی

۴ماتریس abcd داریم:a4*5......b5*2.............c2*6..........d6*3 با این ابعادی که نوشتم
۱۰۰=(cd)(ab)
a(bc)d=256
جوابمون میشه اولیه که ۱۰۰ هست و کمتره.همون میشه مینیمم تعداد ضرب ها

متوجه شدم منظورتون رو. توو پست بالا هم یه لینکی از ویکی‌پدیا دادم که این کد رو به صورت شبه کد و هم به صورت جاوا نوشتند که تفاوت جزئی با سی‌شارپ داره و میتونید خط به خط کدش رو تبدیل کنید.
علت اینکه بهتون کد رو نشون دادم این هست که خیلی شبیه کد خودتون هست و میتونید با مقایسه با کدی که نوشتید، متوجه بشید که کجا اشتباه کردید. یه سری متغیرها رو هم حواستون باید باشه که global تعریف کنید. اون تابع min هم که استفاده میکنید و هیچ جا هم تعریف نکردید اشتباه هست چون min باید حداقل دو تا عدد بگیره، اینجا شما یه عدد میگیرید اگه اشتباه نکنم. باید با مقدار قبلی cost مقایسه کنید به نظرم (یعنی min بگیرید).
اهووم
ممنون
حالا یه تغییراتی دادم بهش

(۱۵ خرداد ۱۳۹۵ ۰۲:۰۱ ق.ظ)behnam5670 نوشته شده توسط:  
(15 خرداد ۱۳۹۵ ۰۱:۴۶ ق.ظ)shirin ftf نوشته شده توسط:  
(14 خرداد ۱۳۹۵ ۰۱:۱۴ ق.ظ)behnam5670 نوشته شده توسط:  جواب ضرب ماتریس‌ها ربطی به نحوه‌ی پرانتزگذاری نداره، یعنی جواب برابر هست در هر حالت! یعنی مثلاً [tex]A(BC)=(AB)C[/tex]
چیزی به اسم مینیمم نداریم.
خوب با مثال میگم منظورمو بفهمی

۴ماتریس abcd داریم:a4*5......b5*2.............c2*6..........d6*3 با این ابعادی که نوشتم
۱۰۰=(cd)(ab)
a(bc)d=256
جوابمون میشه اولیه که ۱۰۰ هست و کمتره.همون میشه مینیمم تعداد ضرب ها

متوجه شدم منظورتون رو. توو پست بالا هم یه لینکی از ویکی‌پدیا دادم که این کد رو به صورت شبه کد و هم به صورت جاوا نوشتند که تفاوت جزئی با سی‌شارپ داره و میتونید خط به خط کدش رو تبدیل کنید.
علت اینکه بهتون کد رو نشون دادم این هست که خیلی شبیه کد خودتون هست و میتونید با مقایسه با کدی که نوشتید، متوجه بشید که کجا اشتباه کردید. یه سری متغیرها رو هم حواستون باید باشه که global تعریف کنید. اون تابع min هم که استفاده میکنید و هیچ جا هم تعریف نکردید اشتباه هست چون min باید حداقل دو تا عدد بگیره، اینجا شما یه عدد میگیرید اگه اشتباه نکنم. باید با مقدار قبلی cost مقایسه کنید به نظرم (یعنی min بگیرید).
اهووم
ممنون
حالا یه تغییراتی دادم بهش