PDA

نسخه کامل مشاهده نسخه کامل : درخواست روش محاسبه ماتريس بالا مثلثي و پايين مثلثي



bahareh_eh
21-06-2006, 00:35
روش محاسبه ماتريس بالا مثلثي و پايين مثلثي
من منتظرم :sad:

w32.slammer
29-06-2006, 18:34
shoma eshteba mikoni montazery inja jaye anjam dadane poroje haye daneshgatoon nis azizam.....boro kar bokon yad begir age moshkeli dashty ma dar khedmatim

rezash86
16-09-2006, 13:08
سلام حرف w32.slammerرو گوش نكن
برو به سايت [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] حتما اونجا هست
ولي اگه نبود من مي تونم برات بنويسم
خواستي rezash86@yahoo.com (يعني خودم) كمكت ميكنه!!!

Atous71
23-09-2013, 00:04
سلام میشه در مورد این سوال منو راهنمایی کنید؟ سوال اینه : برای نگهداری یک ماتریس اسپارس n*n حداکثر چند عنصر مفید وجود دااشته باشد که روش دوم ذخیره سازی از لحاظ حافظه بهینه تر از روش اول (آرایه 2 بعدی) باشد؟ ممنون میشم اگه بتونین کمکم کنبن

_H2_
25-09-2013, 11:19
سلام
این تاپیک قدیمی است و بهتر بود سوالتان را در تاپیک مجزایی مطرح میکردید ...
=====
شما مشخص نکرده اید آرایه شما از چه جنسی است؟ byte؟ int؟ double؟
اینها فرق دارد، باید مشخص شود دیتای شما چند بایت را اشغال میکند؟
یا حتی اگر دیتا اشاره گری باشد (مانند string) آنگاه 32 بیتی یا 64 بیتی بودن رایانه و سیستم عامل مقصد هم مهم میشود؟!
و نیز اعداد سطر و ستون شما در اسپارس، چند بایتی هستند و تا چند سطر و ستون را پوشش میدهند؟ 1؟ 2؟ 4؟
این فرضیات اگر فرق کند و هرکسی برای خودش یک فرضی کند، هر کس یک جواب خواهد داد و هرکس هم خواهد گفت جواب من درست است و لاغیر!

درواقع شما یک مسئله ریاضی مطرح کرده اید و ورودی های دقیق نداده اید و جواب دقیق میخواهید!
(مانند پیدا کردن پرتغال فروش می ماند :n02:)

اگر فرض کنیم جواب همه سوالات فوق یکی است
یعنی اعداد سطر و ستون و دیتا همه 4 بایتی یا 32 بیتی و int هستند
یا مثلاً
اعداد سطر و ستون و دیتا همه 2 بایتی یا 16 بیتی و short هستند
یا
...

با فرض فوق جواب چنین خواهد بود:
ماتریس عادی n*n خانه دارد در حالیکه اسپارس 3*count خانه دارد پس طی یک نامعادله ساده، اسپارس وقتی خانه کمتری اشغال میکند که تعداد خانه های ان کمتر از n*n/3 باشد.
یعنی کمتر از 1/3 یا 33% خانه های ماتریس باید پر باشند.
اگر از هر سه خانه ماتریس یکی پر باشد حجم حافظه اسپارس و ماتریس عادی برابر خواهد شد.

rahnema1
30-09-2013, 07:09
روش محاسبه ماتريس بالا مثلثي و پايين مثلثيمن منتظرم :sad:

روش محاسبه ماتريس بالا مثلثي و پايين مثلثي
من منتظرم :sad:
دردسر زیادی نداره فقط کافیه تعریف ماترس بالا مثلثی رو بدونید که عبارت است از ماتریسی که تمام درایه ها زیر قطر اصلی صفر هستند کار شما اینه که یه برنامه رو بنویسید که تمام درایه های زیر قطر اصلی رو بررسی کنه که آیا صفر هستند یا نه؟
انگار کار خیلی راحت شد روی مطلب بالا فکر کنید شاید بتونید جوابشو پیدا کنید وگر نه به ادامه مطلب توجه کنید:
اگر می خواستید یک لیست شامل صد عدد رو بررسی کنید که آیا بین اونها صفر پیدا میشه چکار می کردید؟ یک دستور for می نوشتید که تک تک اعضا رو چک کنه
به علت اینکه ماترس یک آرایه دو بعدی هست لازمه که for تو در تو بنویسید یعنی یک for که توی for دیگه قرار میگیره یکی اندکس سطرها رومیده و دیگری اندکس ستون ها رو
2 3 5 1 6
7 5 8 2 0
1 7 3 0 0
7 3 0 0 0
4 0 0 0 0
خب صفر ها از سطر دوم شروع میشه و تا سطر پنجم ادامه پیدا می کنه همچنین از ستون اول تا چهارم دقت کنید تعداد صفرهای هر سطر وابسته است به شماره سطری که داریم بررسی می کنیم
برنامه:
سطر دوم:از ستون اول تا ستون اول بررسی کن که صفر است یا نه
سطر سوم:از ستون اول تا ستون دوم بررسی کن که صفر است یا نه
سطر چهارم:از ستون اول تا ستون سوم بررسی کن که صفر است یا نه
سطر پنجم:از ستون اول تا ستون چهارم بررسی کن که صفر است یا نه
کمی دقیق تر بشیم:
سطر دوم:از ستون اول تا ستون (شماره سطر منهای 1) ام بررسی کن که صفر است یا نه
سطر سوم:از ستون اول تا ستون (شماره سطر منهای 1) ام بررسی کن که صفر است یا نه
سطر چهارم:از ستون اول تا ستون (شماره سطر منهای 1) ام بررسی کن که صفر است یا نه
سطر پنجم:از ستون اول تا ستون (شماره سطر منهای 1) ام بررسی کن که صفر است یا نه
فکر کنم باز کار شما راحت تر شد و بتوانید برنامه را بنویسید اگر نه:
شروع برنامه:
شروع حلقه:
برای سطر شماره 2 تا سطر شماره 5 انجام بده:
برای ستون شماره 1 تا ستون (شماره سطر منهای 1) انجام بده:
اگر درایه عضو سطر و ستون مورد نظر برابر صفر نیست پیغام صادر کن که ماتریس بالا مثلثی نیست و از برنامه خارج می شویم
اتمام حلقه
پیغام صادر کن که ماترس بالا مثلثی است
اتمام برنامه
در برنامه بالا فرض بر این است که اندکس ماتریس از شماره 1 شروع می شود نه صفر شبه کد زیر هم همین طور
(mat =matrix(5*5
for i from 2 to 5
for j from 1 to i-1
if mat [i,j]!=0 then print matrix is not upper triangular}
{return
print matrix is upper triangular
return