হার্মিটিয়ান ম্যাট্রিক্স?


18

নোট করুন যে এই চ্যালেঞ্জটির জন্য জটিল সংখ্যাগুলি পরিচালনা বা বোঝার দরকার নেই।

একটি খালি খালি বর্গক্ষেত্রের ম্যাট্রিক্স দেওয়া যেখানে প্রতিটি উপাদান একটি দ্বি-উপাদান (রে, ইম) পূর্ণসংখ্যা তালিকা, নির্ধারণ করুন (কোনও সত্যবাদী / মিথ্যা মান বা কোনও দুটি ধারাবাহিক মান প্রদান) এটি হার্মিটিয়ান ম্যাট্রিক্সের প্রতিনিধিত্ব করে কিনা।

নোট করুন যে ইনপুটটি পূর্ণসংখ্যার একটি 3 ডি অ্যারে; জটিল সংখ্যার 2D অ্যারে নয়। যদি আপনার ভাষা সরাসরি 3 ডি অ্যারে নিতে না পারে তবে আপনি একটি সমতল তালিকা নিতে পারেন (এবং যদি এটি সাহায্য করে তবে n × n বা n × n shape 2 আকার)।

কোনও ম্যাট্রিক্স হর্মিটিয়ান হয় যদি এটি তার নিজস্ব কনজুগেট ট্রান্সপোজের সমান হয় । অন্য কথায়, আপনি যদি এটির উপরে-বাম থেকে নীচে-ডান তির্যকটি জুড়ে ফ্লিপ করেন এবং সমস্ত দুটি-উপাদান পাতা-তালিকার দ্বিতীয় উপাদানটিকে অস্বীকার করেন তবে এটি ইনপুট ম্যাট্রিক্সের মতো। নোট করুন যে উল্টানো এবং অবহেলার ক্রমটি অপ্রাসঙ্গিক, সুতরাং আপনি প্রথমে প্রত্যাখ্যান করতে পারেন এবং তারপরে উল্টাতে পারেন।

ওয়াক-যদিও উদাহরণ

এই উদাহরণটি পড়া সহজ করার জন্য অতিরিক্ত অতিরিক্ত সাদা জায়গার সাথে জেএসএন ব্যবহার করে:

[[ [2, 0] , [2, 1] , [4, 0] ],
 [ [2,-1] , [3, 0] , [0, 1] ],
 [ [4, 0] , [0,-1] , [1, 0] ]]

স্থানান্তর (এনডাব্লু — এসই তির্যক জুড়ে ফ্লিপ করুন):

[[ [2, 0] , [2,-1] , [4, 0] ],
 [ [2, 1] , [3, 0] , [0,-1] ],
 [ [4, 0] , [0, 1] , [1, 0] ]]

পাতাগুলির তালিকার দ্বিতীয় উপাদানগুলি:

[[ [2, 0] , [2, 1] , [4, 0] ],
 [ [2,-1] , [3, 0] , [0, 1] ],
 [ [4, 0] , [0,-1] , [1, 0] ]]

যেহেতু এটি ইনপুটটির অনুরূপ, ম্যাট্রিক্স হর্মিটিয়ান।

পরীক্ষার মামলা

Hermitian

[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,0]]]

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

[[[1,0],[2,-3]],[[2,3],[1,0]]]

[[[42,0]]]

অ Hermitian

[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,-1]]]

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

[[[1,0],[2,3]],[[2,3],[1,0]]]

[[[3,2]]]


@ লুইস মেন্ডো আমি এখনও ভাবছি। কোন ধারনা?
অ্যাডাম

রেকর্ডের জন্য, একটি নতুন মেটা-পোস্ট । (আমি বন্ধ করার পক্ষে ভোট দিইনি, তবে আমি দেখছি কারও আছে, তাই সম্প্রদায় এ সম্পর্কে কী ভাববে আমি আগ্রহী)।
স্টিভি গ্রিফিন

5
@ অ্যাডাম আমি এটি যথাসম্ভব স্পষ্ট করে তুলব তবে এটি আপনার উপর নির্ভর করে। ইনপুট এবং আউটপুট ফর্ম্যাটগুলিতে নমনীয়তা সাধারণত আকাঙ্ক্ষিত হয় তবে ডিফল্টরূপে অনুমান করা যায় না, বিশেষত যখন আপনি বলেন ইনপুটটি বাস্তব সংখ্যার একটি 3 ডি অ্যারে; জটিল সংখ্যার 2D অ্যারে নয় । এটি 3 ডি অ্যারের ইনপুট ফর্ম্যাট সম্পর্কে আপনার ধারণা কতটা বিস্তৃত তা পরিষ্কার নয়
লুইস মেন্ডো

