ডিফ অ্যালগরিদম? [বন্ধ]


164

আমি একটি ভিন্ন অ্যালগরিদমের ব্যাখ্যা করার জন্য পাগলের মতো দেখছিলাম যা কার্যকর এবং দক্ষ।

আমার কাছে সবচেয়ে কাছেরটি হ'ল আরএফসি 3284 এর লিঙ্ক (বেশ কয়েকটি এরিক সিঙ্ক ব্লগ পোস্ট থেকে), যা সম্পূর্ণরূপে বোধগম্য পদার্থে ডেটা ফর্ম্যাটটিতে বর্ণনা করে যাতে বিভিন্ন ফলাফল সংরক্ষণ করা হয়। তবে কোনও প্রোগ্রাম কীভাবে কোনও ফলাফল করার সময় এই ফলাফলগুলিতে পৌঁছায় সে সম্পর্কে এটির কোনও উল্লেখ নেই।

আমি এটি ব্যক্তিগত কৌতূহলের বাইরে নিয়ে গবেষণার চেষ্টা করছি, কারণ আমি নিশ্চিত যে একটি পৃথক অ্যালগরিদম বাস্তবায়নের সময় অবশ্যই ট্রেডঅফস থাকতে হবে, যা আপনি মাঝে মাঝে আলাদা করে দেখে অবাক হয়ে যান "কেন ডিফ প্রোগ্রামটি এটিকে পরিবর্তন হিসাবে বেছে নিয়েছিল? ঐটার পরিবর্তে?"...

ভিসিডিআইএফএফ আউটপুটটিংয়ের শেষ হবে এমন একটি দক্ষ অ্যালগরিদমের বর্ণনা আমি কোথায় পাব?
যাইহোক, যদি আপনি সোর্সগিয়ারের ডিফমার্জ দ্বারা ব্যবহৃত প্রকৃত অ্যালগরিদমের বিবরণ খুঁজে পান তবে এটি আরও ভাল।

দ্রষ্টব্য: দীর্ঘতম সাধারণ অনুচ্ছেদটি ভিসিডিআইএফ দ্বারা ব্যবহৃত অ্যালগরিদম বলে মনে হয় না, মনে হয় তারা ব্যবহারের ডেটা ফর্ম্যাটকে দেখে তারা আরও চৌকস কিছু করছে।


উইকিপিডিয়ায় কিছুই নেই? পাইথনের মতো হাইাইট লেভেলের ল্যাংজে আপনি অন্য কোনও প্রয়োগের সন্ধান করতে পারেন, এটি সি বাস্তবায়নের চেয়ে বোঝা সহজ। পাইথন সহজে পাঠযোগ্য হওয়ার জন্য বিখ্যাত? অজগরটিতে একটি বিচ্ছিন্নতা আছে। উত্সটির url এখানে। উত্সটিতে পৃথক অ্যালগরিদমগুলি সম্পর্কে প্রচুর মন্তব্য রয়েছে। svn.python.org/view/python/trunk/Lib/…
ব্রেজিরান

4
আরএফসিগুলি অ্যালগরিদমগুলি বর্ণনা করার জন্য নয়। এগুলি ইন্টারফেস (/ প্রোটোকল) বর্ণনা করতে বোঝানো হয়।

2
আসলে, পৃথক অ্যালগরিদমের মূল, দীর্ঘতম সাধারণ সাব-সিকোয়েন্স সমস্যা, উইকিপিডিয়ায় পাওয়া যাবে। এই পৃষ্ঠাটি অ্যালগরিদম এবং নমুনা কোডটির একটি ওভারভিউ দেয় যা আমার যখন কাস্টম ডিফ
Corwin Joy

3
সম্ভবত এটি সাহায্য করবে: পলবটলআরর্গ / আর্কাইভস / এ- সিম্পল- ডিফ- অ্যালগরিদম- ইন- php এটি নিশ্চিত যে দুর্দান্ত এটি খুব সুন্দর এবং এটি খুব ছোট (কেবলমাত্র ২৯ টি লাইন সামগ্রিকভাবে এটির 2 টি কার্য রয়েছে)। এটি স্ট্যাক ওভারফ্লো সম্পাদনা পুনর্বিবেচনা তুলনা জিনিস এর অনুরূপ।
নাথান

