ন্যূনতম সংখ্যাগুলির সাথে সংখ্যাগুলির সাথে মিলের জন্য অ্যালগরিদম


11

এটি এক ধরণের সম্পাদনা-দূরত্বের প্রশ্ন এবং এটি খুব সহজ। আমি এই বিষয়ে যথেষ্ট মস্তিষ্কে মরে গেছি এবং এখন পর্যন্ত এটি বের করতে পারি না।


একটি সিরিজ সংখ্যা দেওয়া, যেমন

[3, 1, 1, 1]

ন্যূনতম "চলন" সংখ্যার সাথে কীভাবে একজন সবচেয়ে কার্যকরভাবে সমস্ত সংখ্যাকে একই সংখ্যায় রূপান্তরিত করবেন? "মুভ" দ্বারা বোঝানো হচ্ছে একটি সংখ্যা থেকে একটি যুক্ত করা বা অপসারণ করা।

উপরের উদাহরণে, সবচেয়ে কার্যকর চালগুলি হ'ল:

[1, 1, 1, 1]

এটির জন্য 2 টি চাল চলবে, প্রথম সংখ্যাটি দুবার হ্রাস করবে।

শত শত সংখ্যক বৃহত্তর অ্যারে প্রদত্ত আমি এটি খুঁজে পাওয়ার সর্বোত্তম উপায়টি খুঁজে বের করতে পারি না।

আমি মূলত বৃত্তাকার গড় সংখ্যার (দৈর্ঘ্য অনুসারে বিভক্ত সকলের যোগফল) গণনা করার চেষ্টা করেছি, এবং তারপরে এগুলিকে গণিত গড়তে হ্রাস করেছি, তবে উপরের উদাহরণটি এটিকে ভেঙেছে, 2 এর পরিবর্তে 4 টি চাল প্রয়োজন moves

আমি মনে করি আমি চিত্রিত করতে পারি:

  1. গড়,
  2. ভাব,
  3. মিডিয়ান

এবং সর্বনিম্ন দূরত্বটি বেছে নিয়ে তাদের প্রত্যেকের সম্পাদনার দূরত্ব পান। তবে, আমি নিশ্চিত নই যে এটি প্রতিটি একক ক্ষেত্রে সঠিক হবে be আমি কিভাবে জানতে পারি?


যদি ডোমেন সীমাবদ্ধ থাকে তবে আপনি সর্বনিম্ন থেকে সর্বোচ্চ পর্যন্ত সমস্ত সম্ভাবনার চেষ্টা করতে পারেন। অন্যথায় আপনি মোড বা মিডিয়ান ব্যবহার করার চেষ্টা করতে পারেন।
বার্তোসজ প্রিজিবিস্কি 21

ধন্যবাদ বার্টেক শত বা হাজার হাজার সংখ্যার সাথে লেনদেন করলে সমস্ত সম্ভাবনাগুলি চেষ্টা করার মতো চেষ্টা করা অত্যন্ত ব্যর্থ fficient আমি মোড / মিডিয়ান পরীক্ষা করব। তবে এগুলি কি প্রতিটি ক্ষেত্রে ফলাফল তৈরির বিষয়ে নিশ্চিত? এটাই আমার মূল প্রশ্ন। আমি একটি নির্দিষ্ট, দক্ষ অ্যালগরিদম খুঁজছি।
dthree

সংখ্যাটি কি সংখ্যার সেটে থাকতে হবে, বা এটি কোনও পূর্ণসংখ্যা হতে পারে?
টিসিএসগ্রাড

@ টিটিএসগ্র্যাড এটি কোনও পূর্ণসংখ্যার হতে পারে তবে অবশ্যই আপনি ন্যূনতম এবং সর্বাধিক সংখ্যার মধ্যে একটি বেছে নিতে চান।
এক্ষেত্রে

উত্তর:


10

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

এটি সেই অ্যালগরিদম যা সমস্যার সমাধান করে (মূলত ডিসি 2 লিখেছেন ):

function median(arr) {
  arr.sort(function(a, b) { return a - b; });
  var half = floor(arr.length/2);
  if ( arr.length % 2 ) {
    return arr[half];
  } else {
    return (arr[half-1] + arr[half]) / 2.0;
  }
}

function minl1(arr) {
  var moves = 0;
  var mdn = median(arr);
  for ( var i = 0; i < arr.length; ++i ) {
    moves += Math.abs(mdn - arr[i]);
  }
  return moves;
}

minl1([3, 1, 1, 1]); // -> 2

