ডুপ্লিকেট ছাড়াই অ্যারে মার্জ করুন


15

দু'টি অ্যারে মার্জ করার জন্য এবং সদৃশগুলি সরিয়ে দেওয়ার জন্য আমি সম্প্রতি এই জাভাস্ক্রিপ্ট কোডটি স্ট্যাকওভারফ্লোতে দেখেছি :

Array.prototype.unique = function() {
    var a = this.concat();
    for(var i=0; i<a.length; ++i) {
        for(var j=i+1; j<a.length; ++j) {
            if(a[i] === a[j])
                a.splice(j--, 1);
        }
    }
    return a;
};

var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
var array3 = array1.concat(array2).unique(); 

এই কোডটি কাজ করার সময় এটি মারাত্মকভাবে অদক্ষ ( O(n^2))। আপনার চ্যালেঞ্জটি কম জটিলতার সাথে একটি অ্যালগরিদম করা।

বিজয়ী মানদণ্ড হ'ল ন্যূনতম জটিলতার সাথে সমাধান , তবে সম্পর্কগুলি সংক্ষিপ্ত দৈর্ঘ্যের দ্বারা অক্ষরগুলিতে ভেঙে দেওয়া হবে।

প্রয়োজনীয়তা :

"শুদ্ধি:" এর জন্য নিম্নলিখিত প্রয়োজনীয়তা পূরণ করে এমন একটি ক্রিয়ায় আপনার সমস্ত কোড এক সাথে প্যাকেজ করুন

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

অ্যারে ফাংশন ব্যবহার না করে আমাদের কীভাবে অ্যারে তৈরি বা সংযুক্ত করার কথা?
এমিল বিক্রস্টম

@ EmilVikström আমার সম্পাদনা দেখুন। আমি বোঝাতে চাইছি আপনি অ্যারে স্বতন্ত্রতা ফাংশন ব্যবহার করতে পারবেন না। অস্পষ্ট থাকার জন্য দুঃখিত।
hkk

যদি অ্যারেগুলির মধ্যে একটিতে এর সদৃশ থাকে তবে আমরা কি সেগুলিও সরিয়ে দেব? উদাহরণস্বরূপ, মার্জ করা উচিত [1, 2, 2, 3]এবং [2, 3, 4]ফিরে আসতে [1, 2, 2, 3, 4]বা [1, 2, 3, 4]?
ওআই

1
@ ওআই হ্যাঁ, এটি খুব সহজ করে তুলবে।
hkk

1
আমি জিজ্ঞাসা করতে পারি: অ্যারে কি ? আমরা কি কেবল পূর্ণসংখ্যা বা স্ট্রিং ধরে নিতে পারি, বা আমাদের আরও বহু জটিল বস্তুর মতো জটিল জিনিসকেও অনুমতি দিতে হবে?
jawns317

উত্তর:


8

পার্ল

27 অক্ষর

সাধারণ পার্ল হ্যাক

my @vals = ();
push @vals, @arr1, @arr2;
my %out;
map { $out{$_}++ } @vals;
my @unique = keys %out;

আমি নিশ্চিত যে কেউ এটি ওয়ান-লাইন করতে পারে .. এবং এভাবে (ধন্যবাদ ডম হেস্টিংস)

sub x{$_{$_}++for@_;keys%_}

1
"স্বতন্ত্রতা সনাক্তকরণের জন্য স্ট্যান্ডার্ড লাইব্রেরির অ্যারে ফাংশনগুলি ব্যবহার করবেন না (যদিও অন্যান্য জিনিস স্ট্যান্ডার্ড লাইব্রেরি গঠন করে ঠিক আছে)"
জন ডিভোরাক

1
আমি কীভাবে এই বিধি লঙ্ঘন করছি? আমি অনন্য ফাংশন ব্যবহার করছি না?
জাচ লেইটন

এটা কিভাবে কাজ করে, তাহলে? দুঃখিত, আমি পার্ল পড়তে পারি না যদি এটি কোনও হ্যাশ মানচিত্রের কীগুলি পড়তে থাকে - সেই নিয়মের সাথে কী সেই গণনাটি ঠিক আছে? আমি নিশ্চিত না হওয়া পর্যন্ত ভোট দেব না।
জন ডিভোরাক

