রৈখিক সময়ে কোনও সুপারস্টারকে কীভাবে খুঁজে পাবেন?


28

নির্দেশিত গ্রাফগুলি বিবেচনা করুন। আমরা কোনও নোড সুপারস্টার বলি এবং যদি কেবল অন্য কোনও নোড এটি থেকে না পৌঁছতে পারে তবে অন্য সমস্ত নোডের প্রান্ত থাকে । আনুষ্ঠানিকভাবে:v v

ভি superstar :⟺outdeg(v)=0indeg(v)=n1

সহ গ্রাফের নোডের সংখ্যা। উদাহরণস্বরূপ, নীচের গ্রাফে, পূর্ণ নাড একটি সুপারস্টার (এবং অন্যান্য নোডগুলি নয়)।n

একজন সুপারস্টার
[ উত্স ]

আপনি কীভাবে সমস্ত সুপারস্টারকে directed সময়ে নির্দেশিত গ্রাফগুলিতে সনাক্ত করতে পারেন ? সাধারণ প্রার্থীদের থেকে উপযুক্ত গ্রাফের প্রতিনিধিত্ব করা যেতে পারে ; দয়া করে এমন উপস্থাপনা ব্যবহার করা থেকে বিরত থাকুন যা সমস্যার জটিলতা প্রিপ্রোসেসিংয়ে নিয়ে যায়।O(n)

ঘনত্ব সম্পর্কিত কোনও অনুমান করা যায় না। আমরা গ্রাফ একটি সুপারস্টার ধারণ করে না; যদি কিছুই না থাকে তবে অ্যালগরিদমের এটি স্বীকৃতি দেওয়া উচিত।

স্বরলিপি : একটি নোডের বহির্গামী প্রান্তগুলির সংখ্যা, আগত প্রান্তগুলির জন্য অনুরূপ।outdegindeg


1
আমরা কি অনুমতি যেখানে প্রান্তগুলি রয়েছে, অথবা আমাদের প্রতিটি শীর্ষবিন্দুতে কেবল প্রান্তগুলি দেখার দরকার আছে ? O(n+k)kO(1)
কেভিন

@ কেভিন না, এর একটি কঠোর প্রয়োজন। দ্বিতীয় প্রশ্নটি সম্পর্কে: আমি এও প্রয়োজন যে জরুরী জানি না, তবে আপনি অবশ্যই আরও কিছু করতে পারবেন না। O(n)
রাফেল

তুমি কি এর উত্তর জানো? এটি কি ? O(n)
ডেভ ক্লার্ক

@ ডেভ ক্লার্ক: হ্যাঁ, এবং হ্যাঁ
রাফেল

আপনার প্রতিনিধিত্ব আরও সীমাবদ্ধ করা উচিত; একটি লিনিয়ার অ্যালগরিদম সংলগ্ন তালিকার পক্ষে অসম্ভব (কেবলমাত্র একটি ভার্টেক্সটি সুপারস্টার হিসাবে এটি নিশ্চিত করতে আপনাকে প্রতিটি শীর্ষবিন্দুতে পুরো তালিকাটি অতিক্রম করতে হতে পারে)।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

উত্তর:


18

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

vertex superstar(graph g)
    current vertex = first
    # Go through each vertex
    for each subsequent vertex in g ("next")
        # If there's an edge from this to the next, we eliminate this one [move to the new one].
        # If not, we just stay here.
        if edge exists from current to next
            candidate = next
        end if
    end for
    # Now we are on the final remaining candidate, check whether it satisfies the requirements.
    # just a rename for clarity
    candidate = current
    for each other vertex in g
        if edge from current to other exists
            return null 
        else if no edge from other to current
            return null
        end if
    end for
    return candidate
end superstar

পদ্ধতিটি বর্ণনা করার জন্য একটি উদাহরণ দিয়ে চলুন। শীর্ষে উত্সের শীর্ষবিন্দু এবং পাশের গন্তব্য সহ এই অ্যারেটি নিন। 1 একটি প্রান্ত নির্দেশ করে:

12341101210131114110

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

আমরা 1 এবং 2 এর সূচি দেখে শুরু করি।

12341101210131114110
সবুজ সংখ্যাটি দেখায় যে 2 থেকে 1 এর প্রান্ত রয়েছে, সুতরাং আমরা 2 টি সরিয়ে একটি কিনারা খুঁজছি 3 থেকে 1:

12341101210131114110

আমরা দেখতে পাচ্ছি যে এর মতো কোন প্রান্ত নেই, তাই আমরা 1 টি সরিয়ে দিয়ে আমাদের বর্তমান শীর্ষবিন্দু হিসাবে 3 গ্রহণ করি। মনে রাখবেন যে আমরা ইতিমধ্যে 2 টি নির্মূল করেছি, সুতরাং দেখুন 4 থেকে 3 এর প্রান্ত রয়েছে কিনা:

12341101210131114110

4 থেকে 3 পর্যন্ত প্রান্ত রয়েছে, সুতরাং আমরা 4 টি অপসারণ করি this এই মুহুর্তে আমরা একটি শীর্ষক (3) ব্যতীত সমস্তগুলি সরিয়ে ফেলেছি, সুতরাং এর প্রান্তগুলি পরীক্ষা করে দেখুন এবং এটি যোগ্য কিনা তা দেখুন:

12341101210131114110

1 থেকে 3 পর্যন্ত প্রান্ত রয়েছে তবে বিপরীত নয়, তাই 3 এখনও প্রার্থী।

