বড় ওয়ার্ডলিস্টে সদৃশগুলি মুছার দ্রুততম উপায়?


14

আমার একটি বড় ওয়ার্ডলিস্ট নকল করা দরকার। আমি বেশ কয়েকটি কমান্ড চেষ্টা করেছিলাম এবং এখানে এবং এখানে কিছু গবেষণা করেছি যেখানে তারা ব্যাখ্যা করে যে কোনও ওয়ার্ডলিস্টকে নকল করার দ্রুততম উপায়টি অ্যাজে-কে ব্যবহার করছে বলে মনে হচ্ছে।

awk -> ও (এন)? সাজান -> ও (এন লগ এন)?

তবে আমি দেখতে পেয়েছি যে এটি সত্য বলে মনে হচ্ছে না। এখানে আমার পরীক্ষার ফলাফল রয়েছে:

sort -u input.txt -o output.txt 

আসল 0m12.446s
ব্যবহারকারীর 0m11.347s 0
ম 0.906 এস

awk '!x[$0]++' input.txt > output.txt

আসল 0m47.221s
ব্যবহারকারী 0m45.419 গুলি 0
মি 1.260 সেকেন্ড

সুতরাং বাছাই -u ব্যবহার করা 3.7 গুণ দ্রুত হয়। কেন? ডুপ্লিকেশন করতে আরও দ্রুত পদ্ধতি কি আছে?

*********** হালনাগাদ ********

যেহেতু কেউ মন্তব্যগুলিতে উল্লেখ করেছেন, এটি হতে পারে যে আমার ওয়ার্ডলিস্টটি ইতিমধ্যে কিছুটা বাছাই করা হয়েছিল। এই সম্ভাবনাটি বাদ দিতে আমি পাইথন স্ক্রিপ্টটি ব্যবহার করে দুটি ওয়ার্ডলিস্ট তৈরি করেছি ।


তালিকা 1 = 7 এমবি তালিকা 2 = 690 এমবি

ফলাফল awk:
তালিকা 1
বাস্তব 0m1.643s
ব্যবহারকারী 0m1.565s
sys 0m0.062s

তালিকা 2
রিয়েল 2 এম 6.918 এর
ব্যবহারকারী 2 এম
4.499এস 0মি1.345এস

ফলাফল সাজান:
তালিকা 1
বাস্তব 0m0.724s
ব্যবহারকারী 0m0.666s
sys 0m0.048s

তালিকা 2
আসল 1 এম 27.254 গুলি
ব্যবহারকারী 1 এম
25.013এসএস 0এম1.251 এস


আপনার ইনপুট ডেটা ইতিমধ্যে বাছাই করা যেতে পারে?
ইরুভর

আমি সংখ্যার সাথে একটি এলোমেলো তালিকা তৈরি করব এবং তা নিশ্চিত করতে চেক করব
কার্পলি

2
বিগ ও স্বরলিপিটি ইনপুট দৈর্ঘ্য অসীমের কাছে পৌঁছলে কী ঘটে তা সম্পর্কে: এটি আপনাকে বড় ইনপুট সহ একটি অ্যালগোরিদম স্কেল বলে। কিছু অ্যালগরিদম ছোট ইনপুট আকারে আরও ভাল কাজ করে।
ctrl-alt-delor

1
কার্ল্পি, আপনি কোন আদেশটি কার্যকর করেছিলেন, প্রথমে বিশুদ্ধ বা সাজান? ফাইল
ক্যাচিংয়ের

1
@ কার্লপি: "আমি ফাইলের নাম পরিবর্তন করেছি ..." আপনি যদি বোঝাতে চান যে আপনি ফাইলটির নাম পরিবর্তন করেছেন, তবে এটি যথেষ্ট ভাল নয়। কোনও ফাইলের পুনঃনামকরণ কেবল পুরানো ইনোডের সাথে একটি নতুন নাম যুক্ত করে, যা এখনও একই পুরাতন ডেটা ব্লকগুলিকে নির্দেশ করে। যদি তাদের ক্যাশে করা হয় তবে তারা এখনও ক্যাশে রয়েছে। ISTM যে আরও ভাল কৌশলটি হ'ল (1) ফাইলটির একটি অনুলিপি তৈরি করা, এবং তারপরে (2) একটি ফাইলে একটি কমান্ড চালানো এবং (3) অন্য ফাইলটি অন্য কমান্ড চালানো।
স্কট 0

উত্তর:


3

