এই ফাংশন ও (ন ^ 2) এর জন্য সবচেয়ে খারাপ পরিস্থিতি কেন?


44

আমি কীভাবে একটি স্বেচ্ছাসেবী ফাংশনের জন্য বিগও স্বরলিপি গণনা করব তা শেখানোর চেষ্টা করছি। আমি এই ফাংশনটি একটি পাঠ্যপুস্তকে পেয়েছি। বইটি দৃser়ভাবে জানিয়েছে যে ফাংশনটি হ'ল (এন 2 )। এটি কেন এটির একটি ব্যাখ্যা দেয় তবে আমি অনুসরণ করার জন্য লড়াই করছি। আমি ভাবছি যে কেউ যদি কেন এমন হয় এর পিছনে অঙ্কটি আমাকে দেখাতে সক্ষম হয়। মূলত, আমি বুঝতে পারি যে এটি হে (এন 3 ) এর চেয়ে কম কিছু , তবে আমি স্বাধীনভাবে ও (এন 2 ) এ অবতরণ করতে পারিনি

ধরা যাক আমাদের A, B, এবং C. এর তিনটি সংখ্যার ক্রমিক দেওয়া হয়েছে আমরা ধরে নেব যে কোনও স্বতন্ত্র অনুক্রমে সদৃশ মান নেই, তবে এমন কিছু সংখ্যার হতে পারে যা অনুক্রমের দুটি বা তিনটিতে থাকে। ত্রি-উপায়ে সেট বিচ্ছিন্নতা সমস্যাটি নির্ধারণ করা হয় যে তিনটি অনুক্রমের ছেদটি ফাঁকা আছে, যথা, x ∈ A, x ∈ B, এবং x ∈ C এর মতো কোনও এলিমেন্ট নেই that

ঘটনাচক্রে, এটি আমার কোনও হোম ওয়ার্কের সমস্যা নয় - এই জাহাজটি বহু বছর আগে যাত্রা করেছিল:), আমি আরও স্মার্ট হওয়ার চেষ্টা করছি।

def disjoint(A, B, C):
        """Return True if there is no element common to all three lists."""  
        for a in A:
            for b in B:
                if a == b: # only check C if we found match from A and B
                   for c in C:
                       if a == c # (and thus a == b == c)
                           return False # we found a common value
        return True # if we reach this, sets are disjoint

[সম্পাদনা] পাঠ্যপুস্তক অনুসারে:

উন্নত সংস্করণে, আমরা ভাগ্যবান হলে কেবল সময় সাশ্রয় করি তা নয়। আমরা দাবি করি যে, বিজয়ী হওয়ার পক্ষে সবচেয়ে খারাপ সময়টি ও (এন 2 )।

বইটির ব্যাখ্যা, যা আমি অনুসরণ করতে সংগ্রাম করি, তা হ'ল:

সামগ্রিক চলমান সময়ের জন্য অ্যাকাউন্ট করতে, আমরা কোডের প্রতিটি লাইন কার্যকর করতে ব্যয় করা সময়টি পরীক্ষা করি। এ জন্য লুপ ওভার পরিচালনার জন্য ও (এন) সময় প্রয়োজন। লুপ ওভার বি এর পরিচালনা মোট ও (এন 2 ) সময়ের জন্য অ্যাকাউন্টগুলি , যেহেতু সেই লুপটি এন বিভিন্ন সময় কার্যকর করা হয়। পরীক্ষার a == খ ও (এন 2 ) বার মূল্যায়ন করা হয় । ব্যয় করা বাকি সময় নির্ভর করে কত মিলের (ক, খ) জোড়া বিদ্যমান pairs যেমনটি আমরা লক্ষ করেছি, সর্বাধিক n এর মতো জোড়া রয়েছে, এবং তাই C এর উপর লুপের পরিচালনা এবং সেই লুপের শরীরে থাকা আদেশগুলি সর্বাধিক ও (এন 2 ) সময় ব্যবহার করে। মোট সময় ব্যয় করা হয়েছে ও (এন 2 )।

