2014-09-24 6 views
-2

이것은 Matrix (IntMatrix)의 안장을 찾는 프로그램입니다. saddlePoints 메서드 내부에있는 매개 변수에 대해 IntMatrix m에 대한 또 다른 메서드를 만들 수있게 도와주십시오. IntMatrix에서 saddlePoint를 찾는 방법

public class SaddlePoint{ 
    public void saddlePoints(IntMatrix m, int[] rows, int[] cols) { 
     int rows = m.length; 
     int cols = m[0].length; 

     boolean[][] flagArr = new boolean[rows][cols]; 

     for(int i=0; i<rows; i++){ 
      for(int j=0; j<cols; j++){ 
       if(m[i][j]==0){ 
        flagArr[i][j]=true; 
       } 
      } 
     } 

     for(int i=0; i<rows; i++){ 
      for(int j=0; j<cols; j++){ 
       if(flagArr[i][j]==true){ 
        /*for rows*/ 
        for(int k=0; k<rows; k++){ 
         m[k][j]=0; 
        } 
        /*for cols*/ 
        for(int z=0; z<cols; z++){ 
         m[i][z]=0; 
        } 
       } 
      } 
     } 
    } 
} 

이 요구 하지만 난 이미 다른 방법

IntMatrix Class: 
//represents a 2-dimensional matrix of integers 
    Constructor Signature: 
     IntMatrix(int rows, int cols, int ... elements) 
     //elements are provided in row major order 

IntMatrixUtilityClass 
    Static Methods: 
     IntMatrix sum(IntMatrix ... matrices) 
     //returns the sum of its arguments 

     IntMatrix product(IntMatrix m1, IntMatrix m2, IntMatrix ... others) 
     //returns the product of its arguments 

     boolean[] saddlePoints(IntMatrix m, int[] rows, int[] cols) 
     /*for each of the row and column pairs, returns true if the specified element of m is a saddle 
     point for the matrix; returns false otherwise*/ 

이 내 프로그램입니다에만 있기 때문에 내가 saddlePoint 방법이 필요합니다, 나는 단지 saddlePoints 필요

public class IntMatrix { 
    private int[][] matrix; 
    private int rows; 
    private int cols; 
    private int[] elements; 

public IntMatrix(int r, int c, int... e) { 
    this.rows = r; 
    this.cols = c; 
    this.elements = e; 

    matrix = new int[rows][cols]; 
    int l = 0; 
    for (int i = 0; i < matrix.length; i++) { 
     for (int j = 0; j < matrix[0].length; j++) { 
      this.matrix[i][j] = elements[l]; 
      l++; 
     } 
    } 
} 

public static IntMatrix sum(IntMatrix... matrices) { 
    int[] result = new int[matrices[0].rows * matrices[0].cols]; 
    for (IntMatrix matrix : matrices) { 
     int l = 0; 
     for (int i = 0; i < matrix.rows; i++) { 
      for (int j = 0; j < matrix.cols; j++) { 
       result[l] += matrix.matrix[i][j]; 
       l++; 
      } 
     } 
    } 

    IntMatrix m3 = new IntMatrix(matrices[0].rows, matrices[0].cols, result); 

    return m3; 
} 

public static IntMatrix product(IntMatrix m1, IntMatrix m2, 
     IntMatrix... others) { 

    int[] result = new int[m1.rows * m2.cols]; 
    int l = 0; 
    for (int i = 0; i < m1.rows; i++) { 
     for (int j = 0; j < m2.cols; j++) { 
      for (int k = 0; k < m1.cols; k++) { 
       result[l] += (m1.matrix[i][k] * m2.matrix[k][j]); 
      } 
      l++; 
     } 
    } 
    IntMatrix m3 = new IntMatrix(m1.rows, m2.cols, result); 

    for (IntMatrix other : others) { 
     int length = others.length; 
     l = 0; 
     int[] result2 = new int[(m3.rows * others[length - 1].cols)]; 
     for (int i = 0; i < m3.rows; i++) { 
      for (int j = 0; j < other.cols; j++) { 
       for (int k = 0; k < m3.cols; k++) { 
        result2[l] += (m3.matrix[i][k] * other.matrix[k][j]); 
       } 
       l++; 
      } 
     } 
     m3 = new IntMatrix(m3.rows, others[length - 1].cols, result2); 
    } 

    return m3; 
} 

public String toString() { 
    return String.valueOf(rows) + " " + " " + String.valueOf(cols) 
      + Arrays.toString(elements); 
} 

}// end of Matrix Class 
+0

당신이 나에게 IntMatrix의 코드를 알려주거나 줄 수 있습니까 – Mubasher

+0

그 링크에 허용 대답은 잘못되었습니다. 요점의 정의에 따르지 않습니다. @ StephMarry0812 또한 seadle point가 필요합니다. 나는이 일을했지만 여기서 요구 사항은 다르다. StephMarry는 또한 내가 생각하는 프로그래밍에 새로운 것이다. :) – Mubasher

+2

@Mubasher 허용 된 대답이 잘못되면, 고쳐라. 그것을 여전히 복제한다. – Unihedron

