এখানে এসপিওজে-র একটি সাধারণ প্রোগ্রামিং সমস্যা: http://www.spoj.com/problems/PROBTRES/ ।
মূলত, আপনাকে i এবং j এর মধ্যে সংখ্যার জন্য সবচেয়ে বড় কোলাটজ চক্র আউটপুট করতে বলা হয়। (একটি সংখ্যার কোলাটজ চক্র eventually n $ অবশেষে $ n $ থেকে ১ এ যাওয়ার পদক্ষেপের সংখ্যা)
আমি জাভা বা সি ++ এর তুলনায় তুলনামূলক পারফরম্যান্সের সাথে সমস্যার সমাধান করার জন্য একটি হাস্কেল পথের সন্ধান করছি (যাতে অনুমোদিত রান-টাইম সীমাতে ফিট করা যায়)। যদিও একটি সাধারণ জাভা সমাধান যা ইতিমধ্যে যে কোনও গণনা করা চক্রের দৈর্ঘ্যের স্মৃতিচারণ করে কাজ করবে, তবে আমি হাস্কেল সমাধান পেতে ধারণাটি প্রয়োগ করতে সফল হইনি।
আমি এই পোস্টটি থেকে ধারণাটি ব্যবহার করে ডেটা ফাংশন.মেমোজেস পাশাপাশি হোম-ব্রিউড লগ টাইম মেমোয়েজ করার কৌশলটি চেষ্টা করেছি: /programming/3208258/memoization-in-haskell । দুর্ভাগ্যক্রমে, স্মৃতিচারণ আসলে চক্রের গণনা (এন) আরও ধীর করে তোলে। আমি বিশ্বাস করি ধীরগতিটি হাস্কেল পথের ওভারহেড থেকে আসে। (আমি ব্যাখ্যা করার পরিবর্তে সংকলিত বাইনারি কোড দিয়ে চালানোর চেষ্টা করেছি।)
আমি আরও সন্দেহ করি যে কেবল i থেকে j পর্যন্ত সংখ্যার পুনরাবৃত্তি ব্যয়বহুল হতে পারে ($ i, j \ le10 ^ 6 $)। তাই আমি এমনকি http://blog.openendings.net/2013/10/range-trees-and- প্রোফিলিং-in-haskell.html থেকে ধারণা ব্যবহার করে ব্যাপ্তি ক্যোয়ারির জন্য সমস্ত কিছু প্রাক্পম্পিউট করার চেষ্টা করেছি । তবে এটি এখনও "সময়ের সীমা অতিক্রম করে" ত্রুটি দেয়।
আপনি কি এটির জন্য একটি ঝরঝরে প্রতিযোগিতামূলক হাস্কেল প্রোগ্রামটি জানাতে সহায়তা করতে পারেন?