(এবং যথাযথ ক্রেডিট দেওয়ার জন্য ...) বইটি হ'ল মাইকেল টি। গুডরিচ এট-র পাইথনে ডেটা স্ট্রাকচারস এবং অ্যালগরিদম। সমস্ত, উইলে পাবলিশিং, পৃষ্ঠা। 135

[সম্পাদনা] একটি ন্যায্যতা; নীচে অপ্টিমাইজেশনের আগে কোডটি দেওয়া হয়েছে:

def disjoint1(A, B, C):
    """Return True if there is no element common to all three lists."""
       for a in A:
           for b in B:
               for c in C:
                   if a == b == c:
                        return False # we found a common value
return True # if we reach this, sets are disjoint

উপরের অংশে, আপনি পরিষ্কার দেখতে পাচ্ছেন যে এটি হে (এন 3 ), কারণ প্রতিটি লুপ অবশ্যই তার সম্পূর্ণরূপে চালানো উচিত। বইটি দৃsert়ভাবে দাবি করবে যে সরল উদাহরণে (প্রথম দেওয়া) তৃতীয় লুপটি কেবলমাত্র O (n 2 ) এর জটিলতা, সুতরাং জটিলতা সমীকরণটি কে + ও (এন 2 ) + ও (এন 2 ) হিসাবে যায় যা শেষ পর্যন্ত ফল দেয় ও (এন 2 )

যদিও আমি প্রমাণ করতে পারি না এটি কেস (এইভাবে প্রশ্ন), পাঠক একমত হতে পারেন যে সরলিকৃত অ্যালগরিদমের জটিলতা মূলের চেয়ে কমপক্ষে কম।

[সম্পাদনা] এবং সরলিকৃত সংস্করণটি চতুর্ভুজ প্রমাণ করার জন্য:

if __name__ == '__main__':
    for c in [100, 200, 300, 400, 500]:
        l1, l2, l3 = get_random(c), get_random(c), get_random(c)
        start = time.time()
        disjoint1(l1, l2, l3)
        print(time.time() - start)
        start = time.time()
        disjoint2(l1, l2, l3)
        print(time.time() - start)

উৎপাদনের:

0.02684807777404785
0.00019478797912597656
0.19134306907653809
0.0007600784301757812
0.6405444145202637
0.0018095970153808594
1.4873297214508057
0.003167390823364258
2.953308343887329
0.004908084869384766

দ্বিতীয় পার্থক্য সমান হওয়ায় সরলীকৃত কার্যটি প্রকৃতপক্ষে চতুর্ভুজ:

এখানে চিত্র বর্ণনা লিখুন

[সম্পাদনা] এবং আরও প্রমাণ:

যদি আমি সবচেয়ে খারাপ ক্ষেত্রে ধরে নিই (A = B! = C),

if __name__ == '__main__':
    for c in [10, 20, 30, 40, 50]:
        l1, l2, l3 = range(0, c), range(0,c), range(5*c, 6*c)
        its1 = disjoint1(l1, l2, l3)
        its2 = disjoint2(l1, l2, l3)
        print(f"iterations1 = {its1}")
        print(f"iterations2 = {its2}")
        disjoint2(l1, l2, l3)

উৎপাদনের:

iterations1 = 1000
iterations2 = 100
iterations1 = 8000
iterations2 = 400
iterations1 = 27000
iterations2 = 900
iterations1 = 64000
iterations2 = 1600
iterations1 = 125000
iterations2 = 2500

দ্বিতীয় পার্থক্য পরীক্ষা ব্যবহার করে, সবচেয়ে খারাপ ক্ষেত্রে ফলাফল হুবহু চতুর্ভুজ।

এখানে চিত্র বর্ণনা লিখুন


6
হয় বইটি ভুল বা আপনার প্রতিলিপি।
candied_orange

