গ্রাফগুলিতে দু'টি শীর্ষে সন্ধান করা হচ্ছে


22

যাক গ্রাফ দেখুন। একটি প্রান্তবিন্দু জন্য এক্স ভী , নির্ধারণ এন ( এক্স ) (খোলা) এর আশপাশ হতে এক্স মধ্যে জি । অর্থাৎ এন ( এক্স ) = { Y ভীG=(V,E)xVN(x)xG । দু'রকমের নির্ধারণ তোমার দর্শন লগ করা , বনাম মধ্যে জি হতেযুগলযদি তোমার দর্শন লগ করা এবং V প্রতিবেশীদের একই সেট হলো, আছে, যদি এন ( ইউ ) = এন ( বনাম )N(x)={yV|{x,y}E}u,vGuvN(u)=N(v)

গ্রাফ দেওয়া উপর এন ছেদচিহ্ন এবং মি ইনপুট হিসাবে প্রান্ত, কিভাবে দ্রুত আমরা যুগল একজোড়া জানতে পারেন জি যদি এই ধরনের একজোড়া বিদ্যমান,?GnmG

আমরা দুটি প্রদত্ত উল্লম্বগুলি তার আশেপাশের জায়গাগুলির সাথে তুলনা করে সময়ে যমজ কিনা তা পরীক্ষা করতে পারি । একটি সোজা অ্যালগরিদম হল যমজদের সন্ধান করা হ'ল প্রতিটি জোড় বিভাজক কিনা তা পরীক্ষা করা। এটি O ( n 3 ) সময় নেয় (এবং সমস্ত জোড়া যমজও খুঁজে পায় )। গ্রাফটিতে একজোড়া যমজ খুঁজে পাওয়ার (যদি সেখানে উপস্থিত থাকে) উল্লেখযোগ্যভাবে দ্রুততর উপায় আছে? সাহিত্যে এমন কোনও কাজ রয়েছে যা এই সমস্যার সমাধান করে?O(n)O(n3)


আপনি আশেপাশের এলাকাগুলিতে পুনরাবৃত্তি করতে এবং এগুলিকে একটি হ্যাশটেবলে যুক্ত করতে পারেন। সম্পর্কিত: cstheory.stackexchange.com/q/3390/236
রাদু GRigore

1
এই এখানে ব্যায়াম 2.17 হয় books.google.co.uk/...
Radu GRIGore

সম্পাদনা ক্ষমতা সহ কারও যমজ সংজ্ঞা সংশোধন করা উচিত। (TheMachineCharmer এর উত্তর সম্পর্কে মন্তব্যগুলি দেখুন বা আমি সংযুক্ত বইয়ের সংজ্ঞাটি দেখুন))
রাদু গ্রেগোর

উত্তর:


21

গ্রাফ মধ্যে Twins গ্রাফ এর মডুলার পচানি খুঁজে পাওয়া যেতে পারে আকার 2. শুধু মডিউল হয় সময়। মডিউলার পচা গাছ গ্রাফের সমস্ত মডিউলগুলি স্পষ্টভাবে উপস্থাপন করে এবং তিন ধরণের অভ্যন্তরীণ নোড নিয়ে থাকে: সিরিজ, সমান্তরাল এবং প্রধান নোড এবং পাতাগুলি পৃথক নোডগুলি নিয়ে গঠিত। কমপক্ষে দুটি উল্লম্ব একটি সেট S VO(n+m)SV একটি মডিউল যদি এবং কেবল যদি এটা গাছ মধ্যে কিছু নোড বা একটি সিরিজ বা সমান্তরাল নোডের শিশুদের কিছু সেট ইউনিয়ন হয়।

সুতরাং জোড়া জোড়া নোডের জুড়ি সন্ধান করতে যদি সেগুলি বিদ্যমান থাকে তবে আমরা সময়ের মধ্যে মডিউলার পচন গাছ তৈরি করতে পারি । তারপরে পাতাগুলি দেখুন, যদি কোনও পাতার পিতামাতা একটি সিরিজ বা সমান্তরাল নোড হয় তবে সেই নোডের অবশ্যই কমপক্ষে দুটি বাচ্চা থাকতে হবে যা একটি জোড়া জোড়া গঠন করে। সুতরাং মোট চলমান সময় রৈখিক হয়।O(n+m)

http://en.wikipedia.org/wiki/Modular_decomposition


ধন্যবাদ, আমাকে মডুলার পচানোর সাথে পরিচয় করিয়ে দেওয়ার জন্যও!
gphilip

12