ভিসিডিআইএফএফ মানুষের পঠনযোগ্য বিভিন্নতার জন্য নয়। এটি বেশিরভাগ সরল পাঠ্য পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক গোষ্ঠীর দ্বারা নির্গত নির্দেশাবলী সন্নিবেশ করানো এবং সন্নিবেশ করানোর বিপরীতে নির্দেশাবলী যুক্ত, অনুলিপি এবং চালনা করে run ভিসিডিআইএফএফের জন্য আপনার এখানে বর্ণিত এক্সডেল্টা অ্যালগরিটিহমের মতো কিছু দরকার xmailserver.org/xdfs.pdf
asgerhallas

উত্তর:


175

একটি ও (এনডি) পার্থক্য অ্যালগরিদম এবং এর বিভিন্নতা একটি দুর্দান্ত কাগজ এবং আপনি সেখানে শুরু করতে চাইতে পারেন। এটিতে সিউডো-কোড এবং ডিফটি করার সাথে জড়িত গ্রাফ ট্র্যাভারসালগুলির একটি দুর্দান্ত ভিজ্যুয়ালাইজেশন রয়েছে।

বিভাগ 4কাগজের অ্যালগরিদমের সাথে কিছু সংশোধন করা হয়েছে যা এটিকে খুব কার্যকর করে তোলে।

সাফল্যের সাথে এটি প্রয়োগ করা আপনাকে আপনার সরঞ্জামবাক্সে খুব দরকারী সরঞ্জামের সাথে ছেড়ে দেবে (এবং সম্ভবত কিছু দুর্দান্ত অভিজ্ঞতাও)।

আপনার প্রয়োজনীয় আউটপুট ফর্ম্যাট তৈরি করা কখনও কখনও জটিল হতে পারে তবে আপনার যদি অ্যালগোরিদম ইন্টার্নালগুলি বোঝা থাকে তবে আপনার প্রয়োজনীয় কিছু আউটপুট করতে সক্ষম হওয়া উচিত। আপনি আউটপুটকে প্রভাবিত করতে এবং নির্দিষ্ট ট্রেড অফ করতে হিউরিস্টিকগুলি প্রবর্তন করতে পারেন।

এখানে একটি পৃষ্ঠা যা কিছুটা ডকুমেন্টেশন, সম্পূর্ণ উত্স কোড এবং উপরোক্ত অ্যালগরিদমের কৌশলগুলি ব্যবহার করে একটি পৃথক অ্যালগরিদমের উদাহরণ অন্তর্ভুক্ত করে।

সোর্স কোড ঘনিষ্ঠভাবে মৌলিক আলগোরিদিম অনুসরণ করতে উপস্থিত হয় এবং পড়তে সহজ।

ইনপুট প্রস্তুত করার ক্ষেত্রেও কিছু রয়েছে, যা আপনি দরকারী মনে করতে পারেন। আপনি যখন অক্ষর বা টোকেন (শব্দ) দ্বারা পৃথক হন তখন আউটপুটটিতে একটি বিশাল পার্থক্য থাকে।

শুভকামনা!


1
যদি লিঙ্কটি খারাপ হয় তবে এটি মায়ার্স 1986; উদাহরণস্বরূপ দেখুন citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - এটি diffহান্ট এবং ম্যাকিল্রয়ের ইউনিক্স পেপারের আরও একটি লিঙ্ক অন্তর্ভুক্ত করেছে ।
ট্রিপলি

34

আমি জিএনইউ উপলব্ধ করে এমন ভিন্নতার জন্য আসল উত্স কোডটি দেখে শুরু করব ।