6
নাঃ। যতই ভাল উদ্ধৃতি দেওয়া হোক না কেন ভুল ভুল। হয় ব্যাখ্যা করুন যে বড় ও বিশ্লেষণ করার সময় আমরা কেন এগুলি সবচেয়ে খারাপ পথে যেতে পারি তা সহজেই ধরে নিতে পারি না বা আপনি যে ফলাফল পেয়ে যাচ্ছেন তা গ্রহণ করে।
candied_orange

8
@candied_orange; আমি আমার যোগ্যতার সেরাটিতে আরও কিছু ন্যায়সঙ্গততা যুক্ত করেছি - আমার দৃ strong় মামলা নয়। আমি আপনাকে জিজ্ঞাসা করব যে আপনি আবার সম্ভাবনার পক্ষে অনুমতি দিন যাতে আপনি সত্যই ভুল হতে পারেন। আপনি আপনার বক্তব্য তৈরি করেছেন, যথাযথভাবে গ্রহণ করেছেন।
স্টিভজে

8
এলোমেলো সংখ্যা আপনার সবচেয়ে খারাপ পরিস্থিতি নয়। এটি কিছুই প্রমাণ করে না।
টেলাস্টিন

7
Ahh। ঠিক আছে. "কোনও অনুক্রমের সদৃশ মান নেই" সবচেয়ে খারাপ ক্ষেত্রে পরিবর্তন
ঘটায়

উত্তর:


63

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

বইটি যুক্তি দেয় যে জটিলতা O (n²) কারণ if a == bশাখাটি বেশিরভাগ n সময়ে প্রবেশ করা হয় । এটি স্পষ্ট নয় কারণ লুপগুলি এখনও নেস্টেড হিসাবে লেখা রয়েছে। আমরা এটি নিষ্কাশন করলে এটি আরও সুস্পষ্ট:

def disjoint(A, B, C):
  AB = (a
        for a in A
        for b in B
        if a == b)
  ABC = (a
         for a in AB
         for c in C
         if a == c)
  for a in ABC:
    return False
  return True

এই রূপটি মধ্যবর্তী ফলাফলগুলি উপস্থাপন করতে জেনারেটর ব্যবহার করে।

  • জেনারেটরে AB, আমাদের বেশিরভাগ এন উপাদান থাকবে (গ্যারান্টির কারণে যে ইনপুট তালিকাগুলিতে সদৃশ থাকবে না), এবং জেনারেটর তৈরি করতে ও (N²) জটিলতা লাগে।
  • জেনারেটরের উত্পাদন ABCজেনারেটরের উপর একটি লুপ জড়িত ABদৈর্ঘ্যের এন এবং উপর Cদৈর্ঘ্যের এন , যাতে তার আলগোরিদিমিক জটিলতা হয় হে (ছিল n ²) হিসাবে ভাল।
  • এই ক্রিয়াকলাপগুলি নেস্টেড হয় না তবে স্বতন্ত্রভাবে ঘটে থাকে, যাতে মোট জটিলতা O (n² + n²) = O (n²) হয়।

যেহেতু ইনপুট তালিকার জোড়গুলি ক্রমানুসারে চেক করা যায়, এটি অনুসরণ করে যে কোনও সংখ্যক তালিকাকে বিরতি দেওয়া হয়েছে কিনা তা নির্ধারণ করে ও (এন) সময়ে করা যেতে পারে।

এই বিশ্লেষণটি অনর্থক কারণ এটি ধরে নিয়েছে যে সমস্ত তালিকার সমান দৈর্ঘ্য রয়েছে। আমরা আরও সুনির্দিষ্টভাবে বলতে পারি ABযার সর্বাধিক দৈর্ঘ্য ন্যূনতম (| এ |, | বি |) রয়েছে এবং এটি উত্পাদন করার ক্ষেত্রে জটিলতা রয়েছে O (| A | B | B |)। উত্পাদনের ABCজটিলতা রয়েছে ও (মিনিট (| এ |, বি |) • | সি |)। মোট জটিলতা তারপরে নির্ভর করে কীভাবে ইনপুট তালিকা অর্ডার করা হয়। সাথে | এ | ≤ | বি | ≤ | সি | আমরা ও এর সর্বনিম্নতম জটিলতা পেয়েছি (| এ | • | সি |)।

