PDA

View Full Version : نگاشت فضای مسأله



shaniaki
یک شنبه 13 مهر 1382, 21:35 عصر
با عرض ادب:
بسیاری اوقات نگاشتی که از فضای صورت واقعی و عملی مسأله به فضایی که ورودی الگوریتم ما می باشد و بالعکس نگاشتی که از فضای خروجی مسأله به فضای عملی که مسأله در آن طرح شده به اندازه خود الگوریتم مهم می باشند و چه بسا طراحی الگوریتم حل مسأله را ساده تر می کنند. قسمت اول را یک جورایی می توان به مدل سازی ریاضی تشبیه کرد.
به عنوان نمونه به ضمیمه های این پیام نگاه کنید منظور من را متوجه می شوید اگر برنامه ای برای تولید چنین خروجی هایی بنویسیم فضای ورودی یک عکس و فضای خروجی یک سری کاراکتر خواهد بود.
اگر دوستان اطلاعات و یا منابع تخصصی در خصوص این بحثسراغ دارند در اختیار ما هم بگذارند.

یه عشق برنامه نویسی خفن

Kambiz
سه شنبه 15 مهر 1382, 01:02 صبح
بعد از چندین بار خواندن متن پرسش و یک شبانه روز فکر کردن در موردش، آخر هم نفهمیدم داستان از چه قراره. :lol:

