انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: atralheaven در 07 شهریور 1392، 02:05 بظ
-
سلام دوستان
جایگشت یادتون هست چی بود؟ طریقههای مختلف چیدن 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
حالا وقتی که این حروف تعدادشون بیشتر باشه پروسهی حساب کردنشون خیلی طول میکشه (چون تعداد حالتهای ممکن خیلی زیاده) حالا چهطور میتونم با اختصاص دادن درصد بیشتری از منابع سیستم به این کار یا انجام این کار به روش درستتر (شاید بشه بهجای این که دونه دونه محاسبه کنه محاسبهها رو به شکل موازی چند تا چند تا انجام بده یا چنین چیزی؟) سرعت کار رو افزایش بدم؟ فکر نکنم برای کامپیوترهای امروزی کار سختی باشه! مطمئنا اگه روش کار مناسبتر باشه یا منابع بیشتری بهش اختصاص داده بشه نباید زیاد طول بکشه. این جریان واسم بیشتر برای یادگیری هست و از روی کنجکاوی :) اگه یادبگیرم تو موارد مشابه بعدا کارم سریع راه میوفته. مرسی عزیزان!
-
با بالا بردن اولویت یک پروسس میتونین بهش اجازه بدین که همیشه بیشترین cpu در اختیار اون پروسس قرار قرار بگیره .
البته ابنو در نظر داشته باشین تا زمانی که پروسس دیگه ای به جز اون پروسس مد نظر شما نیاد cpu اشغال بکنه اولوبت کاری انجام نمیده درواقعاولویت اون پروسس های دیگه رو میزاره تو صف و به شما اجازه میده که پروسستون زود تر بیاد کارشو انجام بده .
با دستور nic و renic میشه این کار رو کرد. با top هم میشه این کار رو کرد .
http://30li.ir/bash/commands/nice
http://30li.ir/bash/commands/top
این قسمت رو مطمعن نیستم چون نمیدونم سرعت تولید اطلاعات چه قدر هستش ولی اگر سرعت تولید اطلاعات از سرعت نوشتن هاردتون بیشتر بود میتونین محل ذخیره شدن رو داخل رم تعیین کنین که مشکلی نداشته باشین.
-
اگر میخواهید تیزتر اجرا شود با سی بنویسید
http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/ (http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/)
-
من این رو گوگل کردم پیدا کردم خودم ننوشتمش. احیانا نمیدونید چهطور میشه جایگشتهای n حرفی یه سری حروف رو بدست آورد؟ مثلا از بین 1234567890 تمام کدهای «۴حرفی» «غیر تکراری» رو تو یه فایل خروجی بنویسه. مثلا 1234, 1235, 1236 و...
درضمن این دستور nice خیلی کمک کرد الان حدود ۳۰ دقیقه گذشته نزدیک ۹ ملیون کد پیدا کرده! تقریبا داره از کل یکی از هستههای سیپییو استفاده میکنه، خیلی جالبه.
-
من این رو گوگل کردم پیدا کردم خودم ننوشتمش. احیانا نمیدونید چهطور میشه جایگشتهای n حرفی یه سری حروف رو بدست آورد؟ مثلا از بین 1234567890 تمام کدهای «۴حرفی» «غیر تکراری» رو تو یه فایل خروجی بنویسه. مثلا 1234, 1235, 1236 و...
درضمن این دستور nice خیلی کمک کرد الان حدود ۳۰ دقیقه گذشته نزدیک ۹ ملیون کد پیدا کرده! تقریبا داره از کل یکی از هستههای سیپییو استفاده میکنه، خیلی جالبه.
این دستور هم هست خودم تاحالا باهاش کار نکردم
http://unix.stackexchange.com/questions/23106/limit-process-to-one-cpu-core
-
من این رو گوگل کردم پیدا کردم خودم ننوشتمش. احیانا نمیدونید چهطور میشه جایگشتهای n حرفی یه سری حروف رو بدست آورد؟ مثلا از بین 1234567890 تمام کدهای «۴حرفی» «غیر تکراری» رو تو یه فایل خروجی بنویسه. مثلا 1234, 1235, 1236 و...
درضمن این دستور nice خیلی کمک کرد الان حدود ۳۰ دقیقه گذشته نزدیک ۹ ملیون کد پیدا کرده! تقریبا داره از کل یکی از هستههای سیپییو استفاده میکنه، خیلی جالبه.
این دستور هم هست خودم تاحالا باهاش کار نکردم
http://unix.stackexchange.com/questions/23106/limit-process-to-one-cpu-core
از این نظر مشکلی نیست، سیستم کند نشده، الان هم داره از یکی از هستهها استفاده میکنه. فعلا دنبال جایگشتهای ۴ حرفی هستم... راستش تو حل کردن این روی کاغذ هم تا اونجایی که یادم میاد مشکل داشتم!