1
এটি অ্যারেগুলিকে একত্রিত করে, উভয়কেই লুপ করে এবং একটি হ্যাশ যুক্ত করে যা অ্যারের লুপের বর্তমান মানটি কী value তারপরে এটি h হ্যাশের চাবিগুলি নেবে, আমি এটি আমার কিছু কাজে ব্যবহার করেছি .. সুতরাং [1,1,2,3,4,4] becomes 1 => 2, 2 => 1, 3 => 1 হয়ে যায় , 4 => 2}
জ্যাচ লেইটন

@ জ্যাচলাইটন আপনি কোডটি 27 টি সংক্ষিপ্ত করে সংক্ষিপ্ত করতে পারবেন sub x{$_{$_}++for@_;keys%_}(যদি এটি কোনও টাইতে নেমে আসে!) এবং এর মতো ব্যবহার করুন:z((1,2,3,4),(2,3,4,5,6))
ডম হেস্টিংস

10

জাভাস্ক্রিপ্ট ও (এন) 131 124 116 92 (86?)

গল্ফ সংস্করণ:

function m(i,x){h={};n=[];for(a=2;a--;i=x)i.map(function(b){h[b]=h[b]||n.push(b)});return n}

মানব পঠনযোগ্য গল্ফযুক্ত সংস্করণ:

function m(i,x) {
   h = {}
   n = []
   for (a = 2; a--; i=x)
      i.map(function(b){
        h[b] = h[b] || n.push(b)
      })
   return n
}

আমি concatএটির মতো ব্যবহার করতে পারি এবং এটি 86 টি চরিত্রে করতে পারি:

function m(i,x){h={};n=[];i.concat(x).map(function(b){h[b]=h[b]||n.push(b)});return n}

: কিন্তু আমি নিশ্চিত যদি এটি এখনও হে (ঢ) এই JsPerf উপর ভিত্তি করে নই http://jsperf.com/unique-array-merging-concat-vs-looping CONCAT সংস্করণ সীমিতভাবে দ্রুত ছোট অ্যারে সঙ্গে কিন্তু ধীর হিসাবে বৃহত্তর অ্যারে (Chrome 31 OSX)।

বাস্তবে এটি করুন (গল্ফ খারাপ অভ্যাসে পূর্ণ):

function merge(a1, a2) {
   var hash = {};
   var arr = [];
   for (var i = 0; i < a1.length; i++) {
      if (hash[a1[i]] !== true) {
        hash[a1[i]] = true;
        arr[arr.length] = a1[i];
      }
   }
   for (var i = 0; i < a2.length; i++) {
      if (hash[a2[i]] !== true) {
        hash[a2[i]] = true;
        arr[arr.length] = a2[i];
      }
   }
   return arr;
}
console.log(merge([1,2,3,4,5],[1,2,3,4,5,6]));

আমি কম্পিউটিং জটিলতায় দুর্দান্ত নই তবে আমি বিশ্বাস করি এটিই O(N)। যদি কেউ স্পষ্ট করতে পারে তবে পছন্দ করবেন।

সম্পাদনা করুন: এখানে এমন একটি সংস্করণ যা কোনও সংখ্যক অ্যারে নেয় এবং সেগুলিকে মার্জ করে।

function merge() {
   var args = arguments;
   var hash = {};
   var arr = [];
   for (var i = 0; i < args.length; i++) {
      for (var j = 0; j < args[i].length; j++) {
        if (hash[args[i][j]] !== true) {
          arr[arr.length] = args[i][j];
          hash[args[i][j]] = true;
        }
      }
    }
   return arr;
}
console.log(merge([1,2,3,4,5],[1,2,3,4,5,6],[1,2,3,4,5,6,7],[1,2,3,4,5,6,7,8]));