হ্যাঁ, এটা এটা করেছে। মজার যে কিভাবে কাজ করে। মিডিয়ান এটি করবে বলে মনে হয় না তবে ওহে। অনেক ধন্যবাদ.
dthree

1
প্রমাণের জন্য আমার উত্তর দেখুন।
যুবাল ফিল্মাস

@ ডিসি 2: আপনি "চেষ্টা করে" চেষ্টা করে "নিশ্চিত করতে" পারবেন না।
রাফেল

1
কেবলমাত্র লক্ষণীয়: আপনি মিডিয়ান ও (এন) সময় গণনা করতে পারেন
বার্তোস্ প্রিজিবিস্কি

1
@ রাফেল ওপির কোনও রেফারেন্স না দিয়ে ওপির কোডটি অন্য কোনও উত্তরে অন্তর্ভুক্ত করা কি ঠিক?
thefourtheye

10

যেমন টিসিএসগ্রাড উল্লেখ করেছে, এর পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে , আপনি পূর্ণসংখ্যার সন্ধান করছেন মি ন্যূনতম δ ( এম ) = n i = 1 | মি - এক্স আই | এটা তোলে গনা শিক্ষণীয় δ ( মি + + 1 ) - δ ( মি ) : δ ( মি + + 1 ) - δ ( মি ) =x1,,xnm

δ(m)=i=1n|mxi|.
δ(m+1)δ(m) হিসাবেমিথেকে যায়-থেকে+ +, পরিমাণδ(মি+ +1)-δ(মি)
δ(m+1)δ(m)=i=1n{+1mxi1m<xi=#{i:mxi}#{i:m<xi}.
m+δ(m+1)δ(m)থেকে যায় করতে এন । তদুপরি, এটি শুধুমাত্র এক্স 1 , , x এন পয়েন্টে মানগুলি স্যুইচ করে । এটা তোলে চেক করার জন্য যে এর একটি অনুকূল মান কঠিন নয় মিটার যা ন্যূনতম পয়েন্ট δ ( মি + + 1 ) - δ ( মি ) 0 । এই সংক্ষিপ্ত বিন্দু এক এক্স আমি , তাই সম্পাদনা দূরত্ব সর্বনিম্ন ( δ ( এক্স 1 ) , ... , δ ( এক্সnnএক্স1,...,এক্সএনমিδ(মি+ +1)-δ(মি)0এক্সআমিসর্বনিম্ন(δ(এক্স1),...,δ(এক্সএন))

এক্সআমিএনমিএক্সআমিδ(মি+ +1)-δ(মি)=1δ(মি)-δ(মি-1)=-1মিএনএক্সআমিδএক্সআমি


আপনি এটি মিস করতে পারেন, তবে এই উত্তরটি (প্রায়) প্রমাণ করে যে মধ্যকটি সর্বোত্তম পছন্দ।
যুবাল ফিল্মাস

1
আপনার উত্তর দুর্দান্ত ছিল এবং আমি এটি upvated। দুর্ভাগ্যক্রমে আমার পক্ষে, একটু বেশি দুর্দান্ত কারণ আমি বৈজ্ঞানিক স্বরলিপিতে পারদর্শী নই, এর বেশিরভাগই রেন্ডার গার্বল হিসাবে রেখেছি। এটাই আমার সমস্যা, আপনার নয়।
dthree

5

এলপি সমস্যা হিসাবে সমস্যাটি তৈরি করা যেতে পারে:

এন[একটি1,একটি2একটিএন]

সর্বনিম্নΣ|একটিআমি-এক্স|

এক্স

এক্সএক্স

সম্পাদনা : মতামতগুলিতে নির্দেশিত হিসাবে, উদ্দেশ্যমূলক ফাংশনটি সম্পূর্ণ পার্থক্যের উপর সমষ্টি হওয়া উচিত। এটিকে আবার কোনও মানদণ্ড এলপিতে রূপান্তর করতে আমরা এলপিকে নতুন করে লিখতে পারি:

সর্বনিম্নΣএকটিআমি'

বিষযে:

একটিআমি'একটিআমি-এক্স আমি
একটিআমি'একটিআমি-এক্স আমি
একটিআমি',এক্স'0 আমি

একটিআমি'=|একটিআমি-এক্স| আমিএক্স


সুতরাং আমি যদি এটি সঠিকভাবে বুঝতে পারি, উদাহরণস্বরূপ, x 1 - 3 হবে এবং তাই আমি সম্পাদনা দূরত্বটি 1, 2 এবং 3 পেয়ে যাব এবং তারপরে একটি মিনিট করব?
dthree

xএক্স

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