সমস্যাটি গ্রাফ ম্যাট্রিক্সে দুটি সমান সারি রয়েছে তা নির্ধারণের সমান। আমরা গ্রাফ ম্যাট্রিক্সের সারিগুলিতে ট্রাই তৈরি করতে পারি। সময়ের পরিপূর্ণতা হবে ও (n ^ 2)


6
সংলগ্ন তালিকার একই ধারণা O(m+n)
রাদু গ্রেগোর

এখন আমি একটি উড়ানের চিহ্ন দিচ্ছি;)
হিসিয়েন-চিহ চাং 之 之

2
This can be generalised somewhat. If we rephrase the problem as "Given f:X>Y (where here f(x):=N(x)) find distinct x1, x2 such that f(x1)=f(x2)" then for totally ordered Y one approach is to evaluate f(x) for each xX, sort them, and check the sorted list for duplicates. The trie is effectively radix sort.
Peter Taylor

8

EDIT: the solutions by @MikleB and @Travis are much clever. Sorry for the overkilling answer.


AAAT(i,j)ai,j

আমার সর্বোত্তম জ্ঞানের জন্য ম্যাট্রিক্সের গুণ গুণ সমাধান করা যেতে পারেO(nα) time with α2.376 by the Coppersmith–Winograd algorithm. If practical solutions are needed, any matrix multiplication algorithms works well in practice are nice.


Awesome this works! :D I think it will suffice to evaluate only upper half of the A2. what do you think?
Pratik Deoghare

1
@TheMachineCharmer: Thank you :) Yes, if the graph is undirected.
Hsien-Chih Chang 張顯之

Yes. Exactly! :)
Pratik Deoghare

5

Because of the crazy system on this site I can't comment directly, but I have a couple of observations on existing answers.

I'm pretty sure Hsien-Chih Chang's solution needs to correct A2 to AAT.

TheMachineCharmer's observation 4 is back to front (counter-example: [0,0,1],[0,1,0],[0,1,1] has determinant 0 but no twins). If twins exist then the determinant is zero.


I see no problem with A2. Any examples? btw, system on this site is NOT crazy! :)
Pratik Deoghare

A2 would work for undirected graphs (for which A == AT) but not, in general, for directed graphs. The AND over XNOR needs to compare two rows of A, and matrix multiplication operates on a row from the first matrix with a column from the second.
Peter Taylor

System may not be crazy, but perhaps counterintuitive to first time posters. You can answer but not comment... but your comments were nice enough IMHO to justify posting. Once you've built up more reputation I think you'll find the system pretty addictive.
hardmath

3
Being able to answer but not comment is crazy. It forces new users to choose between not being helpful or answering in the wrong place.
Peter Taylor

3

This thread is quite old; however, nobody seems to have hit on the most elegant and simple approach. Lexicographically sort the adjacency-list in O(n+m) time then check for duplicates (see Aho, Hopcroft, Ullman, 74'). You can use modular decomposition, but this is total overkill.


2

This thread is old and OP's question has been answered but I'd like to add another algorithm to find all such pairs in linear time. Nobody mentioned Partition Refinement!

This algorithm finds the equivalence classes of false twins. The algorithm relies on an efficient procedure that refines a partition. Given a set S and a partition P = {X1, ..., Xn}. refine(P, S) = {X1 ^ S, X1 - S, X2 ^ S, X2 - S, ..., Xn ^ S, Xn - S}. ^ denotes set intersection and - set difference. A partition is stable if it cannot be further refined. This procedure takes time O(|S|) (see Wikipedia's article on partition refinement), so it's fast.

Algorithm:

P = {V} // initial partition consists of the vertex set
for every vertex v:
    P = refine(P, N(v)) // refine with the open neighborhood of v

Total time is O(|V|+|E|). This is simple to program as well.


1

Some observations that might help

  1. For a,bV if a is not twin of b then c and d can't be twins where cN(a) and dN(b).

  2. |N(a)||N(b)| then a and b can't be twins.

  3. If bN(a) then a and b can't be twins. This works only if you are looking for non-adjacent twins.

  4. If twins exist then determinant of the adjacency matrix is zero.

Fancy idea:

  1. Build a complete binary tree with height = |V|.
  2. Then start reading one row of adjacency matrix.
  3. If you encounter 0 take left otherwise take right.
  4. When you reach a leaf store your vertex there.
  5. Do this for all the rows. So, in the end each leaf will have neighbors.

Stolen from Inspired by Huffman compression algorithm! :)


2
The 3rd point is true only if we look for non-adjacent twins. In the usual notion of twins, a and b are allowed to be adjacent.
Mathieu Chapelle

1
Peter Taylor, Mathieu Chapelle: Thanks! I have edited the answer to reflect the changes. @Serge Gaspers: I guess in that case the condition must be N(a)b=N(b)a.
Pratik Deoghare
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.