নোট করুন যে ইনপুট পাত্রে সমস্ত উপাদানগুলির পুনরাবৃত্তি না হয়ে দ্রুত সদস্যপদ পরীক্ষার জন্য অনুমতি দিলে দক্ষতার জয় সম্ভব হয় are এটি যখন বাছাই করা হয় তখন এটি হতে পারে যাতে বাইনারি অনুসন্ধান করা যায়, বা যখন তারা হ্যাশ সেট হয়। সুস্পষ্ট নেস্টেড লুপগুলি ছাড়া, এটি দেখতে দেখতে এমনটি হবে:

for a in A:
  if a in B:  # might implicitly loop
    if a in C:  # might implicitly loop
      return False
return True

বা জেনারেটর-ভিত্তিক সংস্করণে:

AB = (a for a in A if a in B)
ABC = (a for a in AB if a in C)
for a in ABC:
  return False
return True

4
এটি কেবলমাত্র যদি আমরা এই যাদুকরী nপরিবর্তনশীলটিকে বাতিল করে দিয়েছি এবং খেলায় আসল পরিবর্তনশীলগুলি সম্পর্কে কথা বলি তবে এটি এত বেশি পরিষ্কার হবে ।
আলেকজান্ডার

15
@ কোড_ড্রেড না এটি নয়, কোডের সাথে এর সরাসরি সংযোগ নেই। এটি এমন একটি বিমূর্ততা যা কল্পনা করে len(a) == len(b) == len(c)যা সময় জটিলতার বিশ্লেষণের প্রসঙ্গে সত্য হলেও কথোপকথনকে বিভ্রান্ত করে।
আলেকজান্ডার

10
সম্ভবত বলছেন যে ওপির কোডে সবচেয়ে খারাপ কেস জটিলতা রয়েছে ও (| এ | • | বি | + মিনিট (| এ |, | বি |) •? সি?) বোঝাপড়াটি চালু করার জন্য যথেষ্ট?
পাবলো এইচ

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

4
"দ্রষ্টব্য যে সময়গুলি অ্যালগরিদমিক জটিলতার কোনও কার্যকর সূচক নয়" "আমি মনে করি এটি" কার্যকর "না হয়ে" কঠোর "বা" নির্ভরযোগ্য "বললে এটি আরও সঠিক হবে।
সংগৃহীত

7

মনে রাখবেন যে তালিকা অনুসারে গৃহীত প্রতিটি তালিকায় যদি সমস্ত উপাদান পৃথক হয়, তবে আপনি A এর প্রতিটি উপাদানের জন্য সি একবারে পুনরাবৃত্তি করতে পারেন (যদি বি তে উপাদান সমান হয়)। সুতরাং অভ্যন্তরীণ লুপটি মোট (হে n 2) is


3

আমরা ধরে নেব যে কোনও স্বতন্ত্র অনুক্রমে সদৃশ নেই।

তথ্য একটি খুব গুরুত্বপূর্ণ টুকরা।

অন্যথায়, অনুকূলিত সংস্করণটির সবচেয়ে খারাপ অবস্থাটি এখনও (O O) হবে, যখন A এবং B সমান হয় এবং এতে একটি উপাদান নকল হয়:

i = 0
def disjoint(A, B, C):
    global i
    for a in A:
        for b in B:
            if a == b:
                for c in C:
                    i+=1
                    print(i)
                    if a == c:
                        return False 
    return True 

print(disjoint([1] * 10, [1] * 10, [2] * 10))

কোন ফলাফল:

...
...
...
993
994
995
996
997
998
999
1000
True

সুতরাং মূলত, লেখকরা ধরে নিয়েছেন যে ও (n³) সবচেয়ে খারাপ ঘটনাটি ঘটবে না (কেন?), এবং "প্রমাণ" করুন যে সবচেয়ে খারাপ পরিস্থিতি এখন O (n²)।

