e798 - p5. 卷積神經網路
題目描述
題目要求實作一個 2x2 最大池化演算法,輸入一個 n x n 的二維陣列,輸出池化後的結果。池化操作將輸入陣列劃分為若干個 2x2 的子區域,並輸出每個子區域的最大值。
解題思路
程式碼直接模擬了最大池化操作。它遍歷輸入陣列,每次處理一個 2x2 的子區域。在每個子區域中,它比較四個元素的值,並將最大值賦給對應位置的輸出陣列。由於題目要求輸出的是池化後的結果,程式碼只輸出了子區域左上角元素的結果。程式碼使用異或運算來交換數值,以找到每個 2x2 區域的最大值。
複雜度分析
- 時間複雜度: O(n^2)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int a[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i+=2){
for(int j=0;j<n;j+=2){
if(a[i][j]<a[i+1][j]){
a[i][j]^=a[i+1][j];
a[i+1][j]^=a[i][j];
a[i][j]^=a[i+1][j];
}
if(a[i][j]<a[i][j+1]){
a[i][j]^=a[i][j+1];
a[i][j+1]^=a[i][j];
a[i][j]^=a[i][j+1];
}
if(a[i][j]<a[i+1][j+1]){
a[i][j]^=a[i+1][j+1];
a[i+1][j+1]^=a[i][j];
a[i][j]^=a[i+1][j+1];
}
}
}
for(int i=0;i<n;i+=2){
for(int j=0;j<n;j+=2)
printf("%d ",a[i][j]);
printf("\n");
}
}