با توجه به عنوان موضوع باید چیزی درباره‌ی « نگاشت فضای مسأله » باشه ولی من نمی‌دونم نگاشت یعنی چی! :oops: با نگاه کردن به تصاویر متنی هم نتونستم رابطه‌ای بین نگاشت و تصاویر پیدا کنم. :(

ممکنه خواهش کنم یه جور دیگه (یا حتی با یه زبون دیگه) مطلب رو دوباره بیان کنی؟

(امید)
سه شنبه 15 مهر 1382, 06:54 صبح
خیلی جالب بود. :!: :!: :?: :idea:
آقای شنیکی لطفا بیشتر توضیح بدین

shaniaki
چهارشنبه 16 مهر 1382, 12:47 عصر
با عرض ادب:
احتمالا سوال را بد مطرح کردم. منظورم از نگاشت mapping و از فضا همون space بود. کسانی که جبر خطی(یا هندسه تحلیلی و جبر خطی) را در دبیرستان پاس کرده اند با این لغات آشنایی دارند.
ببینید اصولا وقتی می خواهید یک مسأله را در دنیای واقعی حل کنید با سیگنال ها و نوع ورودی های متفاوتی سر و کار دارید. برای اینکه بتوانید این ورودی ها را به الگوریتمی به خصوص بدهید باید این ورودی ها را به زبان قابل فهمی برای یک الگوریتم (مثلا آرایه ای از اعداد یا ...) تبدیل کنید. این چیزی است که من به آن نگاشت از فضای صورت مسأله به فضای قابل فهم الگوریتمم می گویم.( من در مورد این مطلب چیزی نخوانده ام که اسمی دیگر روی آن بگذارم.) عکس آن هم برای گرفتن خروجی عملی از خروجی یک الگوریتم لازم است. دقت کنید که این مطلب جدیدی نیست و چون به صورت تفکیک شده آن را مطرح کردم کمی عجیب به نظر می رسد.
مثال: همه ما با یک الگوریتم بازگشتی آشنایی داریم و به طور کلی می دانیم در هر مرحله اجرای آن چه چیزی باید انجام شود و چه شرط هایی باید چک شود و در نهایت چه چیزی به عنوان خروجی معرفی شود. وقتی به ما می گویند «برنامه ای بنویس که داخل تمام دایرکتوری ها را به دنبال مثلا چیز به خصوصی بگردد» ما دقیقا ساختار یک الگوریتم بازگشتی را می نویسیم و فقط به جای شرط تابع بازگشتی و اعمال انجام شده در آن دستوراتی را می نویسیم که مسأله ما را حل کند یعنی فضای ورودی مسأله که یک سری فایل و دایرکتوری می باشد را با توابعی مثل لیست گرفتن از فایل های یک دارکتوری و ... به فضای ورودی مسأله map کرده ایم.(سعی کردم مثال ساده باشد)
در فایل های attach شده دقت کنید. برنامه ای که قرار است با یک عکس jpg چنین کاری را بکند الگوریتم محاسباتی ساده ای دارد(تقریبا محاسبه ای ندارد) و مانند یک رابطه یک به یک (یا حداکثر چند به یک) عمل می کند. نکته مهم فقط نگاشت فضای ورودی (چند پیکسل RGB) به ورودی الگوریتم و نگاشت خروجی الگوریتم به فضای جواب(یک کاراکتر) می باشد. این مثال را برای این مفید یافتم که نقش قسمت محاسباتی الگوریتم کم رنگ تر و نقش این تبدیلات در آن پر رنگ تر است.

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

یه عشق برنامه نویسی خفن

Kambiz
شنبه 19 مهر 1382, 17:40 عصر
بطور خلاصه می‌شه گفت که هیچ راه حل کلی برای این منظوری که گفتی وجود نداره.

برای تجزیه و تحلیل و درک یک سیستم (منظور فقط سیستمهای کامپیوتری نیست) اولین گام پیدا کردن ورودیها و خروجیهای اون سیستم هست. هر سیستمی حداقل (دست کم برای سیستمهای قابل لمس ما) یک ورودی یا خروجی داره و تا وقتی که این ورودیها یا خروجیها مشخص نشدن درک نحوه کار سیستم تنها با حدس و گمان ممکنه و این اون چیزی نیست که بشه باهاش به جوابی قاطع رسید. به عنوان نمونه به بزرگترین سیستمی که می‌شناسیم فکر کن٬ منظورم کل هستی است (Universe). آیا این سیستم ورودی داره؟ خروجی چطور؟ تا حالا کسی جواب درستی به این سوال نداده و به همین دلیل هم هست که هنوز قادر به درک اون یا به عبارتی یافتن هدفی براش نیستیم. اگر هم کسی پاسخی داده صرفا" گمانه‌زنیهای غیر ماتریالیستی بوده. از دیدگاه ماتریالیستی به نظر میاد که این سیسم ورودی یا خروجی نداره و یک سیستم بسته هست. یک سیستم بسته هم هدفی خاص رو دنبال نمی‌کنه. ولی آیا واقعا" این سیستم بدون ورودی یا خروجی‌هست؟

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

در مبحث الگوریتم وضع از این هم بد‌تره. چون نه تنها در مرحله تجزیه و تحلیل سیستم باید مرحله‌ی یافتن ورودی و خروجیها رو پشت سر گذاشت٬ بلکه پس از اون در مرحله طراحی نیز باید این ورودی و خروجیها رو به ساختارهای قابل درک برای الگوریتم تبدیل نمود (تازه رسیدیم به سوالی که کردی).

خود این تبدیل کردن ورودی و خروجیها به ساختارهای الگوریتمی جزوی از طراحی و حل مسئله هست. ولی چرا گفتم که در مرحله طراحی وضع از مرحله تجزیه و تحلیل بدتره؟ ساختارهای الگوریتمی به اون گوناگونی ساختارهای موجود در جهان واقعیت نیستند. به عبارت دیگه ممکنه سیستم رو خوب تجزیه و تحلیل کرده باشیم و ورودی و خروجیها و نحوه کار اون رو هم به روشنی بدونیم و حتی بدونیم که چطور الگوریتم اون رو پیاده کنیم٬ اما راهی برای گنجاندن ورودیها و خروجیهای اون در یک ساختار الگوریتمی پیدا نکنیم. البته همیشه راه حلی هرچند پیچیده وجود داره٬ چون که در جهان واقعی هر کلیت پیچیده‌ای از تجمع جزئیات ساده‌ای بوجود میاد (به همین دلیل به نظر من هوشمندی در ارائه راه حلی ساده هست نه راه حلی پیچیده).

ساختارهای ساده و ترکیبیی که برای الگوریتمهای کامپیوتری قابل درک هستند در مبحثی به نام ساختار داده‌ها (Data Structures (http://www.wikipedia.org/wiki/Data_structure)) شرح داده می‌شند. برای مطالعه می‌تونی تو بازار کتابهایی رو که معمولا" با همین عنوان هستند پیدا کنی.

shaniaki
شنبه 19 مهر 1382, 19:23 عصر
با عرض ادب:
از زحمتی که برای جواب کشیدید متشکرم.
در مورد کتاب های ساختمان داده ها و ... هم باید بگم هر چند رشته تخصصی دانشگاهی من نرم افزار نیست ولی اکثر کتاب ها و دروس مرتبط با آن را یک ورقی زده ام اما چون برای این سوال یعنی به قول شما گنجاندن ورودی ها و خروجی ها در ساختار الگوریتمی تکنیکی پیدا نکردم این سوال را مطرح کردم. به هر شکل فکر می کردم غیر از مشاهده مثال های عملی متعدد و رسیدن تجربی به این قابلیت یک سری شیوه های کلی پیشنهادی استخراج شده باشه که ظاهرا این کار صورت نگرفته و یا غیر ممکن است (هر چند به نظر من غیر ممکن نیست- من خودم تشابهاتی در الگوریتم های مختلف می بینم- شما هم می بینید- ولی حداقل من نمی توانم بیان کنم).
به هر حال همان طور که شما اشاره کردید بحث احتمالا کلی تر از مطلب الگوریتم صرف است و در مورد سیستم های دیگر (فیزیکی و غیر فیزیکی) هم قابل بیان است.

یه عشق برنامه نویسی خفن

Voldemort
سه شنبه 19 اسفند 1382, 09:37 صبح
آقای Shaniaki ولی فکر کنم این کار یک الگوریتم خاصی داشته باشه. تقریبا دو سال پیش یک همچین چیزی رو تو یه سایتی که متاسفانه حالا آدرسشو ندارم پیدا کردم. صفحات وبش رو هم ذخیره کردم که متاسفانه سی دی مربوطه خراب شد. حالا اگه کسی بتونه کمک کنه که یه دنیا ممنون می شم.