PDA

View Full Version : stack over flow



farnaz2003
سه شنبه 24 بهمن 1385, 09:48 صبح
من از یک فایل باینری 100000 تا داده می خوانم و در یک آرایه می ریزم بعد می خوام با quicksort مرتبش کنم اما پیغام stackoverflow می ده چکار کنم.
ممنون.

titbasoft
سه شنبه 24 بهمن 1385, 11:23 صبح
احتمالا دارید یک تابع رو در یک لوپ بی نهایت صدا میزنید یا خلاصه یه چیزی توی لوپ افتاده. کدتون رو اینجا بزارید

farnaz2003
سه شنبه 24 بهمن 1385, 11:47 صبح
آرایه اش تقریبا مرتب است و بنابراین تعداد دفعات فراخوانی اش به صورت بازگشتی خیلی زیاد است.فکر کنم مشکل از این باشد.
لطفا اگه میدونید کمک کنید.

farnaz2003
چهارشنبه 25 بهمن 1385, 08:28 صبح
ببینید در واقع 70% آرایه ام صفر است نه اینکه مرتب باشه ها و احتمالا این تعداد دفعاتی که تابع ام به طور بازگشتی فراخوانی میشه را افزایش می ده ، که این errror را می ده .
راهی برای افزایش سایز استک وجود دارد؟

vrassouli
چهارشنبه 25 بهمن 1385, 08:29 صبح
خوب 100000 تا داده که خیلی زیاده، حتی اگه داده هاتون 1 بایتی باشند. شما باید پیچیدگی های زمانی و فضایی الگوریتک رو هم در نظر بگیرید، درسته که این اسمش Quick Sort هستش، ولی همیشه بهترین الگوریتم نیست. این الگوریتم آرایه شما ره هییییییی تکه تکه میکنه، پس طبیعی که Stack Overflow هم بده! بهتره از یه اگوریتم دیگه استفاده کنید. مخصوصاً الگوریتم های تکراری (بجای بازگشتی)

farnaz2003
چهارشنبه 25 بهمن 1385, 08:56 صبح
مثلا چی؟ آخه مساله زمانی هم برام خیلی مهمه.
شما چی پیشنهاد می کنید.

PC2st
چهارشنبه 25 بهمن 1385, 16:11 عصر
اگر دقیق فهمیده باشم، 100000 داده خوانده شده و توی یک آرایه به اندازه 100000 ریخته شده است. میشه به جای این کار، داده ها رو توی دو (شاید هم بیشتر!) ارایه بریزیم البته با اندازه های (طولهای) کمتر، مثلا میشه توی دو آرایه با سایز 50000 تا ریختشون و با الگوریتم quicksort مرتبشون کرد، پس الان دو تا آرایه مرتب شده داریم، به راحتی میشه این دو تا آرایه رو توی یک آرایه مرتب دیگه (با سایز 100000) ریخت. شاید اینجوری error نده!

Amir Oveisi
پنج شنبه 26 بهمن 1385, 15:11 عصر
خودت stack تعریف کن و ازش استفاده کن