संक्षेप में, मेरी भोली कोड (रूबी में) लगता है कि:मेरा बेवकूफ अधिकतम क्लिक खोज एल्गोरिदम ब्रॉन-केर्बोश की तुलना में तेज़ी से चलता है। क्या गलत है?
# $seen is a hash to memoize previously seen sets
# $sparse is a hash of usernames to a list of neighboring usernames
# $set is the list of output clusters
$seen = {}
def subgraph(set, adj)
hash = (set + adj).sort
return if $seen[hash]
$sets.push set.sort.join(", ") if adj.empty? and set.size > 2
adj.each {|node| subgraph(set + [node], $sparse[node] & adj)}
$seen[hash] = true
end
$sparse.keys.each do |vertex|
subgraph([vertex], $sparse[vertex])
end
और मेरे Bron Kerbosch कार्यान्वयन:
def bron_kerbosch(set, points, exclude)
$sets.push set.sort.join(', ') if set.size > 2 and exclude.empty? and points.empty?
points.each_with_index do |vertex, i|
points[i] = nil
bron_kerbosch(set + [vertex],
points & $sparse[vertex],
exclude & $sparse[vertex])
exclude.push vertex
end
end
bron_kerbosch [], $sparse.keys, []
मैं भी लागू किया पिवट और अपकर्ष आदेश है, जो bron_kerbosch निष्पादन समय में कटौती , लेकिन मेरे शुरुआती समाधान से आगे निकलने के लिए पर्याप्त नहीं है। ऐसा लगता है कि यह मामला है; मुझे क्या एल्गोरिदमिक अंतर्दृष्टि याद आ रही है? अगर आपको पूरी तरह से काम करने वाला कोड देखना है तो अधिक जानकारी के साथ writeup यहां दिया गया है। मैंने इसे छद्म-यादृच्छिक सेट पर दस लाख या उससे अधिक किनारों पर परीक्षण किया है।
मैंने कुछ अन्य परीक्षण मामलों पर आपके कोड की कोशिश की और यह लगभग बी-के रूप में धीमा था। आपके परीक्षण कैसा दिखते हैं? – user635541
एक छद्म-यादृच्छिक दिनचर्या से उत्पन्न किनारों। क्या आपको बुरा लगता है अगर आपने मेरे टेस्ट केस और कोड को मेरे साथ खेलने के लिए कहीं छोड़ दिया? –
http://www.mediafire.com/file/5x5p7tu2t9c7r1a/tests.zip – user635541