3
@ অ্যাডম 2 ডি ম্যাট্রিকের এক জোড়া (বাস্তব অংশের জন্য একটি, কল্পিত অংশের জন্য একটি) ইনপুট হিসাবে নেওয়া যেতে পারে?
dylnan

1
@ অল্লান নং ইনপুটটি এমন একক কাঠামো হতে হবে যা কিছু ধরণের 3-মাত্রিকতার প্রতিনিধিত্ব করে যেখানে পাতার মাত্রায় রি-ইম জোড়া রয়েছে।
অ্যাডাম

উত্তর:


10

আর, 71 48 47 বাইট

function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)

বাস্তব সংখ্যার একটি 3 ডি অ্যারে নেয়, কাল্পনিক সংখ্যার 2D অ্যারে তৈরি করুন, স্থানান্তর করুন, সংযুক্ত করুন এবং তুলনা করুন।

ধন্যবাদ @Giuseppe 23 বাইট, এবং এক অভূতপূর্ব দ্বারা বাইট গণনা হ্রাস করার জন্য @Vlo চূড়ান্ত 1 জন্য!

এটি অনলাইন চেষ্টা করুন!

উদাহরণ:

> A <- array(c(2,2,4,2,3,0,4,0,1,0,-1,0,1,0,-1,0,1,0),dim=c(3,3,2))
> A
, , 1

     [,1] [,2] [,3]
[1,]    2    2    4
[2,]    2    3    0
[3,]    4    0    1

, , 2

     [,1] [,2] [,3]
[1,]    0    1    0
[2,]   -1    0    1
[3,]    0   -1    0

> f <- function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
> f(A)
[1] TRUE

1
B=A[,,1]+A[,,2]*1iকয়েক বাইট সংরক্ষণ করা উচিত।
জিউসেপ

@ জিউসেপ আরেফ আমার মনে হয়েছিল আমি চেষ্টা করেছিলাম তবে দৃশ্যত তা হয়নি। ধন্যবাদ!
প্ল্যানাপাস

1
এছাড়াও, isSymmetricবিদ্যমান এবং Hermitian জটিল ম্যাট্রিক্স জন্য কাজ করে কিন্তু 1x1যদি যেহেতু অনেক চালাক [ঝরিয়া বৈশিষ্ট্যাবলী এবং এটি একটি ফলাফল complexএকটি বদলেmatrix
: Giuseppe

2
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)ইন-লাইন অ্যাসাইনমেন্টটি 1 টি সংরক্ষণ করে
Vlo

7

অক্টাভা , 39 34 31 বাইট

@(x)(y=x(:,:,1)+j*x(:,:,2))==y'

এটি অনলাইন চেষ্টা করুন!

3 টি বাইট সংরক্ষণ করেছেন লুইস মেন্ডোকে ধন্যবাদ যিনি আমাকে চ্যালেঞ্জ পাঠ্যের স্পষ্টতা সম্পর্কে অবহিত করেছিলেন।

ব্যাখ্যা:

ম্যাটল্যাব এবং অক্টাভেতে 'কনজুগেট জটিল ট্রান্সপোজ, "নিয়মিত" ট্রান্সপোজ নয়।

আমরা একটি পরিবর্তনশীল yইনলাইন তৈরি করি যা 3 ডি ম্যাট্রিক্সের প্রথম স্তর প্লাস দ্বিতীয় স্তরটি জটিল ইউনিটের সাথে গুণিত হয় j, অর্থাত্ একটি জটিল ম্যাট্রিক্স যেখানে আসল পদটি প্রথম "স্তর", এবং কাল্পনিক দ্বিতীয়টি "স্তর"। এরপরে আমরা তা পরীক্ষা করে দেখি যে এটি নিজের মতো জটিল কনজুগেট পরিবহনের সমান।

এটি 1যদি সত্য হয় তবে একটি ম্যাট্রিক্স আউটপুট দেয় এবং একটি ম্যাট্রিক্স 0যদি অন্তত একটি মিথ্যা থাকে তবে output এগুলি অক্টাভে (প্রুফ) সত্য এবং মিথ্যা হিসাবে বিবেচিত হয় ।



5

এপিএল (ডায়ালগ ইউনিকোড) , 22 15 9 7 বাইট

⍉≡⊢∘-

এটি অনলাইন চেষ্টা করুন!

Tacit উপসর্গ ফাংশন।