আসল অপ্টিমাইজেশন হ'ল ও (1) এ অন্তর্ভুক্তি পরীক্ষা করার জন্য সেট বা ডিকট ব্যবহার করা। সেক্ষেত্রে, disjointযে ইনপুট জন্য হে (ঢ) হতে হবে।


আপনার শেষ মন্তব্যটি বেশ আকর্ষণীয়, এটি ভেবে দেখেনি। আপনি সিরিজের তিনটি ও (এন) ক্রিয়াকলাপ করতে সক্ষম হওয়ায় তা কি আপনি পরামর্শ দিচ্ছেন?
স্টিভজে

2
আপনি যদি ইনপুট উপাদান হিসাবে কমপক্ষে একটি বালতি দিয়ে নিখুঁত হ্যাশ না পান তবে আপনি ও (1) এ অন্তর্ভুক্তি পরীক্ষা করতে পারবেন না। বাছাই করা সেটটিতে সাধারণত ও (লগ এন) লুক থাকে। যদি না আপনি গড় ব্যয় নিয়ে কথা না বলছেন তবে প্রশ্নটি কী তা নয়। তবুও, ভারসাম্যযুক্ত বাইনারি সেট হার্ড হে (এন লগ এন) পাওয়ার পক্ষে নগণ্য।
জান দর্নিয়াক

@ জনডর্নিয়াক: দুর্দান্ত মন্তব্য, ধন্যবাদ। এখন এটি কিছুটা বিশ্রী: key in dictলেখকদের মতো আমিও সবচেয়ে খারাপ পরিস্থিতিকে উপেক্ষা করেছি। : - / আমার প্রতিরক্ষা হিসাবে, আমি মনে করি কেবল নকল মানগুলির সাথে একটি তালিকা তৈরি করার চেয়ে nকী এবং nহ্যাশের সংঘর্ষের সাথে ডিক খুঁজে পাওয়া আরও শক্ত much nএবং একটি সেট বা ডিক দিয়ে, সত্যিই কোনও সদৃশ মান হতে পারে না। সুতরাং সবচেয়ে খারাপ-সবচেয়ে খারাপ কেসটি আসলে ও (এন) ² আমি আমার উত্তর আপডেট করব।
এরিক ডুমিনিল

2
@ জনডর্নিয়াক আমার মনে হয় সি ++ এর লাল-কালো গাছগুলির বিপরীতে অজগরটিতে সেট এবং ডিক্টগুলি হ্যাশ টেবিল। সুতরাং নিখুঁত নিকৃষ্টতম পরিস্থিতি আরও খারাপ, অনুসন্ধানের জন্য 0 (এন) অবধি, তবে গড় কেস হে (1)। সি ++ wiki.python.org/moin/TimeComplexity এর জন্য ও (লগ এন) এর বিপরীতে । প্রদত্ত যে এটি একটি অজগর প্রশ্ন, এবং যে সমস্যাটির ডোমেন গড় ক্ষেত্রে পারফরম্যান্সের উচ্চ সম্ভাবনার দিকে পরিচালিত করে, আমি মনে করি না যে ও (1) দাবিটি একটি দরিদ্র।
বাল্ড্রিক ১৮

3
আমি মনে করি আমি এখানে সমস্যাটি দেখছি: যখন লেখকরা "আমরা ধরে নেব যে কোনও স্বতন্ত্র অনুক্রমে সদৃশ মান নেই", যা প্রশ্নের উত্তর দেওয়ার কোনও পদক্ষেপ নয়; এটি বরং একটি পূর্বশর্ত, যার অধীনে প্রশ্নটি সম্বোধন করা হচ্ছে। শিক্ষাগত উদ্দেশ্যগুলির জন্য, এটি একটি উদ্বেগজনক সমস্যাকে এমন এক রূপান্তরিত করে যা বিগ-ও সম্পর্কে জনগণের অন্তর্দৃষ্টিগুলিকে চ্যালেঞ্জ করে - এবং এটি সফল হয়েছে বলে মনে হয়, যারা দৃ strongly়ভাবে জোর দিয়েছিলেন যে (ও) অবশ্যই ভুল হতে পারে। .. এছাড়াও, এটি এখানে চলার সময়, একটি উদাহরণে পদক্ষেপের সংখ্যা গণনা কোনও ব্যাখ্যা নয়।
এসডেনহ্যাম