আপনি ভুল প্রশ্ন জিজ্ঞাসা করছেন, বা প্রশ্নটি ভুলভাবে এবং ভুল স্ট্যাকের মধ্যে জিজ্ঞাসা করছেন, জনগণের জন্য আপনাকে উত্তর এবং উত্তর দেওয়ার জন্য উত্তর এবং সাজানোর ক্ষেত্রে উত্তর দেওয়ার জন্য এই প্রোগ্রামিং / স্ট্যাক-ওভারফ্লোতে জিজ্ঞাসা করা আরও ভাল প্রশ্ন।

PS: এছাড়াও "জোনের মধ্যে";) আরও কিছু বিবরণ দেওয়ার জন্য নওক, মক এবং গাকের সাথে প্রয়োজনীয় কাজগুলি করুন এবং ন্যূনতম, সর্বোচ্চ, গড় এবং স্ট্যান্ডার্ড বিচ্যুতির সাথে প্রতিবার 100 বারের মতো রান করুন।

কমপিএসসি 210 থেকে হাতে থাকা প্রশ্নের কোনও মামলা, এটি ব্যবহৃত অ্যালগরিদম সম্পর্কে। মাপের উপর নির্ভর করে বাছাই করা বিভিন্নগুলি ব্যবহার করে এবং মেমরির সীমাবদ্ধতাগুলি এটি অস্থায়ী ফাইলগুলিতে ডিস্কের বাইরে ফাইলগুলি সংরক্ষণ করার জন্য আঘাত করে যা মেমরির বাইরে চলে গেলে তা বাছাই করা হয় এবং আপনাকে কী উত্স কোডটি সন্ধান করতে হবে তা দেখার জন্য নির্দিষ্ট ওএস (1) কমান্ডটি আপনার নির্দিষ্ট ওএস-এ ব্যবহার করে এটি চালাচ্ছে, তবে অভিজ্ঞতা থেকে এটি যতটা সম্ভব মেমরিতে লোড হচ্ছে, এটির জন্য কিছুটা দ্রুত সাজান, ডিস্কে লিখে, পুনরায় ধুয়ে ফেলুন এবং এ শেষ এটি ছোট সাজানো ফাইলগুলির একত্রিতকরণ বাছাই করবে। সুতরাং এখানে আপনার অংশগুলির জন্য ও (এন * লগ 2 (এন)) থাকবে এবং তারপরে একটি আনুমানিক হে (এন * লগ (এন)) মার্জিং অপারেশন হবে

awk: x [$ 0] ++ প্রক্রিয়াটি হ্যাশিং ব্যবহার করার জন্য "মনে করুন"। তবে হ্যাশিংয়ের সমস্যা, একটি অনুমিত ও (1) "লুকিং" অপারেশন হ'ল সংঘর্ষ এবং সংঘর্ষগুলির পরিচালনা ling যখন ডেটাগুলি ভালভাবে ছড়িয়ে না দেওয়া, বালতি ইত্যাদি পূরণ না করা এবং বড় তালিকাগুলিতে হ্যাশিং একটি বড় স্মৃতি সমস্যা হতে পারে তবে যদি সংঘর্ষগুলি পরিচালনা করা সঠিকভাবে না করা হয় (এবং আপনার প্রয়োজন হতে পারে প্রত্যাশিত ডেটার জন্য হ্যাশিং অ্যালগরিদমগুলিকে টিউন করুন) এবং তারপরে আপনাকে আসল হ্যাশিং ফাংশনগুলির কার্যকারিতাটি দেখতে হবে এবং তারপরে ও (1) সন্নিবেশগুলির জন্য একটি (লগ (এন)) এর কাছাকাছি থাকতে পারে (অর্থাত্ ও। (1) প্রথম অনুসন্ধানের জন্য, এবং এটি উপস্থিত না থাকলে আপনি এটিকে যুক্ত করুন যা ও (লগ (এন)) হতে পারে, এবং তারপরে এন * ও (1) একটি * ও (লগ (এন)) হয়ে যায় = > ও (এন * লগ (এন)), উল্লেখ করার জন্য নয় যে আপনি "ব্যাখ্যাযুক্ত" পদ্ধতিতেও কাজ করছেন :)


-2

গতির পার্থক্য কারণ 'সাজানো' একটি কমান্ড ( লিঙ্ক ), যেখানে 'অ্যাজক' একটি প্রোগ্রামিং ভাষা ( লিঙ্ক )।

'সাজ্ট' কমান্ডটি ইনপুট এবং রিটার্ন আউটপুট নেয়। যদিও 'awk' একটি প্রোগ্রামিং ভাষা, যা প্রথমে কোডটি ব্যাখ্যা করে (টার্মিনাল কমান্ড) তারপরে এটি প্রক্রিয়া শুরু করে। যে হিসাবে সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.