PDA

View Full Version : یافتن تمام حالات بدون تکرار



devil00x
سه شنبه 20 فروردین 1387, 09:40 صبح
من تعدادی کاراکتر رو از کاربر می گیریم حالا می خوام تمام حالات این چند کاراکتر رو برگردونم البته بدون تکرار.
مثلا اگه A,B,C رو وارد کرد حالات ممکن بدون تکرار به این صورت هستش
A
AB
AC
B
BC
ABC
حالت های تکرار اینه که مثلا AC=CA و اگه یک کدوم از اینها بود دیگه بعدی رو نیاره.

mortezakiaee
سه شنبه 20 فروردین 1387, 10:07 صبح
7 تا حالته نه 6 تا
c هم یه حالت دیگه است.
بیشتر مربوط به پاسکال می شه تا دلفی

vcldeveloper
سه شنبه 20 فروردین 1387, 15:34 عصر
یافتن تمام حالات بدون تکرار
سوال بیشتر به بخش الگوریتم ها مربوط میشه تا به یک زبان برنامه نویسی خاص. اگر الگوریتمش را داشتید و می خواستید با دلفی پیاده سازی کنید، اونوقت به دلفی مربوط میشد.


بیشتر مربوط به پاسکال می شه تا دلفی
یعنی همچین برنامه ایی توی دلفی جایگاه نداره؟! بگذریم...

کاربران می تونند توی بخش دلفی سوالات پاسکال هم مطرح کنند.

Cave_Man
سه شنبه 20 فروردین 1387, 16:24 عصر
این سوالا خیلی جالبه و علمی هستن دقیقا من تاکید میکنم اونجا بزاریدش و منتقلش کنید لطفا.
مرتبط : http://barnamenevis.org/forum/showthread.php?t=7806&highlight=permutation

devil00x
سه شنبه 20 فروردین 1387, 16:25 عصر
دوست عزیز حالا 6 یا 7 چه فرقی میکنه بله حق با شماست C هم جز آونهاست/
لطفا راهنمایی کنید که چطور میشه این الگوریتم رو طراحی کرد از اینکه اینجامطرح شد چون من دارم تو دلفی کد رو می نویسم و گیر افتادم.

Cave_Man
سه شنبه 20 فروردین 1387, 16:40 عصر
الگوریتم با کد اون الگوریتم فرق میکنه:چشمک:
اگه الگوریتم رو بدست اوردید بعدش باید شروع به کدنویسی کنید.لطفا الگوریتیمی که توی پیاده سازیش مشکل دارید اینجا بزارید.
با انگلیسی یا سودوکد الگوریتم رو بنویسید و بزارید اینجا. فارسی هم قبوله.

mortezakiaee
چهارشنبه 21 فروردین 1387, 11:59 صبح
برای الگوریتم میتونم یه کمکی بکنم.
قدم اول پیدا کردن تعداده که میتونی از فرمول زیر استفاده کنی:



n: number of characters


s = n!/1!*(n-1)! + n!/(2!*(n-2)!)+ ...+n!/(n!*1!)



به ترتیب کارکتر های با طول 1 تا n






حالا دو آرایه به طول n و s تعریف کن با یه حلقه میتونی جواب رو تو آرایه دوم ذخیره کنی
الان کدش به ذهنم نمی رسه ولی اصولش اینه
کاراکتر 1 تا n رو ذخیره کن --------> رشته با طول یک
کاراکتر1 رو با کاراکتر های 2 تا n رو کنار هم بذار، کاراکتر 2 رو با کاراکتر های 3 تا n رو کنار هم بذار، ......، کاراکتر n-1 رو با کاراکتر n رو کنار هم بذار ---------> رشته با طول دو
.
.
.
.
n کاراکتر رو کنار هم بذار ----------> رشته با طول n

gbg
یک شنبه 05 آذر 1391, 13:07 عصر
میدونم خیلی قدیمی هست تاپیک
ولی یکی لطف کنه فرمول رو برای n-1 هم بگه که نکته کلیدی اینجا خوابیده

Ananas
یک شنبه 05 آذر 1391, 15:39 عصر
فرمولش رو دستی برای هر عددی جدا بنویسیم بهتره چون مثلا اگه n باشه 10 اونوقت 10 فاکتوریل میشه : 3628800 یعنی 3628800 حالت از ترکیب های مختلف. پس نهایتا 10 تا فرمول نیاز باشه بنویسیم.
اصلا شما حساب کن با 32 تا بیت که هر کدوم 2 تا حالت می گیرن چند تا عدد میشه ساخت!

gbg
دوشنبه 06 آذر 1391, 11:03 صبح
منظورم محاسبه قرار گیری بود
فرول دوستمون برای رشته با طول یک و رشته با طول دو درسته
ولی بقیش رو نگفته

Ananas
دوشنبه 06 آذر 1391, 11:37 صبح
یه راهی به نظرم میاد که یکم پیچیدس حوصله ندارم بنویسم. از این قراره:
یک تابع داشته باشی که یک آرایه میگیره و تو یک حلقه عضو اول اون رو به ترتیب عوض میکنه و تو هر چرخه هم بعد از عوض کردن عدد اول آرایه، خودش رو فراخونی کنه ولی از شروع آرایه + 1 (هر دفعه مجموعه 1 واحد کوچکتر میشه تا آخر برسه به یک عضو) البته نتیجه هم باید در جایی نوشته بشه و وقتی حالت های مختلف درست میشن که این تابع رسیده باشه به آخر آرایه. یعنی خودش رو اونقدر فراخونی کنه که برسه به انتهای آرایه. راستی یک آرایه ی دیگه هم باید همزمان به عنوان ورودی براش بفرستی که در هر مرحله عدد های تکراری رو حذف کرده باشی (عدد هایی که تو ابتدای لیست ازشون استفاده کردی). نمی دونم جواب میده یا نه فقط یک ایده هست.

Ananas
سه شنبه 07 آذر 1391, 02:23 صبح
فرمول جایگشت های n شی :
http://irancplusplus.blogspot.com/2010/07/n.html
به C++‎ هست.

mehdi_moosavi
یک شنبه 05 بهمن 1393, 22:32 عصر
وقت دوستان بخیر
من احتیاج به کدی دارم که تمام جای گشتهای rتایی از یک مجموعه nتایی رو برگردونه. سرچ هم کردم ولی کدی در دلفی پیدا نشد.
لطفا راهنمایی کنید
خیلی متشکرم

یوسف زالی
دوشنبه 06 بهمن 1393, 09:27 صبح
سلام.
در اینجا تابعی نوشتم که اساس اون همین کاریه که شما لازم دارید:
http://barnamenevis.org/showthread.php?442100-BruteForce-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%D8%AA%D8%A7%D8%A8%D8%B9%D8%8C-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%B1%D9%88%D8%B4-%D9%88-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%B1%D9%88%D8%A7%D9%84-%D9%85%D8%B1%D8%A8%D9%88%D8%B7%D9%87&highlight=bruteforce

باید طبق خروجی خودتون بهش ورودی بدید.