এটি প্রায় কয়েক সেকেন্ডের মধ্যে আমি যা করতে যাচ্ছিলাম ঠিক এটি :-( হ্যাঁ, সন্নিবেশ এবং অনুসন্ধানের জন্য হ্যাশ টেবিলগুলি অবিচ্ছিন্ন ধ্রুবক সময় সহ প্রয়োগ করা হয় (যা বিভিন্ন ভাষায় সাধারণ, বিশেষত জানেন না জেএস সম্পর্কে)।
এমিল ভিক্টো্রাম

@ এমিলভিক্রাস্টম এর জন্য ধন্যবাদ আমি বিশ্বাস করি জাভাস্ক্রিপ্ট এর আছে তবে এর কোনও প্রমাণ নেই। দ্রুত আঙুল থাকার জন্য ক্ষমা, মন্তব্য দিয়ে নিজেকে কমিয়ে দিয়েছেন: পি
জর্জ রিথ

এটি একটি দুর্দান্ত পন্থা। তবে, আপনি কি আপনার সুন্দর বিন্যাসিত সংস্করণ ছাড়াও একটি "কোড-গল্ফ" শৈলী সমাধান সরবরাহ করতে পারেন? একাধিক লোক এটিকে সঠিক পদ্ধতিরূপে ভেবে দেখেছে, সম্ভবত এখানে একটি টাই হবে O(N)
hkk

@ ক্লাউডকোডার 2000 ঠিক আছে, কোড-গল্ফ সংস্করণটি অনুশীলনে কম দক্ষ হওয়ার সম্ভাবনা রয়েছে বলে আমি একটি সম্পূর্ণ সংস্করণ মুদ্রণ করতে চেয়েছিলাম।
জর্জ রিথ

1
@ cloudcoder2000 এগুলি পুরোপুরি স্বতন্ত্র নয় তাই সবচেয়ে খারাপ পরিস্থিতিটি নয় O(A*B)(ব্যবহার করছেন না Nকারণ এটি বিভ্রান্তিকর)। এটি এমন হবে যে প্রতিটি ইনপুট অ্যারেতে (প্রতিটি A) আসলে একই পরিমাণে উপাদান ( B) থাকে তবে এটি আবার O(SUM(B) FOR ALL A)লিখতে পারেO(N)N সমস্ত অ্যারে ইনপুটগুলির উপাদানগুলির গণনা হিসাবে সংজ্ঞায়িত করার সময় ।
meiamsome

4

পাইথন 2.7, 38 টি অক্ষর

F=lambda x,y:{c:1 for c in x+y}.keys()

একটি ভাল হ্যাশ ফাংশন ধরে ধরে ও (এন) হওয়া উচিত।

ওয়াসির 8 টি চরিত্রের setপ্রয়োগ আরও ভাল, যদি আপনি ভাবেন না যে এটি নিয়ম লঙ্ঘন করে।


নিস! পাইথনে সংবেদনগুলি এত মার্জিত এবং শক্তিশালী হতে পারে।
ওআই

3

পিএইচপি, 69/42 68/41 অক্ষর

ফাংশন ঘোষণা সহ 68 টি অক্ষর:

function m($a,$b){return array_keys(array_flip($a)+array_flip($b));}

ফাংশন ঘোষণা সহ 41 টি অক্ষর অন্তর্ভুক্ত নয়:

array_keys(array_flip($a)+array_flip($b))

3

রুবিতে একটি উপায়

উপরে বর্ণিত বিধিগুলির মধ্যে রাখার জন্য, আমি জাভাস্ক্রিপ্ট সমাধান হিসাবে অনুরূপ কৌশল ব্যবহার করব এবং মধ্যস্থতাকারী হিসাবে একটি হ্যাশ ব্যবহার করব।

merged_arr = {}.tap { |hash| (arr1 + arr2).each { |el| hash[el] ||= el } }.keys

মূলত, এই সমস্ত পদক্ষেপগুলি আমি উপরের লাইনে যাচ্ছি।

  1. একটি চলক সংজ্ঞায়িত করুন merged_arr যাতে ফলাফলটি থাকবে
  2. অনন্য উপাদানগুলি রাখার জন্য একটি খালি, নামবিহীন হ্যাশটিকে মধ্যস্থতাকারী হিসাবে শুরু করুন
  3. Object#tapহ্যাশ পপুলেট করতে ব্যবহার করুন (যেমন হিসাবে উল্লেখ করা hashহয়েছেtap ব্লক) এবং এটি পরবর্তী পদ্ধতি chaining জন্য ফিরে
  4. সংঘবদ্ধ arr1এবংarr2 একটি একক, অপ্রক্রিয়াজাত অ্যারে
  5. প্রতিটি উপাদান জন্য elযোগসূত্র অ্যারের মধ্যে, মান করা elমধ্যে hash[el]যদি কোনো মূল্য hash[el]বর্তমানে বিদ্যমান। স্মৃতিচারণ এখানে (hash[el] ||= el ) হ'ল উপাদানগুলির স্বতন্ত্রতা নিশ্চিত করে।
  6. এখন জনবহুল হ্যাশের জন্য কীগুলি (বা মানগুলি যেমন সেগুলি হ'ল) ​​আনুন

এটি চালানো উচিত O(n) সময়ে । আমি কোনও ভুল বিবৃতি দিয়েছি কিনা বা দক্ষতা বা পাঠযোগ্যতার জন্য উপরের উত্তরটি উন্নত করতে পারি কিনা দয়া করে আমাকে জানান me

সম্ভাব্য উন্নতি

মেমোয়েজেশন ব্যবহার করা সম্ভবত অপ্রয়োজনীয় যে হ্যাশের কীগুলি অনন্য হতে চলেছে এবং মানগুলি অপ্রাসঙ্গিক, তাই এটি যথেষ্ট:

merged_arr = {}.tap { |hash| (arr1 + arr2).each { |el| hash[el] = 1 } }.keys

আমি সত্যিই ভালবাসি Object#tap, তবে আমরা একই ফলাফলটি ব্যবহার করে অর্জন করতে পারি Enumerable#reduce:

merged_arr = (arr1 + arr2).reduce({}) { |arr, val| arr[val] = 1; arr }.keys

আপনি এমনকি ব্যবহার করতে পারেন Enumberable#map:

merged_arr = Hash[(arr1 + arr2).map { |val| [val, 1] }].keys

আমি অনুশীলনে এটি কীভাবে করব

এতগুলি বলার পরেও , যদি আমাকে দুটি অ্যারে arr1এবং arr2এই জাতীয় ফলাফলের merged_arrএকচেটিয়া উপাদান থাকতে পারে এবং আমার যে কোনও রুবি পদ্ধতি ব্যবহার করতে পারে তবে আমাকে কেবল সেট ইউনিয়ন অপারেটরটি ব্যবহার করতে হবে যা এই সঠিক সমস্যাটি সমাধান করার উদ্দেশ্যে ব্যবহার করা হবে:

merged_arr = arr1 | arr2

উত্সটির তাত্ক্ষণিকভাবে Array#|, যদিও, এটি নিশ্চিত করে মনে হচ্ছে যে মধ্যস্থতাকারী হিসাবে একটি হ্যাশ ব্যবহার করা 2 টি অ্যারের মধ্যে একটি অনন্য মার্জ করার জন্য গ্রহণযোগ্য সমাধান বলে মনে হচ্ছে।


"স্বতন্ত্রতা সনাক্তকরণের জন্য স্ট্যান্ডার্ড লাইব্রেরির অ্যারে ফাংশনগুলি ব্যবহার করবেন না (যদিও অন্যান্য জিনিস স্ট্যান্ডার্ড লাইব্রেরি গঠন করে ঠিক আছে)"
জন ডিভোরাক

দ্বিতীয় উদাহরণে আমি কীভাবে এই বিধি লঙ্ঘন করছি? একটি হ্যাশে স্মৃতিচারণ করা হচ্ছে। এটিও কি অনুমোদিত নয়?
ওআই

2
Array.prototype.unique = function()
{
  var o = {},i = this.length
  while(i--)o[this[i]]=true
  return Object.keys(o)
}

একটি ক্রিয়া যা এন অ্যারে নেবে তা নিম্নলিখিত হতে পারে:

function m()
{
  var o={},a=arguments,c=a.length,i;
  while(c--){i=a[c].length;while(i--)o[a[c][i]] = true} 
  return Object.keys(o);
}

গল্ফড, আমি মনে করি এটি কাজ করা উচিত (১১7 টি)

function m(){var o={},a=arguments,c=a.length,i;while(c--){i=a[c].length;while(i--)o[a[c][i]]=1}return Object.keys(o)}

আপডেট আপনি যদি মূল টাইপটি রাখতে চান তবে আপনি পারেন

function m()
{
  var o={},a=arguments,c=a.length,f=[],g=[];
  while(c--)g.concat(a[c])
  c = g.length      
  while(c--){if(!o[g[c]]){o[g[c]]=1;f.push(g[c])}}
  return f
}

বা গল্ফড 149:

function m(){var o={},a=arguments,c=a.length,f=[],g=[];while(c--)g.concat(a[c]);c= g.length;while(c--){if(!o[g[c]]){o[g[c]]=1;f.push(g[c])}}return f}

এটি এখনও কিছু সন্দেহ ফেলতে পারে, আপনি যদি আলাদা করতে চান 123এবং '123', তবে এটি কার্যকর হবে না ..


উত্তরের জন্য ধন্যবাদ. এটি চিত্তাকর্ষকভাবে সংক্ষিপ্ত, তবে এটি কেবল অর্ধেক সমস্যাটি করে। আপনাকে সমাধানটিতে আসল মার্জিং অংশটিও অন্তর্ভুক্ত করতে হবে (এমনকি এটি মূল উদাহরণের মতো হলেও) এবং এটিকে সমস্ত একত্রে ফাংশনে রেখে দিতে হবে। এছাড়াও, আপনি কি এটির পাশাপাশি "গল্ফড" সংস্করণটি সরবরাহ করতে পারেন (যেমনটি আছে তেমন O(N))?
hkk

এটি সমস্ত সদস্যকে স্ট্রিংয়ে ফেলে। উদাহরণস্বরূপ m([1,2,3,4,5],[2,3,4,5,6],[2,3,4,5,6,7])হয়ে যায়["1", "2", "3", "4", "5", "6", "7"]
জর্জ রিথ

2

পাইথন, 46

def A(a,b):print[i for i in b if i not in a]+a

অথবা, সহজভাবে সেট অপারেশন ব্যবহার করে

অজগর, 8

set(a+b)

1
দুঃখিত, এটি পরিষ্কার ছিল না, সেট অপারেশনগুলিও প্রতারণামূলক is
hkk

আপনার 1 ম কোডটিতে নকল থাকবে যদি একটিতে ডুপ্লিকেট থাকে বা বিতে নকল থাকে এবং সেই উপাদানটি একটিতে নেই।
বেদন্ত কান্দোই

2

পার্ল

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

use 5.010;
sub unique{
    my%a=map{$_,1}@_;keys%a
}
my @a1 = (1, 2, 3, 4);
my @a2 = (3, 4, 5, 6);
say join " ", unique @a1, @a2;

আউটপুট (এলোমেলোতাও দেখায়):

/tmp $ perl unique.pl 
2 3 4 6 1 5
/tmp $ perl unique.pl 
5 4 6 2 1 3

2

ফরট্রান: 282 252 233 213

গল্ফ সংস্করণ:

function f(a,b,m,n) result(d);integer::m,n,a(m),b(n),c(m+n);integer,allocatable::d(:);j=m+1;c(1:m)=a(1:m);do i=1,n;if(.not.any(b(i)==c(1:m)))then;c(j)=b(i);j=j+1;endif;enddo;allocate(d(j-1));d=c(1:j-1);endfunction

যা কেবল অসীমরূপে আরও ভাল দেখায় না বরং প্রকৃতপক্ষে মানব-পঠনযোগ্য ফর্মের সাথে (এর গল্ফযুক্ত আকারে দীর্ঘ দীর্ঘ একটি লাইন) সংকলন করবে:

function f(a,b,m,n) result(d)
  integer::m,n,a(m),b(n),c(m+n)
  integer,allocatable::d(:)
  j=m+1;c(1:m)=a(1:m)
  do i=1,n
     if(.not.any(b(i)==c(1:m)))then
        c(j)=b(i);j=j+1
     endif
  enddo
  allocate(d(j-1))
  d=c(1:j-1)
end function

এটি O(n)অনুলিপি aকরার মতো হওয়া উচিত cএবং তারপরে প্রত্যেকটির bবিপরীতে পরীক্ষা করে দেখুন c। সর্বশেষ পদক্ষেপটি হ'ল আবর্জনা cনির্বিঘ্ন করা যেহেতু এটি অবিচ্ছিন্ন হয়ে পড়ে contain


2

গণিত 10 চর

Union[a,b]

উদাহরণ:

a={1,2,3,4,5};
b={1,2,3,4,5,6};
Union[a,b]

{1, 2, 3, 4, 5, 6}

গণিত 2 2 চর

Sort@Join[a, b] //. {a___, b_, b_, c___} :> {a, b, c}

8
আমি মনে করি এটি স্ট্যান্ডার্ড লাইব্রেরি অ্যারে পদ্ধতি ব্যবহারের বিভাগে চলে যাবে।
hkk

হাই @ ক্লাউড কোডার 2000 গণিতের ইউনিয়ন ব্যবহার করার জন্য কোনও নির্দিষ্ট গ্রন্থাগার কল করার দরকার নেই।
মুর্তা

5
আমার মতে, বিল্টিন ফাংশনটি ব্যবহার করা প্রশ্নটি যা করতে বলছে ঠিক তা করা প্রতারণা।
কনরাড বোরোস্কি

ঠিক আছে .. দ্বিতীয় কোডটি ইউনিয়ন ব্যবহার করবেন না।
মুর্তা

1
আমার ধারণা, Tally[Join[a, b]][[;; , 1]]বিটিডাব্লুও প্রতারণা করবে আপনি একক-বর্ণের ভেরিয়েবল ব্যবহার করে অক্ষর সংরক্ষণ করতে পারবেন।
ইয়ভেস ক্লেট

1

জাভাস্ক্রিপ্ট 86

গল্ফ সংস্করণ:

function m(a,b){var h={};return a.concat(b).filter(function(v){return h[v]?0:h[v]=1})}

পঠনযোগ্য সংস্করণ:

function merge(a, b) {
  var hash = {};
  return a.concat(b).filter(function (val) {
    return hash[val] ? 0 : hash[val] = 1;
  });
}

1
এটি মিথ্যা মানগুলিকে উপেক্ষা করে ... m([1,0,0,0,0],[0,1,0])রিটার্ন দেয় [1]
জর্জ রিথ

1
পরিবর্তন h[v]=vকরুন h[v]=1
জর্জ রিথ

ভাল দাগী @ জর্জিরিথ! আমরা 86 থেকে 84 এ :) গিয়েছিলাম
বার্ট্র্যান্ড

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


0

যদি আপনি কোনও জাভাস্ক্রিপ্ট-ভিত্তিক প্রয়োগের সন্ধান করছেন যা দক্ষতার জন্য কাঠামোর পিছনে অন্তর্নিহিত অবজেক্টগুলির উপর নির্ভর করে, আমি কেবল সেট ব্যবহার করব। সাধারণত কোনও প্রয়োগে, সেট অবজেক্ট সহজাতভাবে কিছু বাইনারি অনুসন্ধান সূচীকরণের সাথে সন্নিবেশের সময় অনন্য বস্তুগুলি পরিচালনা করে। আমি জাভাতে জানি এটি একটি log(n)অনুসন্ধান, বাইনারি অনুসন্ধান ব্যবহার করে যে কোনও সেটে একাধিকবার একক বস্তু থাকতে পারে না।


যদিও জাভাস্ক্রিপ্টের ক্ষেত্রেও এটি সত্য কিনা আমার কোনও ধারণা নেই, নীচের স্নিপেটের মতো সাধারণ কিছু n*log(n)বাস্তবায়নের জন্য যথেষ্ট হতে পারে :

জাভাস্ক্রিপ্ট , 61 বাইট

var s = new Set(a);      // Complexity O(a.length)
b.forEach(function(e) {  // Complexity O(b.length) * O(s.add())
  s.add(e);
}); 

এটি অনলাইন চেষ্টা করুন!


উপরের স্নিপেট ব্যবহার করে a = [1,2,3]এবং b = [1,2,3,4,5,6]তারপর s=[1,2,3,4,5,6]

আপনি কি জানেন জটিলতা তাহলে Set.add(Object)জাভাস্ক্রিপ্ট ফাংশন আমাকে কি জানেন, এই জটিলতা হয় n + n * f(O)যেখানে f(O)জটিলতা হয় s.add(O)


0

এপিএল (ডায়ালগ ইউনিকোড) , ও (এন), 28 বাইট

বেনামে টাসিট ইনফিক্স ফাংশন।

(⊢(/⍨)⍳∘≢=⍳⍨),

এটি অনলাইন চেষ্টা করুন!

, যুক্তি যুক্তিযুক্ত করা; চালু)

