Payamvdn/NorthPersian_fa_wiki huggingface dataset:
واریتهٔ بهاری فیلمی به کارگردانی پرویز خطیبی محصول سال ۱۳۲۸ است. این فیلم در طبقه سوم و چهارم سینما متروپل، یک باغ در محله سرچشمه، میدان توپخانه و خیابان اسلامبول بود. دوربین فیلمبرداری از نوع «بل اندهاول» و کوکی بود و بازیگران باید پس از آخرین مرحله کوک سریع تر حرکت میکردند که حرکتشان بعدا روی پرده سینما طبیعی به نظر برسد. صدابرداری نیز در جریان فیلمبرداری صورت میگرفت و امور فنی فیلم به عهده مهندس کامرانی بود که در طبقه دوم ساختمان سینما متروپل شرکتی را به نام «کالای سوئد» تاسیس کرده بود. فیلم واریته بهاری در ابتدا قرار بود برای نوروز ۱۳۲۸ برروی پرده سینما برود اما به دلیل آماده نبودن فیلم در ۱۲ خرداد ۱۳۲۸ در سینما مایاک به نمایش درآمد. نسخه ای از این فیلم به دلیل نایاب بودن موجود نیست. خلاصه داستان. داستان شامل شش ماجراست، بی آنکه موضوع آنها به هم مربوط باشد. یکی از ماجراها مربوط به «میرزا خنده رو» است که کارش به بیمارستان می کشد و تحت عمل جراحی قرار می گیرد و در حالی که یکایک اعضای بدنش بریده می شود خندهٔ او قطع نمی گردد.
شرمسار فیلمی به کارگردانی اسماعیل کوشان محصول سال ۱۳۲۹ می باشد. فیلمبرداری این فیلم در اردیبهشت ۱۳۲۹ در جاجرود با ضبط صحنه های روستایی و صحنه های داخلی تماما با ساخت دکور در چهل روز انجام شده است. اکران این فیلم در ۶ دی ۱۳۲۹ در سینماهای رکس و متروپل انجام شده است. داستان. مریم دختر روستایی که نامزدی به نام احمد دارد، از جوانی شهری به نام محمود فریب می خورد. مریم از ترس رسوایی آوارهٔ شهر می شود. بعد کارش به خوانندگی می کشد و به زودی شهرت و محبوبیت زیادی به دست می آورد. یکبار دیگر محمود برابر مریم قرار می گیرد و به وسیله احمد که همه جا در تعقیب مریم است به قتل می رسد. پس از سال ها مریم و احمد در روستای خود با یکدیگر ازدواج می کند.
نیروگاه سیکل ترکیبی فارس (در بخش اکبرآباد استان فارس، در ۱۹ کیلومتری شیراز) یکی از نیروگاه های ایران از نوع نیروگاه های سیکل ترکیبی است. ظرفیت اسمی تولید این نیروگاه در سال ۱۳۸۸ حدود ۱۰۵۰ مگاوات بوده است. این نیروگاه در فاصله ۳۵ کیلومتری جنوب شرقی شیراز قرار گرفته است. نیروگاه سیکل ترکیبی فارس با قدرت اسمی ۱۰۳۵ مگاوات دارای ۶ واحد گازی به قدرت اسمی ۱۲۳ مگاوات می باشد که از سال ۱۳۷۴ به بهره برداری رسیده است. بخش بخار از ۶ بویلر بازیاب حرارتی و سه توربوژنراتور به قدرت اسمی هر یک ۹۸ مگاوات تشکیل شده که بهره برداری از آن از سال ۱۳۸۱ آغاز گردیده است. کارفرمای این نیروگاه سازمان توسعه برق ایران می باشد.
پریچهر نام فیلمی به کارگردانی فضل الله بایگان و محصول سال ۱۳۳۰ است. خلاصهٔ داستان. پریچهر پس از مدت ها سرانجام با مرد محبوبش ازدواج می کند، ولی به زودی بنای ناسازگاری با همسرش را می گذارد. همسرش بدرفتاری های پریچهر را به خاطر عشقی که به او دارد، تحمل می کند؛ با این حال به زودی پریچهر در پی عشق یک جوان کولی او را ترک می کند. بعد از این واقعه، همسر پریچهر برای به دست آوردنش تلاش می کند ولی موفق نمی شود. منابع. وبگاه سوره
خواب های طلائی فیلمی به کارگردانی معزدیوان فکری و محصول سال ۱۳۳۰ می باشد. خلاصه داستان. پسر جوانی خواب می بیند که به دربار شاه عباس صفوی راه یافته و صاحب موقعیت و احترامی خاص شده است و بعد این خواب به واقعیت می پیوندد و او اجازه پیدا می کند که یک روز در دربار زندگی کند. بازیگران. مجید محسنی در نقش ابوالحسن شهلا ریاحی در نقش مه پیکر معز دیوان فکری در نقش سلطان سودابه در نقش شمس النهار نسرین در نقش کوکب الصباح ایران دفتری در نقش مادر ابوالحسن صدقی نژاد در نقش الیاس؟ قدکچیان در نقش حاجی محمود اصغر رسول زاده در نقش خواجه باشی رشید در نقش خواجه حرم دوشیزه آذر در نقش کنیز مه پیکر پروین در نقش کنیزکان حرم مهین در نقش کنیزکان حرم سوزان در نقش کنیزکان حرم سیسیل در نقش حاجی محمود بانو طلعت نژاد در نقش رقاصه شهرزاد در نقش رفقای ابوالحسن شهرستانی در نقش رفقای ابوالحسن شاه وردی در نقش رفقای ابوالحسن قاسمی در نقش رفقای ابوالحسن رقاصه های حرم از هنرستان بالت استاد جانبازیان گروه موسیقی. آهنگ ها ساخته جواد معروفی سه تار احمد عبادی آواز حسین قوامی (فاخته) گروه ارکستر: رهبر ارکستر جواد معروفی گیتار ژان فلوری قره نی حسینعلی وزی
ری تبار عود و تار نصرالله زرین پنجه ویلن محمود / جلال (؟) ذوالفنون ویلن میرعلینقی؟ فلوت نراقی
کدو حلوایی به انگلیسی () از گونه () گاهی کدو گردویی نیز گفته می شود گونه ای از کدو می باشد که صیقلی پوست و ناقوس شکل که عموماً یکطرف آن بزرگتر و پهنتر از طرف دیگر است و به رنگ زرد یا نارنجی است و گوشت آن زرد و نارنجی است، این کدو بسیار شیرین است و به همین خاطر به آن کدو حلوایی می گویند و در اول زمستان به دست می آید و جثه آن شبیه خربزه است.
نیروگاه گازی شیراز (شیراز، بلوار مدرس روبروی دانشگاه صنعتی شیراز، تأسیس ۱۳۴۴)، یکی از نیروگاه های ایران از نوع گازی با ظرفیت تولید ۱۹۶ مگاوات است که شامل ۸ واحد گازی است. این نیروگاه شامل ۱ واحد ۱۱٫۸ مگاواتی ساخت سولزر، ۳ واحد ۱۵ مگاواتی ساخت فیات، ۱ واحد ۲۸٫۶ مگاواتی ساخت بی بی سی، ۱ واحد ۲۵٫۶ مگاواتی ساخت بی بی سی، ۱ واحد ۲۴٫۲ مگاواتی ساخت بی اس تی و ۱ واحد ۶۰٫۸ مگاواتی ساخت ک.و.یونیون است. قدرت عملی نیروگاه در زمستان ۱۴۹ مگاوات و در تابستان ۱۳۰ مگاوات است. سوخت واحدها گاز طبیعی و سوخت پشتیبان گازوئیل است که گازوئیل در ۶ مخزن، مجموعاً به ظرفیت ۹ میلیون لیتر ذخیره سازی می شود. این نیروگاه در زمان ساخت خارج شهر بوده و در زمان صدور مجوز و ساخت واحدهای مسکونی به حریم این واحد صنعتی تجاوز شده و استاندارهای واحدهای صنعتی رعایت نگردیده است و این واحد صنعتی در محاصره واحدهای مسکونی قرار گرفته و امکان تامین انرژی پایدار برق برای شهروندان محترم شهر شیراز را مشکل ساخته است. آمار تولید برق و مصرف سوخت در سال ۱۳۹۲. طبق آمار سال ۱۳۹۱، مصرف گازوئیل نیروگاه گازی شیراز ۲۴۲۴۹ هزار لیتر، مصرف گاز ۱۷۸۰۷۷ مترمکعب، راندمان ۲۲٫۴
درصد و کارکرد نیروگاه در سال ۵۲۴۸ ساعت که کارکرد نیروگاه در سال طبق درصد ۵۹٫۷ درصد بوده است. منابع. &lt;small&gt;
مرتب سازی گسترش یافته یک الگوریتم مرتب سازی است که در سال ۲۰۰۲ توسط Steven J. Ross ابداع شد. این الگوریتم، مفاهیمی از مرتب سازی های توزیع شده مانند مرتب سازی مبنایی و سطلی را با مفاهیم مرتب سازی های سریع و ترکیبی تلفیق می کند. در نتایج تجربی، این الگوریتم در اجرا، بسیار کارامد تر از الگوریتم های سنتی مانند مرتب سازی سریع به ویژه در ارائه ساختارهای توزیع شده نشان داده شده است.&lt;br&gt; مرتب سازی سریع یک عنصر محوری را درلیست شناسایی می کند و لیست را به دو زیر لیست تقسیم می کند:عناصر بزرگتر از عنصر محوری وعناصر کوچکتر ازعنصر محوری. مرتب سازی گسترش یافته این ایده را به صورت تقسیم بندی لیست به n/cپارتیشن در هر گام تعمیم می دهد، که nتعداد عناصر لیست وc ثابت کوچک است (در عمل در مقایسه های کند، معمولاً بین ۴ تا ۸ است؛ ولی در مقایسه های سریع c مقدار بزرگتری است). این الگوریتم برای اجرا از تکنیک های توزیع شده استفاده می کند. ابتدا بزرگترین و کوچکترین مقادیر را وارد لیست می کند سپس ناحیه بین این دو را به n/c ظرف بااندازه مساوی تقسیم می کند. در مواقعی که ذخیره سازی یک مسئله مهم است، این الگوریتم می تواند در هر مرحله از
تقسیم بازگشتی به داشتن بزرگترین ظرف کمک کند و باعث می شود این روند تقسیم چندین مرحله داشته باشد، اگرچه این کار باعث تکراربیشتر می شود ولی خطاهای ذخیره سازی را کاهش می دهد و باعث می شود که الگوریتم سریع تر اجرا شود. درمواردی که تعداد ظرف ها حداقل برابر تعداد عناصر است، مرتب سازی گسترش یافته به مرتب سازی سطلی تخریب می شود و مرتب سازی به اتمام می رسد. در غیر این صورت هرظرف به صورت بازگشتی مرتب می شود. الگوریتم از آزمون های اکتشافی برای تعیین اینکه ایا هر ظرف می تواند توسط این الگوریتم یا الگوریتم های دیگر، به طور کارامدتری مرتب شود، استفاده می کند. سپس به صورت بازگشتی ظرف ها را مرتب می کند. این الگوریتم نیز مانند الگوریتم های توزیع شده دیگر نقطه ضعفی دارد و آن این است که برنامه نویس به ابزاری برای تبدیل هرعنصربه یک کلید عددی نیاز دارد و هدف آن شناسایی این است که هرکدام ازعناصر در کدام ظرف می افتند. اگرچه برای عناصر با طول متغیر مانند رشته ها (با توجه به اینکه هر عدد باتعداد بی نهایتی از مقادیر مینیمم دنبال می شود و برای هرنوع داده ای دارای یک ارایش کلی می باشد) این عملیات برای پیاده سازی صحیح بسیار سخت تر از یک
تابع مقایسه ای ساده به ویژه در ساختارهای پیچیده است. پیاده سازی ضعیف این تابع مقداری می تواند منجر به کلاستربندی شود که به کارایی الگوریتم آسیب می رساند. کارایی. بدترین حالت الگوریتم مرتب سازی گسترش یافته بستگی به این دارد که این الگوریتم در نهایت کدام مرتب سازی را تبدیل به ظرف های کوچک می کند. برای الگوریتم هایی که بدترین حالت شان((O(nlogn) است مانند مرتب سازی ادغامی و مرتب سازی هرمی و برای الگوریتم هایی که بدترین حالت شان O(n^۲)می باشد مانند مرتب سازی سریع، مقدار ((O(nlogn) می باشد. در توزیع ها هر جا اندازه کلید ۲k بار کوچکتر از مربع n(اندازه لیست) باشد ((۲k&lt;log(n^۲) الگوریتم در بدترین حالت با دستیابی به بدترین زمان O(n(k - log(n)).۵)در نسخه های اصلی منتشرشده و O(n((k/s) + s)) برای نسخه های حافظه دار، بهتر عمل می کند. آزمایش هایی که برای مقایسه نسخه بهینه مرتب سازی گسترش یافته با مرتب سازی بهینه C++انجام شدند، با مرتب سازی درونگرا پیاده سازی شدند. مرتب سازی گسترش یافته در سیستم عامل های مختلف برای داده های تصادفی از نوع integer و float حدودا ۲-۷X برابر بهبود زمان اجرا را نشان می دهد. ازنظرحافظه موردنیاز،
مرتب سازی گسترش یافته بدتر از اکثر الگوریتم های درجا است. این الگوریتم در ساده ترین شکلش یک الگوریتم درجا نیست که ازفضای اضافی O(n) استفاده کند. در آزمایش هایی ۲۰ ٪ بیشتر از مرتب سازی سریع ازحافظه استفاده می کند. درفرم حافظه دار، از حافظه کمتری استفاده می شود و در استفاده از حافظه با حداکثرشمارش ظرف ها به تعداد حداکثر بازگشت ها یک کران بالا وجود دارد که تا تبدیل اندازه کلیدها از بایت به کیلوبایت تمام می شود. اگرچه در این فرم نسبت به مرتب سازی سریع و مرتب سازی هرمی از فضای بیشتری استفاده می شود، ولی نسبت به فرم های اولیه مرتب سازی ادغامی که از فضای کمکی برابر با فضای اشغال شده توسط لیست ها استفاده می کند، به طور قابل ملاحظه ای از حافظه کمتری استفاده می نماید. مرتب سازی گسترش یافته در مورد مسائل بسیار بزرگ که در حافظه جای نمی گیرند ونیازمند دسترسی به دیسک هستند، بسیار کارامد عمل می کند. پیاده سازی. unsigned RoughLog۲(DATATYPE input) unsigned char cResult = 0; // The &amp;&amp; is necessary on some compilers to avoid infinite loops; it doesn't // significantly impair performance if(input &gt;= ۰) while((input »
cResult) &amp;&amp; (cResult &lt; DATA_SIZE)) cResult++; else while(((input » cResult) &lt; -۱) &amp;&amp; (cResult &lt; DATA_SIZE)) cResult++; return cResult; SIZETYPE GetMaxCount(unsigned logRange, unsigned uCount) unsigned logSize = RoughLog2Size(uCount); unsigned uRelativeWidth = (LOG_CONST * logRange)/((logSize &gt; MAX_SPLITS) ? MAX_SPLITS: logSize); // Don't try to bitshift more than the size of an element if(DATA_SIZE &lt;= uRelativeWidth) uRelativeWidth = DATA_SIZE - ۱; return ۱ « ((uRelativeWidth &lt; (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT)) ? (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT): uRelativeWidth); void FindExtremes(DATATYPE *Array, SIZETYPE uCount, DATATYPE &amp; piMax, DATATYPE &amp; piMin) SIZETYPE u; piMin = piMax = Array[۰]; for(u = 1; u &lt; uCount; ++u){ if(Array[u] &gt; piMax) piMax=Array[u]; else if(Array[u] &lt; piMin) piMin= Array[u]; } //---------------------SpreadSort Source----------------- Bin * SpreadSortCore(DATATYPE *Array, SIZETYPE uCount, SIZETYPE &amp; uBinCount, DATATYPE
&amp;iMax, DATATYPE &amp;iMin) // This step is roughly ۱۰٪ of runtime but it helps avoid worst-case // behavior and improves behavior with real data. If you know the // maximum and minimum ahead of time, you can pass those values in // and skip this step for the first iteration FindExtremes((DATATYPE *) Array, uCount, iMax, iMin); if(iMax == iMin) return NULL; DATATYPE divMin,divMax; SIZETYPE u; int LogDivisor; Bin * BinArray; Bin* CurrentBin; unsigned logRange; logRange = RoughLog2Size((SIZETYPE)iMax-iMin); if((LogDivisor = logRange - RoughLog2Size(uCount) + LOG_MEAN_BIN_SIZE) &lt; ۰) LogDivisor = 0; // The below if statement is only necessary on systems with high memory // latency relative to processor speed (most modern processors) if((logRange - LogDivisor) &gt; MAX_SPLITS) LogDivisor = logRange - MAX_SPLITS; divMin = iMin » LogDivisor; divMax = iMax » LogDivisor; uBinCount = divMax - divMin + ۱; // Allocate the bins and determine their sizes BinArray = calloc(uBinCount, sizeof(Bin)); // Memory allocatio
n failure check and clean return with sorted results if(!BinArray) { printf("Using std::sort because of memory allocation failure "); std::sort(Array, Array + uCount); return NULL; // Calculating the size of each bin; this takes roughly ۱۰٪ of runtime for(u = 0; u &lt; uCount; ++u) BinArray[(Array[u] » LogDivisor) - divMin].uCount++; // Assign the bin positions BinArray[۰].CurrentPosition = (DATATYPE *)Array; for(u = 0; u &lt; uBinCount - ۱; u++) { BinArray[u + ۱].CurrentPosition = BinArray[u].CurrentPosition + BinArray[u].uCount; BinArray[u].uCount = BinArray[u].CurrentPosition - Array; BinArray[u].uCount = BinArray[u].CurrentPosition - Array; // Swap into place. This dominates runtime, especially in the swap; // std::sort calls are the other main time-user. for(u = 0; u &lt; uCount; ++u) { for(CurrentBin = BinArray + ((Array[u] » LogDivisor) - divMin); (CurrentBin-&gt;uCount &gt; u); CurrentBin = BinArray + ((Array[u] » LogDivisor) - divMin)) SWAP(Array + u, CurrentBin-&gt;CurrentPosition++); // Now that we
've found the item belonging in this position, // increment the bucket count if(CurrentBin-&gt;CurrentPosition == Array + u) ++(CurrentBin-&gt;CurrentPosition); // If we've bucketsorted, the array is sorted and we should skip recursion if(!LogDivisor) { free(BinArray); return NULL; return BinArray; void SpreadSortBins(DATATYPE *Array, SIZETYPE uCount, SIZETYPE uBinCount, const DATATYPE &amp;iMax , const DATATYPE &amp;iMin, Bin * BinArray, SIZETYPE uMaxCount) SIZETYPE u; for(u = 0; u &lt; uBinCount; u++){ SIZETYPE count = (BinArray[u].CurrentPosition - Array) - BinArray[u].uCount; // Don't sort unless there are at least two items to compare if(count &lt; ۲) continue; if(count &lt; uMaxCount) std::sort(Array + BinArray[u].uCount, BinArray[u].CurrentPosition); else SpreadSortRec(Array + BinArray[u].uCount, count); free(BinArray); void SpreadSortRec(DATATYPE *Array, SIZETYPE uCount) if(uCount &lt; ۲) return; DATATYPE iMax, iMin; SIZETYPE uBinCount; Bin * BinArray = SpreadSortCore(Array, uCount, uBinCount, iMax, i
Min); if(!BinArray) return; SpreadSortBins(Array, uCount, uBinCount, iMax, iMin, BinArray, GetMaxCount(RoughLog2Size((SIZETYPE)iMax-iMin), uCount)); دو سطح که از بقیه بهترند. یک نتیجه جالب برای الگوریتم های این نوع کلی (تقسیم بندی بر اساس مبنا و مرتب سازی براساس مقایسه) این است که درجه آن ها برای هر عملکرد پیوسته (O(n) است. این نتیجه می تواند بدین صورت فراهم شود که اگر اندازه ظرف ها بعد از اولین تکرار بیشتر از برخی مقادیر ثابت بود، الگوریتم مرتب سازی گسترش یافته حداقل ۲ بار تکرارشود. اگر داده ها درهمه اوقات بر روی برخی توابع پیوسته انتگرال پذیر شناخته شوند این اصلاح مرتب سازی گسترش یافته می تواند به برخی بهبودهای کارایی بر روی الگوریتم اصلی نائل شود ومی تواند بدترین حالت بهتری داشته باشد. اگر این محدودیت نتواند وابستگی داشته باشد، این تغییر یک سربار اضافی کوچک را به الگوریتم اضافه می کند وکوچک تر می شود. الگوریتم های مشابه دیگر Flashsort (که ساده تراست) وAdaptive Left Radix می باشند. Adaptive Left Radix در ظاهرکاملا مشابه می باشد، تفاوت اصلی آن در وجود رفتار بازگشتی می باشد. درمرتب سازی گسترش یافته چک کردن وض
عیت های بدترین حالت و استفاده از مرتب سازی std::sort برای جلوگیری از به وجود آمدن مشکلات کارایی (هرجا که نیاز است) و بازگشت های مداوم در Adaptive Left Radix تا وقتی که به اتمام برسد یا داده برای استفاده در مرتب سازی درجی به قدرکافی کوچک باشد، انجام می شود.
در الگوریتمهای پس گرد (backtrack) روشی به نام پَس پَرش (backjumping) وجود دارد که باعث کاهش فضای جستجو، در نتیجه افزایش بهره وری است. در پس گرد همواره یک سطح در درخت جستجو بالا می رویم زمانی که تمامی مقادیر گره ها بررسی شده باشند، اما در روش پس پرش ممکن است چندین سطح به بالا پرش انجام دهیم. در این مقاله، مقادیر امتحانی ثابتی در نظر گرفته ایم x1 , x2 , … ,xn که ممکن است به صورت غیر مرتّب نیز از آن ها استفاده نماییم. تعریف. در روش پس گرد زمانی که مقادیر یک متغیّر مورد بررسی قرار بگیرد و جستجو بی نتیجه پایان یابد، الگوریتم مقدار آخرین متغیرهای گره پیشین مورد بررسی قرار می دهد ولی اگر به انتها رسید و تمامی گره ها بررسی شد و به جواب درستی نرسیدیم، مقدار گره جستجو را تغییر و عملیات جستجو دوباره تکرار می شود. اگر شرایط به این گونه باشد x1=a1,…،xk =ak و تمامی مقادیر برای xk+1 بدون نتیجه برای پیدا کردن راه کار به پایان برسد الگوریتم یک سطح به بالا یعنی گره xk می رود؛ و در صورت امکان، مقدار را عوض کرده و به بالا بازمی گردد و سپس دوباره این مراحل را تکرار می کند. انتخاب مقدار تخصیص جزئی xk+1 همواره به صورت کامل برای پید
ا کردن راه حل ضروری نیست چرا که اجباراً ما را به سمت جواب پایانی هدایت نمی کند. اگر شرایط به این گونه باشد x1=a1,…xk=ak و تمامی مقادیر برای xk+1 بدون نتیجه برای پیدا کردن راه کار به پایان برسد الگوریتم یک سطح به بالا یعنی گره xk رفته و در صورت امکان مقدار را عوض کرده سپس دوباره این مراحل را تکرار می کند. انتخاب مقدار تخصیص جزئی xk+1 همواره به صورت کامل برای پیدا کردن راه حل ضروری نیست اما یک پیشوند تخصیص جزئی ممکن است در حل مسائل ارزش زیادی داشته باشد. برای این منظور از ایندکسهایی با شرط j &lt;k استفاده می کنیم همانند x1,…،xj=a1,…،aj. این کار زمانی اتفاق می افتد که قابل بسط بیشتر برای ساختن یک راه حل برای xk+1 نیستیم. اگر الگوریتم بتواند اثبات کند این نکته را، می تواند به صورت مستقیم یک گره جدیدی برای xj به جای xk جدید انتخاب نماید. میزان بهره وری الگوریتم پس پرش میزان پرش به عقبی است که می تواند اتفاق بیفتد به صورت ایده آل در این روش می توان از xk+1 پرش کرد به هر متغیری مانند xj که در سری وجود دارد رفت یا در بدترین حالت پیش آمده عمل پرش به xk+1 انجام پذیرد؛ که به این خانه، خانه پرش امن گفته می شود. تشخیص این
نکته که آیا پرش امن است یا خیر همواره امکان پذیر نیست، پیدا کردن روش هایی برای اطمینان یافتن پرش های امن کاری است که در این الگوریتم سهی می شود انجام داد. عملاً در الگوریتم پس پرش از حداقل ایندکس گذاری ها برای پیدا کردن خانه امن استفاده می شود تا بهره وری کل الگوریتم حفظ شود. الگوریتم های مختلف روش های متنوعی را برای یافتن پرش امن مورد استفاده قرار می دهند؛ که البته هزینه های هر کدام از این روش ها نیز متفاوت است. اما ممکن است هزینه های تحمیلی ارزش این را داشته باشد که کاهش جستجوی بخش هایی از درخت حذف نماید. پس پرش در گره های برگ. در پس پرش ساده ترین شرایط زمانی است که بدون اینکه شاخهٔ دیگری مورد بررسی قرار بگیرد ثابت شود تمامی مقادیری که یک گره با موارد مورد جستجو نامرتب هستند. قید رضایت بخش این است که قدم بعدی بسیار با اطمینان و محکم برداشته شود که موجب خراب شدن روند جستجو با توجه به تمامی متغیّرهای درگیر نشود در غیر این صورت این گام نامناسب نامیده می شود. این موضوع بیانگر این نکته است که پیدا کردن قدم کاملاً مناسب بعضی وقتها وابسته به گره هایی است که تا به حال درگیر نشده اند و برخی متغیرهای تخصیص داده نشده
ممکن نیست مورد بررسی قرار بگیرند مادامیکه شرایط دیگری به وجود نیاید. به شرایطی که در آن همه مقادیر داده شده متغیر xk+1 دارای مقادیر نامناسب در سری x1,…،xk = a1,…،ak باشد را گره بن بست می نامیم. این شرایط دقیقاً زمانی می تواند رخ دهد که متغیر xk+1 یک برگ از درخت جستجو باشد. (دقیقاً همانند گره هایی که تنها برگ هایی به عنوان فرزند دارند و در شکل این مقاله می توانید آن را ببینید) الگوریتم پس پرش ارائه شده توسط Gasching تنها عملیات پرش به عقب را در برگ های انتهایی درخت انجام می دهد در این روش مقادیر احتمالی برای xk+1 امتحان شده در گره آخر، در صورت نامناسب بودن نتیجه مقایسه عملیات فرایند برگشت به عقب را فراخوانی می کند. در واقع این روش کمی با عملیات پرش به عقب معمول متفاوت است. پرش امن به سادگی با محاسبهٔ ساده ای برای هر مقدار ak+1 بدست می آید، کمترین پیشوند موجود در سری x1,…،xk = a1,…،ak بدست می آید. به عنوان مثال اگر برای ak+1 مقدار xk+1 محتمل باشد، الگوریتم ما حالت های مناسب و محتمل زیر را بررسی و در مورد مناسب بودن خانه نتیجه گیری می کند: پرش امن برای خانه هایی که نامناسب شناخته می شوند کوچکترین ایندکس گره است
مثلاً پرش امن در شرایط xk+1=ak+1 تنها مقدار محتمل مناسب برای xk+1 است. از آنجاییکه هر متغیر معمولاً می تواند بیش از یک مقدار بپذیرد، حداکثرایندکسی که از بررسی هر مقدار بیرون می آید را پرش امن می نامیم و این دقیقاً زمانی است که الگوریتم گشینگ پرش می نماید. در عمل این الگوریتم هم زمان مشغول انجام محاسبه های گفته شده در بالا و نیز بررسی کردن سازگاری xk+1=ak+1 است. پس پرش در گره های داخلی. در قسمت قبل روش کار الگوریتم برای زمان هایی که شاخهٔ دیگری وجود ندارد و زمانی که مقادیر یک متغیر به صورت نامتناسب در انتهای شاخه بود را مورد بررسی قراردادیم. در روش قبلی به هنگام جستجوی درخت زمانی اجازه پس پرش داده می شد که در گره های برگ قرارمیداشتیم و گره دیگری وجود نمی داشت. یک گره داخلی از درخت جستجو نشان دهنده تخصیص یک متغیر است که سازگار با قبلی. اگر گره مناسب برای و حائز شرایطی برای پس پرش پیدا نشد از روش پس گرد استفاده می شود. گره های درونی در پس پرش نمی توانند همانند حرکتی که در برگ های انتهایی یک درخت انجام می گرفت را انجام بدهند. اگر درجایی محاسبه xk+1 نیازمند حرکت در شاخه ها شد این به این خاطر است متغیر اختصاص داده
شده مناسب است و از همین متغیر می توان برای مقایسه ها استفاده نمود. در نتیجه گشتن به دنبال پیشوندی که با مقادیر متغیر انتخاب شده نامناسب باشد هرگز به عنوان گره مناسب شناخته نمی شود. در این جور مواقع الگوریتم متوجه شده است که مقادیر xk+1=ak+1 راه حل را برای موضوع مورد نظر به ارمغان نمی آورد و موضوع به جستجوی بازگشتی از سری x1,…،xk تبدیل می شود. در واقع الگوریتم می داند که هیچ راه حلی در این نقط وجود ندارد که به حل کل موضوع کمک کند زیرا به جای خاتمه دادن، مجدداً به همین نقطه ای که در حال حاضر قرار داد برخواهد گشت و دچار حلقه بی انتها می گردد. این بازگشت مربوط است به تعداد بن بست ها و نقاطی که الگوریتم آنهارا به عنوان نقاط نامناسب و خارج از راه حل شناسایی کرده است. برای پس پرش های بلندتر این الگوریتم نیازمند شناسایی این بن بست ها است تا برای رسیدن به جواب مسئله از این بن بست ها دوری کند. در واقع پرش های امن ایندکس گذاری شده اند و پسوندهایی که از نقاط کور متمایز شده اند. به عبارت دیگر زمانی که همه مقادیر xk+1 مورد آزمون قرار گرفت، الگوریتم توانایی پس پرش به متغیری همچون xi را دارد به شرط آنکه ارزیابی سری xk+1,xk+
2,… در برگهایی که بچه های گره xk+1 هستند نامناسب باشد. سری حرا همچنان x1,…،xi در نظر بگیرید. ساده سازی ها. به منظور ساده سازی حجم عظیمی از گره هایی که در زیر درخت xk+1 وجود دارند، اطلاعات ضروری برای پس پرش امن در زمان بازدید از زیر درخت گره xk+1 جمع آوری می شود. پیدا کردن یک پرش امن را می توان توسط دو ملاحظات ساده شده انجام داد. اولین موضوع، الگوریتم نیازمند پرش امن است اما لزوماً به دنبال بلندترین پرش امن ممکن نیست. موضوع دوم این است که گره های موجود در زیر درخت xl که از آن ها با استفاده از پس پرش پریدیم را می توان به طور کامل نادیده بگیریم. به صراحت می توان گفت تمام گره هایی در مسیر خانه xm تا خانه xl هستند نامرتبط با زیر درخت xm هستند؛ بنابراین می توان تمامی گره های این زیر مجموعه را نادیده گرفت. در واقع اگر در این الگوریتم از گره xl تا xm به سمت پایین حرکت کردیم و در بین راه مجبور به پرش به عقب شدیم، می توانیم مستقیماً به گره xm مراجعت نماید. در واقع در اینجا پرش به عقب بیانگر این نکته است که گره هایی که فی مابین گره های xl و xm هستند کاملاً نامرتبط اند به زیر درخت گره xm. به عبارت دیگر پرش به عقب نشان ده
نده این نکته است که بازدیداز یک ناحیه درخت جستجو می توانسته کاملاً اشتباه باشد؛ بنابراین این قسمت از درخت جستجو می تواند کاملاً نادیده گرفته شود و پرش به گره xl ویا والدهای بالاتر گره والد اتفاق بیفتد در هرگره می توان از این نکته برای جمع آوری مجموعه ای از اطلاعات بخصوص یافتن متغیرهای پیشین اختصاص داده شده به منظور اثبات این نکته که هیچ راه حلی در زیر درخت گره مورد نظر وجود ندارد استفاده نمود. این مجموعه جمع آوری اطلاعات در زمان اجرای الگوریتم ساخته می شود. زمانی که از یک گره برگشت به عقب می کنیم مجموعه تمام متغیرهای آن گره و اطلاعات جمع آوری شده دربارهٔ آن گره که مقصد پس پرش یا مقصد Backtrack آن کجا بوده است کاملاً حذف می شود. این اتفاق از آنجایی رخ می دهد که گره های پرش شده از پس پرش هرگز شانس بازدید شدن را نخواهند داشت بنابراین این گره ها خودکار حذف می شوند. پس پرش های بر پایه گراف. منطق این نوع پرش به عقب که در گراف ها بکار برده می شود به این صورت است که یک پرش امن می تواند به وسیلهٔ چک کردن این نکته که کدام متغیر از سری x1,…،xk تناسب دارد با متغیرهای xk+1,xk+2,… که توسط گره های برگ معرفی می شوند. برای هر
گره برگ و هر متغیر xi ی که ایندکس های i&gt;formula_1 نامناسب ناخته شده اند، ایندکسهایی که کوچکتر یا مساوی k که در محدوده xi هست می تواند به عنوان محلی برای پیدا کردن پرش امن از آن ها استفاده نمود. به صورت دقیقتر، زمانی که تمامی مقادیر برای xk+1 مورد بررسی قرار گرفت مجموعه ای از ایندکس های متغیرهایی که باعث به وجود آمدن راه حل نهایی نمی شود شناسایی شده و بنابراین این نتیجه گرفته می شود که از ملاقات زیر درخت xk+1 هیچ راه حل قابل توجهی بدست نخواهد آمد. در این مواقع الگوریتم می تواند پرش به عقب به باارزشترین ایندکس موجود در مجموعه را انجام دهد. از طریق الگوریتم زیر می توان به طور کامل زمان استفاده از پس پرش از گره هایی که بازدید نکردیم و این گره ها را کنار گذاشته ایم را به طور کامل متوجه شوید: زمانی که از یک گره به عقب بازمی گردیم مجموعه ای از متغیرها که درمحدودیت خود این گره و فرزندان آن وجود دارند و حتی والد والدین گره می توانند به عنوان کاندیدهای گره مقصد برای پرش مطرح شوند. در هر گره داخلی، مجموعه ای از متغیرها حفظ شده است. هر زمان که مجموعه ای از متغیرها از یکی از فرزندان یا نوادگان دریافت شد، این اطلاعات ب