ও (এন) সময়ে 5 টি পুনরাবৃত্তি মানগুলি কীভাবে খুঁজে পাবেন?


15

ধরুন আপনি আকার একটি অ্যারে আছে থেকে পূর্ণসংখ্যার ধারণকারী 1 থেকে এন - 5 , সমেত ঠিক পাঁচটি পুনরাবৃত্তি। আমাকে একটি অ্যালগরিদম প্রস্তাব করতে হবে যা ( এন ) সময়ে পুনরাবৃত্তি সংখ্যাগুলি খুঁজে পেতে পারে । আমার জীবনের জন্য আমি কিছু ভাবতে পারি না। আমার মনে হয় বাছাই করা, সর্বোপরি ( এন লগ এন ) হবে ? তারপরে অ্যারেটি অনুসরণ করা O ( n ) হবে , এর ফলে ( এন 2 লগ এন ) হবেn61n5O(n)O(nlogn)O(n)O(n2logn)। তবে, আমি লিঙ্কযুক্ত তালিকা, সারি, স্ট্যাক ইত্যাদির সাথে কিছু জটিল জিনিস দেখেছি বাছাই করা প্রয়োজনীয় কিনা তা আমি নিশ্চিত নই I'm


16
নয় হে ( 2 লগ এন ) । এটি( এন লগ এন ) । আপনি( n 2 লগ এন ) হ'ল যদি আপনি এন বার অনুসারে বাছাই করেন। O(nlogn)+O(n)O(n2logn)O(nlogn)O(n2logn)
8:37


1
@leftaroundabout এই আলগোরিদিম হয় যেখানে n হল অ্যারের আকার এবং ইনপুট সেট মাপ। যেহেতু k = n - c o n s t a n t এই অ্যালগরিদমগুলি ( n 2 ) এ কাজ করেO(kn)nkk=nconstantO(n2)
রোমান গ্রাফ

4
@ রোমানগ্রাফ যদি এটি প্রদর্শিত হয় তবে আসল পরিস্থিতিটি হ'ল: আলগোরিদিমগুলি , যেখানে k ডোমেনের আকার। সুতরাং, ওপি'র মতো সমস্যার জন্য, আপনি এন- সাইজড ডোমেনে যেমন একটি অ্যালগরিদম ব্যবহার করেন না বা সীমাহীন-আকারের ডোমেনে একটি traditionalতিহ্যবাহী ( এন লগ এন ) অ্যালগরিদম ব্যবহার করেন কিনা তা সমালোচনা হয়। বুদ্ধিও বোধ করে। O(logkn)knO(nlogn)

5
জন্য , শুধুমাত্র অনুমোদিত সংখ্যা 1 আপনার বর্ণনার দ্বারা। তবে তারপরে টি পাঁচবার নয়, ছয়বার পুনরাবৃত্তি করতে হবে। n=611
অ্যালেক্স রিঙ্কিং

উত্তর:


22

আপনি একটি অতিরিক্ত অ্যারে তৈরী করতে পারে আকারের এন । প্রাথমিকভাবে অ্যারের সমস্ত উপাদান 0 তে সেট করুন । তারপরে A ইনপুট অ্যারেটি লুপ করুন এবং বি [ [ i ] ] প্রতি i এর জন্য 1 দ্বারা বৃদ্ধি করুন । এর পরে আপনি কেবল অ্যারে বি : A এর উপর লুপটি পরীক্ষা করে দেখুন এবং যদি বি [ [ i ] ] > 1 হয় তবে [ i ] পুনরাবৃত্তি হয়। আপনি এটি ( এন ) এ সমাধান করুনBn0AB[A[i]]iBAB[A[i]]>1A[i]O(n)মেমরির ব্যয়ের সময় যা এবং কারণ আপনার পূর্ণসংখ্যা 1 এবং n - 5 এর মধ্যে হয়O(n)1n5


26