() এটিতে নিম্নলিখিত বেনামী ট্যাসিট ফাংশন প্রয়োগ করুন; হে (1)

   ⍳⍨ সূচকগুলি সেলফি (পুরো অ্যারেতে প্রতিটি উপাদানের প্রথম সংক্রমণের সূচকগুলি); চালু)

  = উপাদান দিয়ে উপাদানকে তুলনা করুন; চালু):

   ⍳∘≢ অ্যারের দৈর্ঘ্যের সূচকগুলি; চালু)

(/⍨) ফিল্টার করতে ব্যবহার করুন; চালু):

   অপরিবর্তিত যুক্তি; হে (1)

ও (এন + 1 + এন + এন + এন + এন + 1) = ও (এন)


-2

জাভাস্ক্রিপ্ট, 131 টি অক্ষর

var array1 = ["Vijendra","Singh"];   
var array2 = ["Singh", "Shakya"];     
result = Array.from(new Set([...array1, ...array2]))

4
পিপিসিজিতে আপনাকে স্বাগতম! দয়া করে এটি কোন ভাষাটি আমাদের বলুন এবং এটিকে আরও ভাল পঠনযোগ্যতার জন্য কোড হিসাবে ফর্ম্যাট করুন। (এটি চারটি স্পেস সহ কোড লাইনগুলি ইনডেন্ট করে কাজ করে)। এছাড়াও আপনার পদ্ধতির একটি ব্যাখ্যা প্রশংসা করা হবে।
লাইকনি

