Giriş
İki boyutlu bir diziyi veya matrisi döndürmek, programlamada farklı uygulamalarda karşılaşılabilen yaygın bir problemdir, özellikle bilgisayar grafikleri ve veri manipülasyonu alanında. Bu blog yazısında, 4x4 bir matrisi 90 derece saat yönünde döndürme sürecine derinlemesine dalacağız.
Problemi Anlamak
Diyelim ki, yapılandırılmış bir iki boyutlu diziniz var:
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
Bu matrisi 90 derece saat yönünde döndürdüğünüzde, aşağıdaki forma dönüşmesi gerekir:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
Pratikte, orijinal dizideki her eleman, döndürmeye bağlı olarak yeni bir pozisyona kaydırılır. Peki bunu C# gibi bir programlama dilinde nasıl uygulayacağız? Bunu adım adım kırarak inceleyelim.
Çözüm
Adım 1: Matrisi Başlatma
Öncelikle, programımızda matrisi başlatmalıyız. Bunu şu şekilde yapabilirsiniz:
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
Adım 2: Matrisi Döndüren Bir Fonksiyon Oluşturma
Sonra, gerekli döndürmeyi gerçekleştiren RotateMatrix
adında bir fonksiyon oluşturacağız. Bu fonksiyon, orijinal matrisi ve boyutunu parametre olarak alacak ve döndürülen matrisi döndürecektir.
RotateMatrix
fonksiyonunun uygulanışı aşağıdaki gibidir:
static int[,] RotateMatrix(int[,] matrix, int n) {
int[,] ret = new int[n, n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
ret[i, j] = matrix[n - j - 1, i];
}
}
return ret;
}
Adım 3: Fonksiyonun Açıklaması
- Matris Deklarasyonu: Girişteki aynı boyutta yeni bir matris
ret
tanımlanır. - İç İçe Döngüler: Matrisin her elemanını gezmek için iç içe döngü kullanılır.
- Döndürme Mantığı:
(i, j)
pozisyonundaki her eleman, yeni pozisyon olan(j, n - i - 1)
‘e eşleştirilir. Bu formül, elemanların 90 derece saat yönünde doğru bir şekilde döndürülmesine yardımcı olur.
Adım 4: Fonksiyonu Test Etme
Fonksiyonu çağırarak ve döndürülen matrisi yazdırarak test edebilirsiniz:
int[,] rotated = RotateMatrix(array, 4);
Doğrulama için matrisin yazdırılmasını sağlayacak bir yöntem uyguladığınızdan emin olun.
Sonuç
İki boyutlu bir diziyi döndürmek, indekslerin eşlemesini anladığınızda basit bir iştir. Mevcut yaklaşım O(n^2) zaman karmaşıklığıyla çalışırken, daha büyük matrisler için (örneğin 10000x10000) algoritmaları optimize etme, algoritmalar ve veri yapıları alanında devam eden bir tartışmadır.
Artık C# ile herhangi bir iki boyutlu diziyi güvenle döndürebilirsiniz. Mutlu kodlamalar!