বাছাই করা পাঠ্য ফাইলে বাইনারি অনুসন্ধান


13

আমার বিলিয়াত্ব দৈর্ঘ্যের কোটি কোটি লাইনযুক্ত একটি বড় বাছাই করা ফাইল রয়েছে। একটি নতুন লাইন দেওয়া আমি জানতে চাই যে এটি বাছাই করা ফাইলটিতে অন্তর্ভুক্ত করা হলে কোন বাইট নম্বরটি পেত।

উদাহরণ

a\n
c\n
d\n
f\n
g\n

ইনপুট 'foo' দেওয়াতে আমি আউটপুট 9 পেতে পারি।

কেবল পুরো ফাইলটি দিয়েই এটি করা সহজ, তবে কয়েক মিলিয়ন লাইনের পরিবর্তনশীল দৈর্ঘ্যের কারণে এটি বাইনারি অনুসন্ধান করা আরও দ্রুত হবে be

এই জাতীয় পাঠ্য প্রক্রিয়াকরণ সরঞ্জাম ইতিমধ্যে বিদ্যমান?

সম্পাদনা:

এটি এখন করে: https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch


আপনি যে রেখার সন্ধান করছেন (অক্ষরগুলিতে) কতক্ষণ? এবং এই জাতীয় কয়টি লাইন আপনার সন্ধান করতে হবে?
গগৌড

@ গোগাউড আমি কোনও সীমাবদ্ধ সরঞ্জামের সন্ধান করছি না, তবে যেকোন টেক্সটফাইলে কাজ করে (লাইনের দৈর্ঘ্য বা রেখার সংখ্যা নির্বিশেষে)।
ওলে টাং

যে এই ধরনের রাক্ষুসে ইনপুট জেনারেট করতে পছন্দ করতে পারেন তাদের জন্য: unix.stackexchange.com/a/279098/9689
Grzegorz Wierzowiecki

উত্তর:


4

আমি কিছু মানক সরঞ্জাম এটি করায় সচেতন নই। তবে আপনি নিজের লিখতে পারেন। উদাহরণস্বরূপ নিম্নলিখিত রুবি স্ক্রিপ্টটি কাজ করা উচিত।

file, key = ARGV.shift, ARGV.shift
min, max = 0, File.size(file)

File.open(file) do |f|
  while max-min>1 do
    middle = (max+min)/2
    f.seek middle
    f.readline
    if f.eof? or f.readline>=key
      max = middle
    else
      min = middle
    end
  end
  f.seek max
  f.readline
  p f.pos+1
end

এটি কিছুটা জটিল কারণ অনুসন্ধানের পরে আপনি সাধারণত কিছু লাইনের মাঝখানে থাকেন এবং তাই নিম্নলিখিত পংক্তির শুরুতে একটি রিডলাইন করা দরকার যা আপনি আপনার কীটির সাথে পড়তে এবং তুলনা করতে পারেন।


এটা -n / -r প্রক্রিয়া ফাইলগুলিতে অনুসারে সাজানো গ্রহণ করতে রদবদল করা যাবে sort -rএবং sort -n?
ওলে টাঞ্জ

উপরের কোডটি মূলত ধারণাটি দেখানোর জন্য। এটি নিখুঁত থেকে দূরে। (উদাহরণস্বরূপ এটি প্রথমদিকে গেলে কী ব্যর্থ হয়)) আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে দ্বিধা বোধ করবেন।
মিচাস

5

(এটি আপনার প্রশ্নের সঠিক উত্তর নয়, কেবল একটি সূচনা পয়েন্ট))

আমি একই পরিস্থিতিতে স্যাগ্রিপ (সাজানো গ্রেপ ) ব্যবহার করেছি

দুর্ভাগ্যক্রমে (আমাদের বর্তমান অবস্থা প্রয়োজন) এটির বাইট-অফসেট আউটপুট নেই; তবে আমি মনে করি এটি সহজেই যুক্ত হতে পারে।


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