PDA

نسخه کامل مشاهده نسخه کامل : الگوریتم دیکشنری



Arman_BM
08-01-2010, 23:43
سلام دوستان!
جالبه که پروژه ی بنده هم مثل جناب (آقای؟) axdarax نوشتن دیکشنری هست! اما فرقمون اینه که من خودم این پروژه رو به استاد پیشنهاد دادم ! و الان مثل بعضی چیز ها در گل گیر کرده ام! چون هرچی فکر میکنم یا خیلی ساده میشه که استاد نمره نمیده! یا خیلی سخت که استاد نمره نمیده! (فکر میکنه دادم بیرون بنویسن!)

خارج از شوخی من میخوام به صورت یک درخت بنویسم.

هر گره از 28 تا اشاره گر و یک خانه ی String به نام value تشکیل شده.
تمام حروف الفبا هم نماد آن 28 اشاره گر هستند.
اگر مثلا ABAD را سرچ کنند، از ریشه به فرزند A میره و از A به فرزندش گره Bو سپس به A میره و به همین ترتیب تا برسه به D که پدرش A هست و پدر بزرگش B و جد بزرگشم A هست . د خانه ی ارزش آن (D) معنی لغت ABAD را مینویسیم.

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

اما اسفاده از فضاش خیلی بالا بنظر میاد.
نظر شما چیه؟

این هم یه روش ساده مخصوص دوستمون جناب axdarax:
مثلا یه لیست پیوندی ساده که سه تا گره داشته باشه و یا خیلی ساده تر ! دو تا آرایه به نام های A و B که تو یکی لغت ها باشه تو یکی دیگه معادلش معنی ها و فقط یه جستجوی ساده بنویسم که:

While(A[i]!=KEY){
i++}
Printf(%C"b[i]")

دو نکته ی مهم:
اول اینکه باید لغات در A باشد و معانی آن ها در B و آرایه ی B یک خانه بیشتر داشته باشد که در آن عبارت "Not Found" نوشته شده باشد.
دوما برای رشته ها نمیتوان از مقایه سه ی مساوی استفاده کرد و باید از دستور مخصوص آن که الان خضور ذهن ندارم اما فکر کنم StrCom بود استفاده کنن.
سوما در حلقه ی بالا باید یک شرط برای خاتمه ی حلقه نیز نوشته بشه.
مثلا به کمک && میتوان این کار را کرد!






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



راستی دوستان نظرشون رو در باره ی برنامه ی من بدن لطفا ! اون اولیه ها! اون درخته! بنظرتون عملیه؟! معتاد نه! عملی! یعنی میشه به مرحله یعمل رسوندش؟

soheilsmart
09-01-2010, 14:58
آره شدنش که میشه من با از استفاده از روش درخت الفبا (همین روشی که گفتی) این رو به جاوا نوشتم
(البته با قرمز -سیاه یا AVL هم میشه)
برای هر گره فیلد های boolean
isWord
isLeaf
در نظر بگیر
معنی هر کلمه رو بذار آخرین حرف همون کلمه
برای no match found من یه کار دیگه انجام
دادم
البته من با کلاس خود ارجاع گره رو نوشتم تا پویا باشه
اگه خواستی بگو کد جاوا رو بذارم!
موفق باشی

Arman_BM
09-01-2010, 15:19
اممنون اینی که شما میگی پبچبدگی الگوریتمش چقدر میشه؟