আমাদের গ্রাফটি অ্যাসাইক্লিক হ'ল এই সমস্যাটি আরও সহজ করে তোলে।
টপোলজিকাল সাজানুসরণটি আমাদেরকে শীর্ষস্থানীয় অর্ডার দিতে পারে , যদি আমি < জে , তবে ভি জে থেকে পি i এর কোনও প্রান্ত নেই । আমরা শীর্ষস্থানগুলি তালিকাভুক্ত করেছি যে সমস্ত প্রান্তগুলি আমাদের তালিকায় "এগিয়ে" যায়।v1,v2,…,vni<jvjvi
(বিশ্লেষণ ঠিক করতে এবং কিছুটা দ্রুত অ্যালগরিদম দেওয়ার জন্য সম্পাদিত)
এখন আমরা কেবল এই তালিকাটি পেরিয়ে শেষ প্রান্তে । ভি এন এর ট্রানজিটিভ ক্লোজারটি নিজেই। এছাড়াও যোগ বনাম এন একটি প্রান্ত প্রতি প্রান্তবিন্দু এর সকর্মক অবসান করার বনাম এন ।vnvnvnvn
একে অপরের প্রান্তবিন্দু জন্য , শেষ পিছন থেকে যাচ্ছে, প্রথম অ্যাড বনাম আমি নিজস্ব সকর্মক অবসান, তারপর সবকিছু সকর্মক অবসান যোগ বনাম আমি সব ছেদচিহ্ন এর সকর্মক অবসান একটি প্রান্ত সঙ্গে বনাম আমি ।vivivivi
চলমান সময় সবচেয়ে খারাপ ক্ষেত্রে, সঙ্গে এন ছেদচিহ্ন এবং সংখ্যা মি ∈ হে ( ঢ 2 ) প্রান্ত সংখ্যা। টপোলজিকাল বাছাই করতে সময় O ( n + m ) লাগে । তারপরে আমরা পিছনের পাসে আরও একটি ও ( এম এন ) কাজ করব: প্রতিটি প্রান্তের জন্য তালিকার মধ্য দিয়ে আমরা পিছনের দিকে যেতে, আমাদের n পর্যন্ত যোগ করতে হবেO(n+m+nm)=O(n3)nm∈O(n2)O(n+m)O(mn)n কারওর ক্ষণস্থায়ী বন্ধের সূচনা
নোট করুন যে বিট-অ্যারে দ্বারা প্রত্যেকের ট্রানজিটিভ ক্লোজারকে উপস্থাপন করে আপনি একটি দুর্দান্ত ধ্রুবক-গুণক গতি অর্জন করতে পারেন। বলুন আপনার কাছে কেবল ; তারপর আপনি একটি একক 64-বিট int- এ যেখানে বিট ব্যবহার করেন আমি 1 হলে আমি অন্যথায় আমার সকর্মক অবসান এবং 0 হয়। তারপর অংশে আমরা সবকিছু যোগ যেখানে আমি 'থেকে গুলি সকর্মক অবসান ঞ ' s সত্যিই দ্রুত হল: আমরা শুধু নিতে গ ঞ | = গ আমি । (বাইনারি বা অপারেশন।)n=64iiijcjci
জন্য আপনাকে এগুলিতে রাখতে হবে এবং কিছু গাণিতিক করতে হবে তবে এটি কোনও অবজেক্ট সেটের চেয়ে অনেক দ্রুত হবে।n>64
OO(n3)