최소 평균이 2.0 인 하위 행렬 찾기


15

당신은 주어진하고 N 별 m 정수의 행렬 N, m> 3 . 당신의 작업은 발견하는 3- 바이 -3 최저 평균 및 출력이 값을 갖는 서브 매트릭스.

규칙 및 설명 :

  • 정수는 음이 아닙니다.
  • 선택적 입력 및 출력 형식
  • 출력은 소수점 이하 2 자리까지 정확해야합니다 (정수가 아닌 경우).
  • 하위 행렬은 임의의 열과 행으로 구성 될 수 있습니다.

테스트 사례 :

1   0   4   0   1   0
1   0   4   0   1   0
4   3   4   3   4   3
1   0   4   0   1   0

Minimum mean: 0   (We have chosen columns 2,4,6 and rows 1,2,4 (1-indexed)
-----------------------------
4    8    9    7
5   10    1    5
8    5    2    4
8    3    5   10
6    6    3    4

Minimum mean: 4.2222
-----------------------------
1   0   0   0   0
0   2   0   0   0
0   0   3   0   0
0   0   0   4   0
0   0   0   0   5

Minimum mean: 0.11111
-----------------------------
371   565   361   625   879   504   113   104
943   544   157   799   726   832   228   405
743   114   171   506   943   181   823   454
503   410   333   735   554   227   423   662
629   439   191   707    52   751   506   924

Minimum mean: 309.56

이 문제의 첫 번째 버전과 다른 점은 무엇입니까?
Kritixi Lithos

2
@KritixiLithos 하위 행렬은 원본에서 여러 행과 열을 삭제하여 얻을 수있는 행렬 인 "submatrix"에 대한보다 일반적인 정의를 사용합니다 (따라서 나머지 행 / 열은 인접하지 않아도 됨).
Martin Ender

답변:


9

Mathematica, 77 50 바이트

±x_:=x~Subsets~{3}
Min[Mean/@Mean/@±#&/@±#]&

Mathematica의 전치 연산자이며 Mathematica에서 위첨자 T로 렌더링됩니다.

이 답변은 먼저 ±목록의 모든 3 요소 하위 집합을 반환 하는 도우미 연산자 를 정의한 다음이 연산자를 사용하여 문제를 해결하는 명명되지 않은 함수로 평가합니다.

이것은 먼저 행렬 행의 3 요소 하위 세트를 모두 계산하여 수행됩니다. 그런 다음 각 하위 집합에 대해이를 바꾸고 행 3 요소 하위 집합을 계산 합니다 . 이것은 가능한 모든 3x3 서브 매트릭스를 제공합니다 (전치되었지만). 그런 다음 모든 평균의 평균을 계산하고 전체 최소값을 찾습니다.


7

젤리 , 15 12 바이트

œc3S€Zµ⁺FṂ÷9

온라인으로 사용해보십시오!

작동 원리

œc3S€Zµ⁺FṂ÷9  Main link. Argument: M (matrix)

œc3           Yield all combinations of 3 rows.
   S€         Map column-wise sum over the combinations.
     Z        Zip, transposing rows and columns.
      µ       Combine all links to the left into a chain.
       ⁺      Duplicate the chain, executing it twice.
        F     Flatten.
         Ṃ    Take the minimum.
          ÷9  Divide it by 9.

œc3S€µ⁺€FṂ÷9내가 가진 것입니다 ... 편집-아 그리고 그냥 당신이 같은 것을 : D
Jonathan Allan

닌자 17 초 : P 고맙습니다. :)
Dennis 17

나는 도울 수는 없지만 반복 된 사슬 내부 9로 나눔 으로써을 제거 할 수있는 방법이 있다고 생각 3하지만 311에서 가능한 올바른 주장 으로 얻을 수 있습니까?
Jonathan Allan

1 바이트가 아니라 1 바이트를 저장하는 데 필요한 것입니다. 체인 외부에 3을 배치 할 수 없으며 (모노 딕이므로 사용하기 위해 그룹화해야하기 때문에 ) 체인 내부에 3명시 적으로 지정 하거나로 그룹화해야합니다 ÷.
Dennis

4

05AB1E , 21 16 바이트

2Fvyæ3ùO})ø}˜9/W

온라인으로 사용해보십시오!

설명

  • 각 행에 대해 크기가 3 인 각 정렬 된 부분 집합의 합을 구하십시오.
  • 결과 행렬을 전치
  • 각 행에 대해 크기가 3 인 각 정렬 된 부분 집합의 합을 구하십시오.
  • 결과 행렬을 평탄화
  • 9로 나누기
  • 최소를 얻으십시오


0

, 198 바이트

16 진 덤프 :

00000000 bc 81 bd a0 65 40 a0 5d dd a0 68 50 80 a0 77 20  ¼.½ e@ ]Ý hP. w 
00000010 80 01 dd a0 66 25 3b 52 cc cb c0 50 84 a0 5d 20  ..Ý f%;RÌËÀP. ] 
00000020 66 87 4c cc a0 68 8b 20 66 8c 25 3b cd d0 84 a0  f.LÌ h. f.%;ÍÐ. 
00000030 5d 20 66 80 4e a0 66 81 4c d3 a0 65 a0 5d a0 68  ] f.N f.LÓ e ] h
00000040 4c a0 66 8c 25 3a 8b 25 3a 50 84 a0 5d 20 66 bd  L f.%:.%:P. ] f½
00000050 a0 6e 43 a5 39 a5 3a a5 3b 00 bd a0 5f 43 cf 20   nC¥9¥:¥;.½ _CÏ 
00000060 6e 00 3d a0 69 20 12 b6 a7 36 a7 26 4d a0 69 80  n.= i .¶§6§&M i.
00000070 53 d0 80 a0 1f 20 80 45 a0 69 53 d0 80 a0 6e 20  SÐ. . .E iSÐ. n 
00000080 80 8b 40 a0 6f a0 75 4c a0 6f 8b 53 d0 80 a0 5f  ..@ o uL o.SÐ. _
00000090 20 80 8b 40 a0 6f a0 74 4c a0 6f 8b 50 84 d0 84   ..@ o tL o.P.Ð.
000000a0 a0 77 20 75 20 74 4c d3 a0 65 a0 5f 50 80 a0 43   w u tLÓ e _P. C
000000b0 20 80 01 81 25 3b 4c d3 a0 65 20 6e 81 25 3b 26   ...%;LÓ e n.%;&
000000c0 4c a0 69 8e 25 42                                L i.%B
000000c6

동등한 JavaScript :

// indices array increment function
var i=(a,l=$.length,j=2)=>++a[j]>=l+j-2?a[j]=j&&i(a,l,j-1)+1:a[j],
// row indices
    r=[0,1,2],
// column indices
    c=[...r],
// minimum sum
    m=Infinity;
do{
  do{
// calculate sum of current row/column indices and keep minimum
    m=Math.min(m,
      (r.reduce((s,y)=>s+c.reduce((s,x)=>s+$[y][x])))
    )
// until column indices loop
  }while(i(c,A.length)!=2)
// until row indices loop
}while(i(r)!=2)
// output mean
m/9

여기 데모를보십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.