3

আপনার বই ব্যবহার করে এমন পদগুলিতে জিনিসগুলি রাখার জন্য:

আমার মনে হয় আপনার বুঝতে অসুবিধা নেই যে চেকটি a == bসবচেয়ে খারাপ ক্ষেত্রে (O 2 )।

তৃতীয় লুপের জন্য এখন সবচেয়ে খারাপ অবস্থায় প্রতিটি aইন- Aএর একটি মিল রয়েছে Bতাই তৃতীয় লুপটি প্রতিবার ডাকা হবে। সেই ক্ষেত্রে যেখানে aঅস্তিত্ব নেই C, এটি পুরো Cসেটটি দিয়ে চলবে ।

অন্য কথায়, এটি প্রতিবারের জন্য a1 বার এবং প্রত্যেকের জন্য 1 বার c, বা n * n। ও (এন 2 )

সুতরাং ও (এন 2 ) + ও (এন 2 ) রয়েছে যা আপনার বইটি নির্দেশ করে।


0

অনুকূলিত পদ্ধতির কৌশলটি হল কোণগুলি কাটা cut শুধুমাত্র ক এবং খ মেলে তবে সি'র মূল্য দেওয়া হবে। এখন আপনি বুঝতে পারেন যে সবচেয়ে খারাপ ক্ষেত্রে আপনাকে এখনও প্রতিটি সি এর মূল্যায়ন করতে হবে। এটি সত্য নয়।

আপনি সম্ভবত মনে করেন যে সবচেয়ে খারাপ পরিস্থিতি হ'ল প্রতিটি চেক == b এর ফলাফল সি ওভারে চলে যায় কারণ প্রতিটি চেক == খের জন্য একটি ম্যাচ ফেরায়। তবে এটি সম্ভব নয় কারণ এর শর্তগুলি পরস্পরবিরোধী। এটি কাজ করার জন্য আপনার একই A এবং B এর সমান মান থাকতে হবে। এগুলিকে আলাদাভাবে অর্ডার দেওয়া হতে পারে তবে এ এর ​​প্রতিটি মান বিতে একটি মিলের মান থাকতে হবে would

এখন এখানে লাথি। এই মানগুলি সংগঠিত করার কোনও উপায় নেই যাতে প্রতিটির জন্য আপনাকে নিজের মিল খুঁজে পাওয়ার আগে সমস্ত খ এর মূল্যায়ন করতে হবে।

A: 1 2 3 4 5
B: 1 2 3 4 5

এটি তাত্ক্ষণিকভাবে করা হবে কারণ মিল দুটি 1 টিই দুটি সিরিজের প্রথম উপাদান। কি সম্পর্কে

A: 1 2 3 4 5
B: 5 4 3 2 1

এটি এ প্রথম রানের জন্য কাজ করবে: বিতে কেবলমাত্র শেষ উপাদানটি হিট দেয়। তবে A এর উপরের পরবর্তী পুনরাবৃত্তিটি ইতিমধ্যে দ্রুত হতে হবে কারণ বি এর শেষ স্পটটি ইতিমধ্যে 1 দ্বারা দখল করা হয়েছে And এবং প্রকৃতপক্ষে এই বারে কেবল চারটি পুনরাবৃত্তি লাগবে। এবং এটি প্রতিটি পরবর্তী পুনরাবৃত্তির সাথে কিছুটা ভাল হয়।

এখন আমি কোনও গণিতবিদ নই তাই আমি প্রমাণ করতে পারি না যে এটি ও (এন 2) এ শেষ হবে তবে আমি এটি আমার ক্লোজে অনুভব করতে পারি।