ডিএফএন-তে 7 বাইটের জন্য আদমকে এবং অ্যাডাম এবং এরিক দ্যআউটগলফার উভয়কেই আমার বোকামির সাথে সামঞ্জস্যপূর্ণ সংস্করণটি খুঁজে পেতে সহায়তা করার জন্য ধন্যবাদ ।

সারণী সংস্করণে 2 বাইটের জন্য এনএনজি ধন্যবাদ।

কিভাবে?

⍉≡⊢∘- Anonymous tacit function.
      ¨  Apply to each element of the argument:
     \   Cumulative reduction, using
  ⊢∘-    Ignore the first element, then negate the second
        And match
        To the argument's transposition.

5

ওল্ফ্রাম ভাষা (গণিত) , 45 34 33 26 21 18 18 বাইট

#==#&[#.{1,I}]&

এটি অনলাইন চেষ্টা করুন!



@ এলফল্পা অনেক ধন্যবাদ; আমি জানি যে 0xf3c7ট্রান্সপোজ অপারেটর, তবে কী 0xf3c8?
জোনাথন ফ্রেচ

1
@ ওয়ালফাল্ফায় রয়েছে 0xf3c9( ওল্ফ্রাম ডকুমেন্টেশন )।
জোনাথন ফ্রেচ

4

জাভা 8, 137 136 134 126 119 116 বাইট

m->{int r=1,l=m.length,i=l*l,j,k;for(;i-->0;)r=m[j=i/l][k=i%l][0]!=m[k][j][0]|m[j][k][1]!=-m[k][j][1]?0:r;return r;}

-৩ বাইট @ সিলিংক্যাটকে ধন্যবাদ ।

1হার্মিটিয়ান, 0অন্যথায় যদি ফিরে আসে ।

ব্যাখ্যা:

এটি অনলাইনে চেষ্টা করুন।

m->{                 // Method with 3D integer-array as parameter and boolean return-type
  int r=1,           //  Flag-integer `r`, starting at 1
      l=m.length,    //  The size of the 3D input array
      i=l*l,j,k;     //  Index-integers
  for(;i-->0;)       //  Loop over the rows and columns
    r=m[j=i/l][k=i%l][0]!=m[k][j][0]
                     //   If the first numbers diagonally aren't equal,
      |m[j][k][1]!=-m[k][j][1]?
                     //   or the second numbers aren't negatives of each other:
       0             //    Set the flag `r` to 0
      :              //   Else:
       r;            //    Leave the flag `r` the same
  return r;}         //  Return the flag `r`



3

জেলি ,  6  5 বাইট

Z×Ø+⁼

1হার্মিটিয়ান ইনপুট এবং 0অন্যথায় ফেরত দেওয়া এক মোনাডিক লিঙ্ক ।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

Z×Ø+⁼ - Link: list of lists of lists, M
Z     - transpose
  Ø+  - literal = [1,-1]
 ×    - multiply (vectorises)
    ⁼ - equal to M?

আমি বিশ্বাস করি আধুনিক জেলি আছে Ø+
lirtosiast

@ লিরিটোসিয়াস্ত সত্যই আপনি সঠিক, এটি ব্যবহারের জন্য আপডেট করেছেন; ধন্যবাদ!
জোনাথন অ্যালান



1

পার্ল 5 , -a0 48 বাইট

পুরানো গণনা: 50 বাইট ( +2জন্য a0)। এমন ভাষার পক্ষে খারাপ নয় যার কোনও বিল্টিন ট্রান্সপোজ নেই (আমি মোটেও হিংসা করি না, স্যারী নেই)

,আসল এবং কাল্পনিক অংশের মধ্যে এসটিডিএন-এ ইনপুট ম্যাট্রিক্স দিন , যেমন:

2,0 2,1 4,0
2,-1 3,0 0,1
4,0 0,-1 1,0

ছাপবে 1হার্মিটিয়ানদের জন্য , অন্যথায় কিছুই নয়

#!/usr/bin/perl -a0
say@F~~[map/(\S+,)(\S+)/gc?$1.-$2:(),(/.+/g)x@F]

এটি অনলাইন চেষ্টা করুন!


1

কাস্তে , 7 বাইট

=¹mmṀ_T

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