এটি কেবল একটি জাভাস্ক্রিপ্ট কোড।
deepak_pal

@ টেকদীপাক আপনি আপনার পোস্টে এ জাতীয় গুরুত্বপূর্ণ তথ্য যুক্ত করতে পারেন, এটিকে সঠিকভাবে ফর্ম্যাট করতে পারেন, সিনট্যাক্স হাইলাইটিং যুক্ত করতে এবং আপনার অ্যালগরিদমের জটিলতা সম্পর্কে আরও কিছু লিখতে পারেন, কারণ এটি দ্রুততম-অ্যালগরিদম । এটি যেমন দাঁড়িয়েছে, এই পোস্টটি মোটামুটি নিম্নমানের।
জোনাথন ফ্রেচ

-2

পিএইচপি প্রায় 28 টি অক্ষর [উদাহরণস্বরূপ অ্যারে ভেরিয়েবল এবং ফলাফল ভেরিয়েবলটি রেখে যায়]।

$ অ্যারে 1 = অ্যারে (1, 2, 3); $ অ্যারে 2 = অ্যারে (3, 4, 5);

$ ফলাফল = অ্যারে_মিটার ($ অ্যারে 1, $ অ্যারে 2);


প্রশ্ন থেকে: স্বতন্ত্রতা সনাক্তকরণ বা সেট / অ্যারে মার্জ করার জন্য স্ট্যান্ডার্ড লাইব্রেরির অ্যারে ফাংশনগুলি ব্যবহার করবেন না । অতিরিক্তভাবে এটি অ্যারে থেকে সদৃশগুলি সরাবে না
জো কিং

