سلام دوستان
جایگشت یادتون هست چی بود؟ طریقههای مختلف چیدن n شئ کنار هم میشد جایگشت اون n شئ. حالا فرض کنید من قصد دارم کلیهی شکلهای مختلف چینش یه تعداد حروف کنار هم رو داشته باشم. مثلا اگه حروف باشن abcd نتیجهی من میشه:
abcd, abdc, acbd, acdb, adbc, adcb, bacd, badc, bcad, bcda, bdac, bdca, cabd, cadb, cbad, cbda, cdab, cdba, dabc, dacb, dbac, dbca, dcab, dcba.
که این نتیجه رو اینطوری حساب کردم:
perm() {
local items="$1"
local out="$2"
local i
[[ "$items" == "" ]] && echo "$out" && return
for (( i=0; i<${#items}; i++ )) ; do
perm "${items:0:i}${items:i+1}" "$out${items:i:1}"
done
}
while read line ; do perm $line ; done < in.text > out.text
حالا وقتی که این حروف تعدادشون بیشتر باشه پروسهی حساب کردنشون خیلی طول میکشه (چون تعداد حالتهای ممکن خیلی زیاده) حالا چهطور میتونم با اختصاص دادن درصد بیشتری از منابع سیستم به این کار یا انجام این کار به روش درستتر (شاید بشه بهجای این که دونه دونه محاسبه کنه محاسبهها رو به شکل موازی چند تا چند تا انجام بده یا چنین چیزی؟) سرعت کار رو افزایش بدم؟ فکر نکنم برای کامپیوترهای امروزی کار سختی باشه! مطمئنا اگه روش کار مناسبتر باشه یا منابع بیشتری بهش اختصاص داده بشه نباید زیاد طول بکشه. این جریان واسم بیشتر برای یادگیری هست و از روی کنجکاوی
اگه یادبگیرم تو موارد مشابه بعدا کارم سریع راه میوفته. مرسی عزیزان!