একটি জন্য বোঝার কিভাবে যে সোর্স কোড এর প্রকৃত কর্মপদ্ধতির, যে প্যাকেজ রেফারেন্স কাগজপত্র এটি অনুপ্রাণিত মধ্যে দস্তাবেজ:

বেসিক অ্যালগরিদমটি "আন ও (এনডি) ডিফারেন্স অ্যালগরিদম এবং এর বিভিন্নতা", ইউজিন ডব্লিউ মায়ার্স, 'অ্যালগরিদমিকা' খণ্ডে বর্ণিত হয়েছে। 1 নং 2, 1986, পৃষ্ঠা 251-266; এবং "একটি ফাইল তুলনা প্রোগ্রাম", ওয়েব মিলার এবং ইউজিন ডাব্লু মাইয়ার্স, 'সফটওয়্যার - অনুশীলন এবং অভিজ্ঞতা' খণ্ড। 15 নং 11, 1985, পিপি 1025-1040। "আনুমানিক স্ট্রিং ম্যাচিংয়ের জন্য অ্যালগরিদম", ই। উকোনেন, 'তথ্য ও নিয়ন্ত্রণ' খণ্ডে বর্ণিত হিসাবে অ্যালগরিদম স্বাধীনভাবে আবিষ্কার করা হয়েছিল। 64, 1985, পৃষ্ঠা 100-118।

কাগজপত্রগুলি পড়া এবং তারপরে কোনও বাস্তবায়নের জন্য উত্স কোডটি সন্ধান করা এটি কীভাবে কাজ করে তা বোঝার জন্য যথেষ্ট পরিমাণে হওয়া উচিত।


80
হুম, সংক্ষেপে, কখনও কখনও আসল উত্স কোড থেকে অন্তর্নিহিত অ্যালগরিদম বের করা (বিশেষত যদি এটি দক্ষ হওয়ার জন্য অনুকূলিত হয়) তবে বেশ জটিল হতে পারে। প্রোগ্রামটি ধাপে ধাপে কী করছে তা আমি বুঝতে সক্ষম হবো, তবে ঠিক "কেন", বা সে সম্পর্কে একটি উচ্চ স্তরের ওভারভিউ ... উদাহরণ: আপনি কখনই বুঝতে পারবেন না যে নিয়মিত এক্সপ্রেশনগুলি কীভাবে কাজ করে (বা তারা কী করে) পার্লের রেগেক্সেস বাস্তবায়নের দিকে তাকিয়ে। বা যদি আপনি এটি করতে পারতেন তবে আমি আমার টুপিটি টিপব, আমার কী ঘটছে তা নির্ধারণের জন্য অবশ্যই আরও একটি উচ্চতর স্তরের ওভারভিউ দরকার।
ড্যানিয়েল ম্যাগলিওলা

3
পার্লের বিশাল সংখ্যাগরিষ্ঠ কীভাবে কাজ করে তা আমি কখনই বুঝতে পারি না :-), তবে প্যাকেজ ডক্সের একটি লিঙ্ক আছে (আপডেট দেখুন) যা আপনাকে এটি বর্ণনা করা সাহিত্যের দিকে নির্দেশ করবে (এটি পার্লের চেয়ে পৃথক অ্যালগরিদম হচ্ছে)।
paxdiablo

32
কোডটি পড়বেন না। কাগজ পড়ুন।
ইরা

31

Https://github.com/google/diff-match-patch দেখুন

"ডিফ ম্যাচ এবং প্যাচ লাইব্রেরিগুলি সরল পাঠ্য সিঙ্ক্রোনাইজ করার জন্য প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করার জন্য শক্তিশালী অ্যালগরিদম সরবরাহ করে ... ... বর্তমানে জাভা, জাভাস্ক্রিপ্ট, সি ++, সি # এবং পাইথনে উপলব্ধ"

এছাড়াও উইকিপিডিয়া.org.রফের পৃষ্ঠা দেখুন এবং - " ব্র্যাম কোহেন: ভিন্ন সমস্যাটি সমাধান করা হয়েছে "