আমি মনে করি আপনি এই গুরুত্বপূর্ণ রেখাটিকে প্রশ্ন থেকে উপেক্ষা করেছেন: " স্বতন্ত্রতা সনাক্তকরণ বা সেট / অ্যারে মার্জ করার জন্য স্ট্যান্ডার্ড লাইব্রেরির অ্যারে ফাংশনগুলি ব্যবহার করবেন না "
পিটার টেলর

হ্যাঁ. এটাই সঠিক. আপনাকে বলছি যে নির্দেশিত জন্য ধন্যবাদ। সমালোচনা বিনীতভাবে গৃহীত হয়েছে।
এন্ড্রি

@ জো রাজা। আপনি "স্ট্যান্ডার্ড লাইব্রেরির ব্যবহার করবেন না ..." সম্পর্কে একেবারে ঠিক। বাকিটা ভুল। এটি সদৃশগুলি মুছে ফেলবে। php.net/manual/en/function.array- विसর.পিপি । আমি আপনাকে পিএইচপি এর ডকুমেন্টেশন পুরোপুরি পড়ার জন্য পরামর্শ দিচ্ছি। আমি 100% নিশ্চিত যে এটি কাজ করে। আপনার ঠিক কোনটি অ্যারেটিকে নকল হিসাবে বিবেচনা করবেন তা যত্নবান হওয়া দরকার। চিয়ার্স।
এন্ড্রি

1
আমি আক্ষরিকভাবে কোনও পরিবর্তন ছাড়াই আপনার জমা দেওয়ার কোডটি চালিয়েছি এবং আউটপুটটির নকল রয়েছে। দেখে মনে হচ্ছে আপনার ডকুমেন্টেশনটি পড়া উচিত, যথা, যদি অ্যারেতে সংখ্যাসূচক কী থাকে তবে পরবর্তী মানটি মূল মানটিকে ওভাররাইট করে না, তবে সংযুক্ত করা হবে
জো কিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.