답변

0

먼저 먼저 말씀 드리기를 바랍니다. 스케이팅. How to find a saddle point of a matrix using Java? 여기에서 Wikipedia definition

Sadle 포인트에 따라되지는 접수 찾을 수 ANS 그러나 여기에서 나는 당신이 그에게 :
A saddle point is an element of the matrix which is both the largest element in its 
column and the smallest element in its row. 

또는 행렬이 안장 포인트를 가지고 있다고 간단한 단어에

경우 일부 항목 A를 [x] [y]는 x 번째 행에서 가장 작은 값이고 y 번째 열에서 가장 큰 값입니다. 행렬에는 둘 이상의 안장이있을 수 있습니다.

이 코드는 위키 피 디아 해상력

package com.mubasher.main; 

import java.util.Random; 

public class SaddlePoint { 

private int[][] intMatrix; 
private int[] colMaxima; 
private int[] rowMinima; 
public SaddlePoint(int col, int row){ 
    intMatrix = new int[row][col]; 
    colMaxima = new int[col]; 
    rowMinima = new int[row]; 
    fillMatrix(); 
} 
private void fillMatrix() { 
    Random random = new Random(); 
    for(int row = 0; row<intMatrix.length;row++){ 
     for(int col = 0;col<intMatrix[0].length;col++){ 
      intMatrix[row][col] = random.nextInt(21) - 10; 
     } 
    } 
    printMatrix(); 
} 
private void printMatrix(int[][] intMatrix) { 
    for(int row = 0;row<intMatrix.length;row++){ 
     for(int col = 0; col<intMatrix[0].length;col++){ 
      System.out.print(intMatrix[row][col]+" "); 
     } 
     System.out.println("");   
    } 
    for(int i=0;i<intMatrix[0].length;i++) 
    System.out.print("----"); 
    System.out.println(""); 
} 
public void printMatrix() { 
    printMatrix(intMatrix); 
} 
public void printArray(int[] array,boolean isHorizontaly) { 
    for(int i = 0;i<array.length;i++){ 
     if(isHorizontaly){ 
      System.out.print(array[i]+" "); 
     } else { 
      System.out.println(array[i]); 
     } 
    } 

    if(isHorizontaly){System.out.println(""); 
    for(int i=0;i<array.length;i++) 
     System.out.print("----"); 
    } else { 
     System.out.println("----"); 
    } 
    System.out.println(""); 
} 

public void run(){ 
    int maxVal = 0,minVal=0; 
    //minimum in each row 
    for(int row = 0; row<intMatrix.length;row++){ 
     for(int col = 0;col<intMatrix[0].length;col++){ 
      if(col == 0) { 
       rowMinima[row]=intMatrix[row][col]; // assume first val at (row,0) is minimum 
      } else { 
       if(intMatrix[row][col]<rowMinima[row]){ 
        rowMinima[row]=intMatrix[row][col]; // assign new minimum val 
       } 
      } 
     } 
    } 
    //maximum in each column 
    for(int col = 0; col<intMatrix[0].length;col++){ 
     for(int row = 0;row<intMatrix.length;row++){ 
      if(row == 0) { 
       colMaxima[col]=intMatrix[row][col]; // for 
      } else { 
       if(intMatrix[row][col]>colMaxima[col]){ 
        colMaxima[col]=intMatrix[row][col]; // assign new max val 
       } 
      } 
     } 
    } 
    printArray(colMaxima,true); 
    printArray(rowMinima,false); 
    int colIndx=0,rowIndx=0; 
    for(int i =0;i<colMaxima.length;i++){ 
     if(i == 0) { 
      minVal= colMaxima[i]; 
      colIndx=i; 
     } else { 
      if(colMaxima[i]<minVal){      
       minVal= colMaxima[i]; 
       colIndx=i; 
      } 
     } 

    } 
    for(int i =0;i<rowMinima.length;i++){ 
     if(i == 0) { 
      maxVal= rowMinima[i]; 
      rowIndx = i; 
     } else { 
      if(rowMinima[i]>maxVal){ 
       maxVal= rowMinima[i]; 
       rowIndx = i; 
      } 
     } 

    } 
    if(minVal == maxVal){ 
     System.out.println("We Have Saddle Point "+maxVal+" at ("+(rowIndx+1)+","+(colIndx+1)+")"); 
    } else { 
     System.out.println("There is no saddle point"); 
    } 

} 
public static void main(String[] args) { 
    SaddlePoint sp = new SaddlePoint(3, 4); 
    sp.run(); 
} 

} 

에 따라 당신은 당신의 필요에 따라 실행 방법을 수정할 수 있습니다. 실행 방법 안장 포인트를 계산하고있다

+0

고맙지 만 intMatrix에 대한 메서드가 필요합니다. 매개 변수 (IntMatrix m, int [] rows, int [] cols)를 사용해야합니다. 나는 약간 연구를했지만 어떤 것도 발견 할 수 없다 .. – StephMary0812

+0

나는 내 프로그램에 필요한 요구 사항을 게시했다. – StephMary0812