Fade2black এর উত্তরের সমাধান হ'ল মান, তবে এটি স্পেস ব্যবহার করে। আপনি এই উন্নত করতে পারেন হে ( 1 ) নিম্নরূপ স্পেস:O(n)O(1)

  1. অ্যারেটি । জন্য = 1 , ... , 5 , কম্পিউট σ = Σ এন আমি = 1 একজন [ আমি ] A[1],,A[n]d=1,,5σd=i=1nA[i]d
  2. গণনা (আপনি সুপরিচিত সূত্রগুলি ( 1 ) ) এর মধ্যে পরবর্তী অঙ্কটি গণনা করতে পারেন । মনে রাখবেন যে τ d = m d 1 + + m d 5 , যেখানে মি 1 , , মি 5 হ'ল পুনরাবৃত্তি সংখ্যা।τd=σdi=1n5idO(1)τd=m1d++m5dm1,,m5
  3. বহুপদী গণনা করুন । এই বহুপদী এর কোফিসিয়েন্টস এর প্রতিসম ফাংশন হয় মি 1 , ... , মি 5 যেখান থেকে নির্ণিত করা যেতে পারে τ 1 , ... , τ 5 মধ্যে হে ( 1 )P(t)=(tm1)(tm5)m1,,m5τ1,,τ5O(1)
  4. বহু n - 5 সম্ভাবনার চেষ্টা করে বহুভুজ এর সমস্ত শেকড় সন্ধান করুন ।P(t)n5

এই অ্যালগরিদমটি র‌্যাম মেশিনের মডেল ধরে নিয়েছে, যার মধ্যে -বিত্ত শব্দগুলিতে মৌলিক গাণিতিক ক্রিয়াকলাপগুলি ( 1 ) সময় নেয়।O(logn)O(1)


এই সমাধানটি তৈরি করার আরেকটি উপায় নিম্নলিখিত লাইনগুলির সাথে রয়েছে:

  1. হিসাব , এবং অনুমান Y 1 = মি 1 + + + + মি 5 সূত্র ব্যবহার করে Y 1 = এক্স 1 - Σ এন - 5 আমি = 1 আমিx1=i=1nA[i]y1=m1++m5y1=x1i=1n5i
  2. হিসাব মধ্যে হে ( ) সূত্র ব্যবহার করে এক্স 2 = ( একটি [ 1 ] ) একজন [ 2 ] + + ( একটি [ 1 ] + + একটি [ 2 ] ) [ 3 ] + ( [ 1)x2=1i<jA[i]A[j]O(n)
    x2=(A[1])A[2]+(A[1]+A[2])A[3]+(A[1]+A[2]+A[3])A[4]++(A[1]++A[n1])A[n].
  3. অনুমান সূত্র ব্যবহার করে Y 2 = এক্স 2 - Σ 1 আমি < এন - 5 আমি - ( এন - 5 Σ আমি = 1 আমি ) Y 1y2=1i<j5mimj
    y2=x21i<jn5ij(i=1n5i)y1.
  4. গণনা করুন এবং অনুরূপ লাইনের সাথে y 3 , y 4 , y 5 কে ছাড় করুন।x3,x4,x5y3,y4,y5
  5. এর মানগুলি পূর্ববর্তী সমাধান থেকে বহুবর্ষীয় পি ( টি ) এর সহগগুলি ( সাইন আপ করতে) হয় ।y1,,y5P(t)

dO(d2n)O(d2)O(dn)O(dlogn)O(d)O(logn)O(dn)O(d)


σdτdP(t)mid{1,2,3,4,5}

3
n11,,nf(m1)++f(m5)ffm1,,m5

1
O(d2)

1
d

1
(n5)#(n4)(n5)2

8

ndO(nlogd)O(d)


অ্যালগরিদম

[(1,n)]

তালিকাটি খালি না হওয়া পর্যন্ত নিম্নলিখিত পদক্ষেপগুলি পুনরাবৃত্তি করুন:

  1. (i,j)
  2. minmax
  3. min=max
  4. maxmin=ji
  5. কাছাকাছি সাবহারিকে পার্টিশন করুনmin+max2k
  6. (i,k)(k+1,j)

সময়ের জটিলতার কারসরি বিশ্লেষণ।

O(ji)

(i,j)(1,n)dlog2n+12dlog2n+12d

O(n)dO(nd)n

আরও কঠোরভাবে আবদ্ধ হওয়ার জন্য, সর্বাধিক ছড়িয়ে পড়া নকলের সবচেয়ে খারাপ পরিস্থিতি বিবেচনা করুন। স্বজ্ঞাতভাবে, অনুসন্ধানটি দুটি ধাপ নেয়, একটি যেখানে প্রতিবার পূর্ণ অ্যারে ট্র্যাভার করা হচ্ছে, ক্রমহ্রাসমান ছোট অংশে এবং অংশগুলি চেয়ে ছোটndlogdO(nlogd)O(n)


ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ. এখন আমি বুঝতে পেরেছি। খুব সুন্দর একটি অ্যালগরিদম!
ডিডাব্লিউ

5

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

O(nlogn)O(n2logn)O(f)O(g)O(f+g)=O(maxf,g)

fO(g)O(fg)

O(nlogn)O(n)O(nlogn+n)=O(nlogn)O(n)O(n2logn)


O(f+g)=O(maxf,g)fO(g)gO(f)O(2cn+nlogn)


3

স্টোর হিসাবে উপাদানগুলির ক্রম ব্যবহার করে বুলিয়ান অ্যারে প্রযুক্তির একটি স্পষ্ট ইন-প্লেস বৈকল্পিক রয়েছে (যেখানে arr[x] == x"পাওয়া" উপাদানগুলির জন্য)। পার্টিশনের বৈকল্পিকের বিপরীতে যা সাধারণ হিসাবে যুক্তিযুক্ত হতে পারে আমি যখন নিশ্চিত হতে পারি যে আপনার যখন আসলে এর মতো কিছু দরকার তখন এটি সহজ।

for idx from n-4 to n
    while arr[arr[idx]] != arr[idx]
        swap(arr[arr[idx]], arr[idx])

arr[idx]arr[idx]n


আপনাকে কিছুটা যুক্তি দিতে হবে যা অভ্যন্তরীণ whileলুপটি স্থির সময়ে গড়ে নিয়মিত চালিত হয়। অন্যথায়, এটি লিনিয়ার-টাইম অ্যালগরিদম নয়।
ডেভিড রিচার্বি

nnnd

ওহো, আমি কোনওভাবেই লক্ষ্য করিনি যে বাইরের লুপটি নিয়মিত সংখ্যক বার চলে! (অদলবদলের সংখ্যা সম্পর্কে আপনার নোটটি অন্তর্ভুক্ত করার জন্য সম্পাদিত এবং এটিও আমি আমার ডাউনওয়েটকে উল্টাতে পারি))
ডেভিড রিচার্বি

