PDA

View Full Version : لطفا کمکم کنید در مورد آرایه ها مهم



aloneman2005
دوشنبه 06 شهریور 1385, 19:55 عصر
من میخوام یک آرایه درست کنم که در آن یک سری عدد رو بزارم بعد وقتی یکی از اون اعداد رو فراخوانی کردم عدد مقابل آن ظاهر شود بدون جستجو
مثلا یک ارایه که در آن داشته باشیم
12=ص
255=ش
44=س
900=ل
بعد اگر 255 را فراخوانی کنیم حرف ش به ما بدهد
بهترین کار در این مورد چیست
اگر میشه بدون پردازش و بدون گرفتن حافظه اضافی

alireza643
سه شنبه 07 شهریور 1385, 14:03 عصر
خوب این حروف تو آرایه شما ذخیره شده یا نه
--------------------
فکر کنم اگر یه کم بیشتر توضیح بدید بهتر بشه کمکتون کرد ولی این توضیحاتی که در حال حاضر موجود هست خیلی گنگ و نامفهومه

Armanprogrammer
سه شنبه 07 شهریور 1385, 14:12 عصر
منظورت واضح نیست ولی خوب اگه یک آرایه دوبعدی بنویسی که عدد و تو اندیس 0 و حرفو تو اندیس 1 بذاری وقتی عدد و تایپ میکنی حرف و با یک دستور شرطی حرفو نشون بده order اونم 1 میشه

mzjahromi
سه شنبه 07 شهریور 1385, 14:28 عصر
بدون جستجو که نمیشه.
باید از یکی از روشهای جستجو یا Hashing استفاده کنید.(که فکر میکنم منظور شما همینه)

Arash_j13
سه شنبه 07 شهریور 1385, 14:55 عصر
فکر کنم منظور شما استفاده از hash table هست برای اینکار به یه تابع hash نیاز دارید که با دادن عدد مورد نظر شما یه اندیس رو برگردونه و بتونید به خونه مورد نظر آرایه دسترسی داشته باشید

aloneman2005
سه شنبه 07 شهریور 1385, 16:19 عصر
دقیقا اینجوری لطفا بگو جه جوری
--------------------
آرش جان چه جور از Hash استفاده می کنند.

Arash_j13
پنج شنبه 09 شهریور 1385, 00:07 صبح
بحث جداول هاش بیشتر از اون چیزیه که توی یه پست بگم ولی روش کلی این جوریه که ما فضای زیادی رو اشغال می کنیم و تادسترسی به داده ها با بیشترین سرعت انجام بگیره برای اینکار معمولا بین 3 تا 11 برابر حداکثر مقدار داده ای که می خواید ذخیره کنید حافظه می گیرید حالا احتیاج به یه تابع اندیس گذار دارید که با دادن یه عدد بهش اندیس خونه ای که با اون داده مشخص می شه رو برگردونه کارایی برنامه شما دقیقا به همین تابع اندیس گذار بستگی داره اگه این تابع به اندازه کافی کوتاه و سریع باشه و فضا تخصیص داده شده به اندازه کافی بزرگ باشه که داده ها به هم برخورد نکن مرتبه زمانی دسترسی به داده های O(1) هست

ساده ترین تابع اندیس گذار اینکه ورودی رو به پیمانه ی بزرگترین عدد کاهش بدیم


inline int h(int x)
{
return x% MAX;
}


برای توضیح بیشتر در مورد تابع اندیس گذار و جداول hash بهتره به کتابهای ساختمان داده مراجعه کنید