2
কেবল উল্লেখ করতে চেয়েছিলেন যে কোহেনের অ্যালগরিদমটি ধৈর্যশীলতা পৃথক হিসাবেও পরিচিত বলে মনে হয়। এটি বাজারে (ডিফল্ট?) ভিন্ন ভিন্ন অ্যালগরিদম এবং গিটের মধ্যে একটি alচ্ছিক।
ডেল হ্যাগলুন্ড

13

আমি এখানে পৃথক অ্যালগরিদম সন্ধান করতে এসেছি এবং তারপরে আমার নিজের প্রয়োগ হয়েছে। দুঃখিত আমি ভিসিডিফ সম্পর্কে জানি না।

উইকিপিডিয়া : দীর্ঘতম সাধারণ অনুচ্ছেদ থেকে এটি ভিন্ন ধরণের আউটপুট পাওয়ার জন্য কেবলমাত্র একটি ছোট পদক্ষেপ: কোনও আইটেম যদি অনুচ্ছেদে অনুপস্থিত থাকে এবং মূলটিতে উপস্থিত থাকে তবে অবশ্যই তা মুছে ফেলা হয়েছে। (নীচে '-' চিহ্নগুলি।) যদি এটি অনুচ্ছেদে অনুপস্থিত থাকে তবে দ্বিতীয় ক্রমে উপস্থিত থাকে তবে অবশ্যই এটি যুক্ত করা উচিত। ('+' চিহ্নগুলি))

এখানে এলসিএস অ্যালগরিদমের দুর্দান্ত অ্যানিমেশন ।

এখানে একটি দ্রুত এলসিএস রুবি বাস্তবায়নের লিঙ্ক ।

আমার ধীর এবং সাধারণ রুবি অভিযোজন নীচে is

def lcs(xs, ys)
  if xs.count > 0 and ys.count > 0
    xe, *xb = xs
    ye, *yb = ys
    if xe == ye
      return [xe] + lcs(xb, yb)
    end
    a = lcs(xs, yb)
    b = lcs(xb, ys)
    return (a.length > b.length) ? a : b
  end
  return []
end

def find_diffs(original, modified, subsequence)
  result = []
  while subsequence.length > 0
    sfirst, *subsequence = subsequence
    while modified.length > 0
      mfirst, *modified = modified
      break if mfirst == sfirst
      result << "+#{mfirst}"
    end
    while original.length > 0
      ofirst, *original = original
      break if ofirst == sfirst
      result << "-#{ofirst}"
    end
    result << "#{sfirst}"
  end
  while modified.length > 0
    mfirst, *modified = modified
    result << "+#{mfirst}"
  end
  while original.length > 0
    ofirst, *original = original
    result << "-#{ofirst}"
  end
  return result
end

def pretty_diff(original, modified)
  subsequence = lcs(modified, original)
  diffs = find_diffs(original, modified, subsequence)

  puts 'ORIG      [' + original.join(', ') + ']'
  puts 'MODIFIED  [' + modified.join(', ') + ']'
  puts 'LCS       [' + subsequence.join(', ') + ']'
  puts 'DIFFS     [' + diffs.join(', ') + ']'
end

pretty_diff("human".scan(/./), "chimpanzee".scan(/./))
# ORIG      [h, u, m, a, n]
# MODIFIED  [c, h, i, m, p, a, n, z, e, e]
# LCS       [h, m, a, n]
# DIFFS     [+c, h, +i, -u, m, +p, a, n, +z, +e, +e]

10

এমেলাইচ যে লিঙ্কটি দিয়েছে তার উপর ভিত্তি করে, নীল ফ্রেজারের ওয়েবসাইটে (গ্রন্থাগারের অন্যতম লেখক) ডিফ স্ট্র্যাটেজির দুর্দান্ত রানও রয়েছে ।

তিনি মৌলিক কৌশলগুলি কভার করেন এবং নিবন্ধের শেষের দিকে মাইয়ারের অ্যালগরিদম এবং কিছু গ্রাফ তত্ত্বের দিকে অগ্রসর হন।

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