নোট যে পরিবর্তে কাজ করা উচিত mm , কিন্তু একটি বিরক্তিকর বাগ আছে যা আমাকে এটি ব্যবহার করতে বাধা দেয় :(

= ¹mmṀ_T - সম্পূর্ণ প্রোগ্রাম। টিপলগুলির তালিকার তালিকা হিসাবে কমান্ড লাইন আরগগুলি থেকে ইনপুট নেয়।
  এম টি - ইনপুটটির ট্রান্সপোজের প্রতিটি তালিকার জন্য ...
   mṀ_ - ... তারা যে প্রতিটি টিপল ধারণ করে তার শেষ মানটি নেগেট করুন।
= ¹ - এটি ইনপুট হিসাবে একই কিনা তা পরীক্ষা করে দেখুন।

1

জাভাস্ক্রিপ্ট (ES6), 53 বাইট

সংরক্ষিত 2 বাইট @ নীলকে ধন্যবাদ

falseহার্মিটিয়ান বা trueঅ-হার্মিটিয়ানদের জন্য ফেরত দেয় ।

m=>m.some((r,y)=>r.some(([a,b],x)=>m[x][y]!=a+[,-b]))

এটি অনলাইন চেষ্টা করুন!


কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওএ / এ / 156714 - এ 3 বাইট সংরক্ষণ করুন f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
নীল

1

সি (জিসিসি) , 107 103 100 বাইট

j,k,r;f(A,s)int***A;{for(r=0,j=s;j--;)for(k=s;k--;)r|=*A[j][k]-*A[k][j]|A[j][k][1]+A[k][j][1];A=!r;}

এটি অনলাইন চেষ্টা করুন!



@ স্টেডিবক্স অনেক ধন্যবাদ মজাদার ... কয়েক ঘন্টা আগে আমি ঠিক এই গল্ফটি মনে রেখেছিলাম - ইনডেক্সিংয়ের পরিবর্তে ডেরেফারেন্সিং - তবে কেবল ভুলে
গিয়েছি

আপনাকে ধন্যবাদ
জোনাথন ফ্রেচ

0

আসলে , 13 বাইট

┬⌠⌠Çá╫k⌡M⌡Mß=

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে?

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

┬⌠⌠Çá╫k⌡M⌡Mß=  –> Full program.
┬              –> Transpose.
 ⌠       ⌡M    –> For each list in the input's transpose do the following:
  ⌠    ⌡M         –> For each two-element list of the form [a, b]...
   Ç              –> Turn it into a complex number (a+bi).
    á             –> Find its complex conjugate: Push (a-bi).
     ╫k           –> Push [Re(N), Im(N)], so [a, -b].
           ß=  –> Check whether the result equals the input.

0

পাইথ, 9 বাইট

qCmm,hk_e

ব্যাখ্যা:

qCmm,hk_ekdQQ  Autofill variables
    ,hk_ek     [a,-b]...
  mm      dQ    ...for each [a,b] in the input (m...Q)'s rows (m...d).
 C             Transpose.
q           Q  Is this result equal to the original?

টেস্ট স্যুট


আপনার উত্তর আসলে 9 বাইট ... 9-বাইট বিকল্প নেই: qCmm*V_B1
মিঃ এক্সকডার

জমা দেওয়ার সময় আমি একটি বাইট বন্ধ করেছিলাম qCmm.e_Fbk... থেকে ... স্পষ্টতই আমি চূড়ান্ত জমা দেওয়ার ক্ষেত্রে বাইট গণনা সম্পাদনা করতে ভুলে গিয়েছিলাম। @ মিঃ এক্সকোডার আমি নির্বিশেষে এটি ঠিক করেছি, ধরার জন্য ধন্যবাদ!
স্টিভেন এইচ।

0

সি,  111   110  108 বাইট

একটি বাইট সংরক্ষণ করার জন্য @ জোনাথন ফ্রেঞ্চকে ধন্যবাদ এবং দুটি বাইট সংরক্ষণের জন্য @ সেলিংক্যাটকে ধন্যবাদ!

i,j,r;f(A,n)int*A;{for(r=i=0;i<n*2;i+=2)for(j=n*2;j;r|=A[i*n+j]-A[j*n+i]|A[i*n-~j]+A[j*n-~i])j-=2;return!r;}

এটি অনলাইন চেষ্টা করুন!

সি (জিসিসি) ,  106  104 বাইট

i,j,r;f(A,n)int*A;{for(r=i=0;i<n*2;i+=2)for(j=n*2;j;r|=A[i*n+j]-A[j*n+i]|A[i*n-~j]+A[j*n-~i])j-=2;A=!r;}

এটি অনলাইন চেষ্টা করুন!


আমি মনে করি r|=...|...পাশাপাশি কাজ করে r+=...||...
জোনাথন ফ্রেচ 26'18

@ জোনাথানফ্রেচ হ্যাঁ, এটি হয়। ধন্যবাদ!
স্টেডিবক্স

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