এটি প্রকৃত উত্তরের চেয়ে অতিরিক্ত বিশ্লেষণের চেয়ে বেশি তবে এটি সাজানো ডেটার উপর নির্ভর করে আলাদা হয় বলে মনে হয়। প্রথম, একটি বেস পঠন:
$ printf "%s\n" {1..1000000} > numbers.txt
$ time python sort.py <numbers.txt >s1.txt
real 0m0.521s
user 0m0.216s
sys 0m0.100s
$ time sort <numbers.txt >s2.txt
real 0m3.708s
user 0m4.908s
sys 0m0.156s
ঠিক আছে, অজগরটি অনেক দ্রুত। তবে, আপনি সংখ্যাসমূহ অনুসারে sort
বাছাই করতে বলে কোর্টিলগুলি দ্রুত তৈরি করতে পারেন:
$ time sort <numbers.txt >s2.txt
real 0m3.743s
user 0m4.964s
sys 0m0.148s
$ time sort -n <numbers.txt >s2.txt
real 0m0.733s
user 0m0.836s
sys 0m0.100s
এটি অনেক দ্রুত তবে অজগর এখনও বিস্তৃত ব্যবধানে জিতেছে। এখন, আবার চেষ্টা করুন তবে 1 এম সংখ্যার অ-বাছাই করা তালিকা সহ:
$ sort -R numbers.txt > randomized.txt
$ time sort -n <randomized.txt >s2.txt
real 0m1.493s
user 0m1.920s
sys 0m0.116s
$ time python sort.py <randomized.txt >s1.txt
real 0m2.652s
user 0m1.988s
sys 0m0.064s
অরক্ষিত sort -n
সংখ্যাযুক্ত ডেটার জন্য কোর্টিলগুলি দ্রুততর (যদিও আপনি পাইথন সাজ্টারের cmp
প্যারামিটারটিকে আরও দ্রুত তৈরি করতে সক্ষম হতে পারেন )। কোরেটিলগুলি পতাকা sort
ছাড়াই এখনও উল্লেখযোগ্যভাবে ধীর -n
। সুতরাং, বিশুদ্ধ সংখ্যা নয়, এলোমেলো অক্ষর সম্পর্কে কী বলা যায়?
$ tr -dc 'A-Za-z0-9' </dev/urandom | head -c1000000 |
sed 's/./&\n/g' > random.txt
$ time sort <random.txt >s2.txt
real 0m2.487s
user 0m3.480s
sys 0m0.128s
$ time python sort.py <random.txt >s2.txt
real 0m1.314s
user 0m0.744s
sys 0m0.068s
পাইথন এখনও কোর্টিলগুলিকে প্রহার করে তবে আপনি আপনার প্রশ্নে যা দেখান তার চেয়ে অনেক ছোট ব্যবধানে। আশ্চর্যের বিষয়, খাঁটি বর্ণানুক্রমিক ডেটা দেখার সময় এটি আরও দ্রুত:
$ tr -dc 'A-Za-z' </dev/urandom | head -c1000000 |
sed 's/./&\n/g' > letters.txt
$ time sort <letters.txt >s2.txt
real 0m2.561s
user 0m3.684s
sys 0m0.100s
$ time python sort.py <letters.txt >s1.txt
real 0m1.297s
user 0m0.744s
sys 0m0.064s
এটিও লক্ষণীয় যে দু'জন একই সাজানো আউটপুট উত্পাদন করে না:
$ echo -e "A\nB\na\nb\n-" | sort -n
-
a
A
b
B
$ echo -e "A\nB\na\nb\n-" | python sort.py
-
A
B
a
b
অদ্ভুতভাবে যথেষ্ট, --buffer-size
বিকল্পটি আমার পরীক্ষাগুলিতে খুব বেশি (বা কোনও) পার্থক্য করতে পারে বলে মনে হচ্ছে না। উপসংহার ইন, সম্ভবতঃ goldilock এর উত্তর উল্লেখিত বিভিন্ন আলগোরিদিম কারণ, পাইথন sort
দ্রুত বেশিরভাগ ক্ষেত্রেই মনে করা হয় কিন্তু সংখ্যাগত গনুহ sort
পাঁচমিশালী সংখ্যার তে এটি beats 1 ।
ওপি সম্ভবত মূল কারণটি খুঁজে পেয়েছে তবে সম্পূর্ণতার জন্য, এখানে একটি চূড়ান্ত তুলনা করা হয়েছে:
$ time LC_ALL=C sort <letters.txt >s2.txt
real 0m0.280s
user 0m0.512s
sys 0m0.084s
$ time LC_ALL=C python sort.py <letters.txt >s2.txt
real 0m0.493s
user 0m0.448s
sys 0m0.044s
1 আমার তুলনায় আরও অজগর-ফুযুক্ত কেউ ক্রমিক list.sort()
বাছাইয়ের পদ্ধতিটি উল্লেখ করে একই গতিটি দেখতে টুইট পরীক্ষা করার চেষ্টা করা উচিত ।