12341101210131114110

2 থেকে 3 এর প্রান্তও রয়েছে তবে বিপরীত নয়, তাই 3 এখনও প্রার্থী।

12341101210131114110

4 থেকে 3 পর্যন্ত কিনারা রয়েছে তবে 3 থেকে 4 নয়; এটি আমাদের 3 টি প্রান্তগুলির চেকটি সম্পূর্ণ করে এবং আমরা পেয়েছি যে এটি আসলে একটি সুপারস্টার।

যেহেতু আমরা প্রথম প্রান্তের প্রতিটি চেকের একটি সম্ভাব্য সুপারস্টার হিসাবে একটি ভার্টেক্সকে অপসারণ করি , তাই সেরা ক্ষেত্রে হ'ল ম চেকটি জটিলতার জন্য চূড়ান্ত শীর্ষকে সরিয়ে দেয় । সবচেয়ে খারাপ ক্ষেত্রে (শেষ বা দ্বিতীয় থেকে শেষের প্রান্তটি সুপারস্টার, বা চূড়ান্ত চেকটি তাকে অযোগ্য ঘোষণা করে), প্রথম তুলনা করার পরে আমরা প্রার্থীকে আরও বিভাজনের সাথে তুলনা করি , ( ) এর নিকৃষ্টতম জটিলতা । সুতরাং, এই অ্যালগরিদমটি হ'ল ।n1nnn12×(n1)3n3O(n)Θ(n)


8

এটি কি সেলিব্রিটি সমস্যা নয় ?

সেখানে একজন থাকলেই কেবল একজন সুপারস্টার (সেলিব্রিটি) থাকবেন।

আমরা সংলগ্ন ম্যাট্রিক্স উপস্থাপনাটি ব্যবহার করি, যেখানে যদি থেকে পর্যন্ত নির্দেশিত প্রান্ত থাকে , অন্যথায় এটি । (আমি অনুমান করছি যে এটি অনুমোদিত)।আমি জে 0A[i,j]=1ij0

দিকে তাকিয়ে (মধ্যে সম্পন্ন করা যাবে সময়) আমরা কীর্তি হচ্ছে জন্য একটি প্রার্থী হিসাবে তাদের অন্তত একটি বাদ দিতে পারে: যদি , তাহলে আপনি নির্মূল করতে পারেন । যদি আমরা বাদ দিতে পারি । ( ) [ আই , জে ] = আই [ আই , জে ] = জেA[i,j]O(1)A[i,j]=1iA[i,j]=0j

একে একে বাদ দিয়ে বর্তমান প্রার্থীদের একটি তালিকা বজায় রাখুন। একটি লিঙ্কযুক্ত তালিকা যথেষ্ট করা উচিত।

শেষে, আপনি যাচাই করতে পারবেন আপনার প্রার্থী প্রকৃতপক্ষে সুপারস্টার কিনা।

এই অ্যালগরিদমটি হবে ।O(n)


ধ্রুবক সময়ে আপনি কীভাবে উপযুক্ত বেছে নিন ? (i,j)
রাফেল

3
@ রাফেল: লিঙ্কযুক্ত তালিকা থেকে প্রথম দুটি প্রার্থীকে বেছে নিন। (মাথা এবং মাথা-> পরবর্তী)।
আর্যভট্ট

6

এই উত্তরটি প্রশ্নের বর্তমান সংস্করণ নয়, যেখানে কোনও গ্রাফের প্রতিনিধিত্ব সম্ভব ছিল যেখানে প্রশ্নের সংস্করণ সম্বোধন করে।

  • আপনার গ্রাফটি সংলগ্ন তালিকার জুড়ি হিসাবে সংরক্ষণ করুন এবং সংলগ্ন তালিকার বিপরীত করুন, যেখানে প্রতিটি তালিকার তালিকার দৈর্ঘ্য ছাড়াও যথাক্রমে সংখ্যাটি আউট এবং ইন-এজ থাকে।

  • প্রাক প্রসেসিং: গণনা বিপরীত সংলগ্ন তালিকা (যেটি ইন-এজগুলির তালিকা)। ব্যয় ।O(|E|)

  • তালিকাগুলি ট্র্যাভার করুন এবং যে কোনও নোড নির্বাচন করুন যেখানে বহি-প্রান্তের সংখ্যা এবং প্রান্তগুলির সংখ্যা । ব্যয় ।এন - 1 ( | এন | )0n1O(|N|)


ঠিক আছে, আমি দেখতে পাচ্ছি যে কোনও গ্রাফের প্রতিনিধিত্ব করার অনুমতি দেওয়া খুব দুর্বল। আমি প্রশ্নটি কী করেছিলাম তা সীমাবদ্ধ করেছিলাম।
রাফেল

2

কেবলমাত্র রেফারেন্সের জন্য, এটি কেভিন যা পোস্ট করেছেন তার পুনরাবৃত্ত সংস্করণটির সিউডোকোড।

superstar(V, E) {
  if ( |V| == 1 ) {
    return V.pop
  }

  a = V.pop
  b = V.pop
  if ( (a,b) ∈ E ) {
    no_ss = a
    keep  = b
  }
  else {
    no_ss = b
    keep = a
  }

  s = superstar(V ++ keep)

  return ( s != null && (no_ss, s) ∈ E && !(s, no_ss) ∈ E ) ? s : null
}

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