क्या यह एक वीयर मैट्रिक्स है?


18

एक प्रकार का n × n मैट्रिक्स W है जिसे बेसिक वियर कैनोनिकल फॉर्म कहा जाता है । इस तरह के मैट्रिक्स को इसके ब्लॉक द्वारा वर्णित किया गया है और इसमें निम्नलिखित संदर्भ आरेख का उपयोग करते हुए निम्नलिखित गुण हैं:

यहाँ छवि विवरण दर्ज करें

  • मुख्य विकर्ण ब्लॉक डब्ल्यू ii हैं n मैं × n मैं λ फार्म के matrices मैं n मैं जहां मैं n मैं है n मैं × n मैं पहचान मैट्रिक्स।
  • n 1। n 2 ≥ ... ≥ n r
  • पहले superdiagonal ब्लॉक डब्ल्यू कश्मीर -1, कश्मीर के लिए 2..r कश्मीर ∈ हैं n k-1 × n कश्मीर मैट्रिक्स कि कर रहे हैं रो-कम सोपानक रूप में पूर्ण स्तंभ रैंक , या अधिक सीधे शब्दों में, मैं n k के शीर्ष पर बैठे n k-1 - n k पंक्तियों की शून्य।
  • अन्य सभी ब्लॉक 0 मैट्रिसेस हैं।

उदाहरण के लिए:

अजीब रूप है

  • मुख्य विकर्ण ब्लॉक (पीले) ऐसे हैं कि n मैं 4, 2, 2 और 1 हैं।
  • पहले सुपरडायंगल ब्लॉक हरे रंग में होते हैं।
  • ग्रे ज़ोन में अन्य सभी ब्लॉक शामिल हैं, जो सभी 0 हैं

इस चुनौती के लिए हम λ = 1 मान लेंगे।

इनपुट

किसी भी सुविधाजनक प्रारूप में 0s और 1s के साथ एक वर्ग मैट्रिक्स।

उत्पादन

इनपुट मैट्रिक्स वियर है या नहीं, इसके लिए दो अलग-अलग वैल्यू में से एक को आउटपुट करें।

नियम

यह । प्रत्येक भाषा में सबसे कम बाइट्स जीतता है। मानक नियम / कमियां लागू होती हैं।

परीक्षण के मामलों

पंक्तियों के सरणियों के रूप में प्रस्तुत किया गया।

Weyr:

[[1]] 
[[1,1],[0,1]] 
[[1,0,1,0,0],[0,1,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,1,0,0],[0,0,0,0,1,0,0,1,0],[0,0,0,0,0,1,0,0,1],[0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,0,1,0,0,0,0],[0,1,0,0,0,1,0,0,0],[0,0,1,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]

गैर Weyr:

[[0]]
[[1,0],[1,1]]
[[1,0,0,1,0,0],[0,1,0,0,0,0],[0,0,1,0,0,1],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]
[[1,0,1,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]

2
वियर, मैट्रिक्स की आपकी परिभाषा बहुत अस्पष्ट है। इसे समझने के लिए मुझे पहले विकिपीडिया (जो या तो बहुत स्पष्ट नहीं है) से परिभाषा पढ़ने की जरूरत है और फिर भी आपकी परिभाषा अस्पष्ट और अस्पष्ट है। एक के लिए मैं यह स्पष्ट कर दूंगा कि n <उप> i </ sub> क्या है और इसका क्या मतलब है, वर्तमान में यह बहुत स्पष्ट नहीं है कि यदि कोई मैट्रिक्स मौजूद है, तो ऐसा n मौजूद है और ऐसा लगता है जैसे वे कुछ हैं मैट्रिक्स की संपत्ति।
पोस्ट रॉक गार्फ हंटर

क्या यह सही है कि पहचान मैट्रिक्स एक वीयर-मैट्रिक्स है?
स्टीवी ग्रिफिन

पहचान मैट्रिक्स r = 1 और n_1 = n के साथ एक वेयर्स मैट्रिक्स है, इसलिए हां, एक पतित के साथ।
S.Klumpers

2
सुझाए गए परीक्षण का मामला: [[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]। मुझे लगता है कि यह मिथ्या है (लेकिन मेरा जवाब इस तरह की पहचान करने में विफल रहता है)।
अरनौलड

आपके द्वारा बताई गई परिभाषाएं आपको केवल मूल मेयर मैट्रिसेस की पहचान करना चाहती हैं, न कि सामान्य वियर मैट्रिसेस। क्या इस चुनौती के लिए आपका इरादा है?
S.Klumpers

जवाबों:



1

पायथन 2 , 270 बाइट्स

lambda m,w=0:{w}&{0,len(m)}and I(m)or any(I([l[:i]for l in m[:i]])*I([l[i:j+i]for l in m[:j]])*(sum(sum(m[:i]+[l[:i]for l in m],[]))==2*i+j)and f([l[i:]for l in m[i:]],j)for i in range(w,len(m))for j in range(1,i+1))
I=lambda m:all(sum(l)==l[i]>0for i,l in enumerate(m))

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

पहचान और उनके सुपरडाइगल ब्लॉकों के लिए पुन: ब्लॉक की जाँच करता है।

I जाँचता है कि क्या मैट्रिक्स एक पहचान मैट्रिक्स है

I=lambda m:all(sum(l)==l[i]>0for i,l in enumerate(m))

इनपुट मैट्रिक्स के प्रत्येक ब्लॉक के लिए, फ़ंक्शन यह जाँचता है कि यह एक पहचान है, और यह सही करने के लिए एक और पहचान मैट्रिक्स ब्लॉक है। अगला पुनरावृति तब उस आकार के एक ब्लॉक को देखता है।

{w}&{0,len(m)}and I(m)                # if the while matrix is an identity matrix,
                                      # return true (but only the first time or last block)
or
any(
 I([l[:i]for l in m[:i]])                         # the current block is identity
 *I([l[i:j+i]for l in m[:j]])                     # and, the smaller block to the right is identity
 *(sum(sum(m[:i]+[l[:i]for l in m],[]))==2*i+j)   # and everything below and to the right (not the
                                                  # smaller block), are 0
 and f([l[i:]for l in m[i:]],j)                   # and the remaining matrix is alse Weyr(recursively)
 for i in range(w,len(m))             # for each block size i
 for j in range(1,i+1)                # for each smaller right block of size j
)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.