1

যোগফলগুলি থেকে থেকে আপনার মানগুলি বিয়োগ করুনi=1ni=(n1)n2

Θ(n)σ1

x1+x2+x3+x4+x5=σ1

মনে হয়, এটি কি ভাল, তাই না? এটিকে কীভাবে 5 টি পৃথক সংখ্যায় বিভক্ত করা যায় তা আপনি সম্ভবত বের করতে পারবেন না।

i=1ni2

x12+x22+x32+x42+x52=σ2

x

log(5n6)


@ ইউভালফিল্মাস কি একই সমাধানের প্রস্তাব দেয় না?
fade2black

@ ফেইড 2 ব্ল্যাক: ওহ, হ্যাঁ, এটি করে, দুঃখিত, আমি তার সমাধানটির প্রথম লাইনটি দেখেছি।
einpoklum


0

এতে অ্যারের মানচিত্র তৈরি করুন 1 << A[i]এবং তারপরে একসাথে সমস্ত কিছু এক্সওর করুন। আপনার সদৃশগুলি এমন নম্বর হবে যেখানে সংশ্লিষ্ট বিট বন্ধ রয়েছে।


পাঁচটি সদৃশ আছে, তাই কিছু ক্ষেত্রে জোর ট্রিক ভাঙবে না।
অশুভ

1
O(n2)nO(n)O(n2)

O(1)O(n)

1
nO(n)O(1)n/64nnn/64O(n)O(1)

nnO(kn)knk=64O(1)O(k)O(n)O(kn)k

-2
DATA=[1,2,2,2,2,2]

from collections import defaultdict

collated=defaultdict(list):
for item in DATA:
    collated[item].append(item)
    if len(collated) == 5:
        return item.

# n time

4
সাইটে স্বাগতম। আমরা একটি কম্পিউটার বিজ্ঞান সাইট, সুতরাং আমরা একটি অ্যালগরিদম এবং ব্যাখ্যা খুঁজছি, কোড ডাম্পের জন্য নয় যা নির্দিষ্ট ভাষা এবং এর লাইব্রেরিগুলির বোঝার প্রয়োজন। বিশেষত, আপনার দাবি যে এই কোডটি রৈখিক সময়ে চলে তা ধরে নিলে collated[item].append(item)ধ্রুব সময়ে চলে। এটা কি সত্যি?
ডেভিড রিচার্বি

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