1
উপাদানগুলির ক্রম এখানে কোনও ভূমিকা পালন করে না। উল্লেখযোগ্য প্রয়োজনীয়তা হ'ল কোনও নকল নেই; তারপরে যুক্তিটি হ'ল লুপগুলি দুটি পৃথক O(n^2)লুপে রূপান্তর করা যায় ; যা সামগ্রিকভাবে দেয় O(n^2)(ধ্রুবকগুলি এড়ানো হয়)।
এনিও

@ যেহেতু, আসলে উপাদানগুলির ক্রম কোনও ব্যাপার না। যা আমি ঠিক তাই প্রদর্শন করছি।
মার্টিন মাট

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

-1

প্রথমে হতবাক হয়েছিল, তবে আমনের উত্তরটি সত্যিই সহায়ক। আমি দেখতে চাই যে আমি সত্যিই সংক্ষিপ্ত সংস্করণটি করতে পারি কিনা:

একটি নির্দিষ্ট মান জন্য aমধ্যে A, ফাংশন তুলনা aপ্রতি সম্ভব সঙ্গে bমধ্যে B, এবং এটি শুধুমাত্র একবার এটা আছে। সুতরাং একটি প্রদত্ত জন্য aএটি a == bঠিক nসময় সম্পাদন করে ।

Bতাই একটি প্রদত্ত কোন সদৃশ ধারণ করে না (তালিকার একটিও না), aসেখানে থাকবে সবচেয়ে এক ম্যাচ। (এটাই চাবি)। যেখানে একটি ম্যাচ আছে, aপ্রতিটি সম্ভাবনার সাথে তুলনা করা হবে c, যার অর্থ a == cহ'ল এন বার করা হয়। যেখানে কোনও মিল নেই, কিছুই a == cহয় না।

সুতরাং একটি প্রদত্ত জন্য a, হয় হয় nতুলনা, বা 2nতুলনা। এটি প্রতিটি aক্ষেত্রেই ঘটে তাই সর্বোত্তম সম্ভাব্য কেসটি (n²) এবং সবচেয়ে খারাপটি (2n²)।

TLDR: প্রতিটি মান aপ্রতিটি মান বিরুদ্ধে তুলনা করা হয় bএবং প্রতিটি মান বিরুদ্ধে c, কিন্তু প্রতিটি বিরুদ্ধে সমন্বয় এর bএবং c। দুটি ইস্যু একসাথে যুক্ত হয়েছে, তবে তারা গুণবে না।


-3

এভাবে চিন্তা করুন, কিছু সংখ্যা দুটি বা তিনটি ক্রমের মধ্যে থাকতে পারে তবে এর গড় ক্ষেত্রে হ'ল সেট এ-এর প্রতিটি উপাদানগুলির জন্য খ-এ বিস্তৃত অনুসন্ধান করা হয়। এটি গ্যারান্টিযুক্ত যে সেট এ এর ​​প্রতিটি উপাদান পুনরাবৃত্তি হবে তবে বোঝানো হয়েছে যে সেট বি এর অর্ধেকেরও কম উপাদানগুলি পুনরাবৃত্তি হবে।

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


4
বইটি পুরোপুরি পরিষ্কার যে ও (এন 2) সবচেয়ে খারাপ ক্ষেত্রে, গড়ের ক্ষেত্রে নয়।
স্টিভজে

বড় ও স্বরলিপি হিসাবে একটি ফাংশন বর্ণনা সাধারণত ফাংশন এর বৃদ্ধি হার উপরের একটি আবদ্ধ প্রদান করে। অ্যাসিপোটোটিক বৃদ্ধির হারের অন্যান্য ধরণের সীমা বর্ণনা করতে o, Ω, ω, এবং ols চিহ্নগুলি ব্যবহার করে বড় হে সংকেতের সাথে যুক্ত বিভিন্ন সম্পর্কিত স্বরলিপি রয়েছে। উইকিপিডিয়া - বড় ও
candied_orange range

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