Bölüm 14: Polinomlar ve Seyrek Matrisler
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Polinom terimi ve Sıralı terimler
Yalnız sıfır olmayan terimleri üs sırasıyla tutmak.
Polinom terimleri neden sıralı tutulur?
Giriş
Öğrenme Çıktıları
Yalnız sıfır olmayan terimleri üs sırasıyla tutmak.
Eşit üsleri birleştirerek iki polinomu toplamak.
Satır, sütun, değer üçlüleriyle sıfırları saklamamak.
Sütun sayımlarıyla tek ek taramada hedef konumları bulmak.
Temel Kavramlar
Sıfırları saklamak bazen asıl maliyettir
Veri seyrekse, sabit boyutlu yoğun dizi yerine yalnız var olan terimleri saklamak hem alanı hem taramayı azaltır.
Her terim katsayı ve üs taşır.
Toplama işlemini merge benzeri yapar.
Matris öğesi satır, sütun ve değerle gösterilir.
Boyutlar ve sıfır olmayan öğe sayısı saklanır.
Temel Kavramlar
Kavram Haritası
Gösterim
5×6 matriste yalnız dört değer var
| satır | sütun | değer |
|---|---|---|
| 0 | 3 | 8 |
| 1 | 1 | 5 |
| 3 | 4 | 12 |
| 4 | 0 | 7 |
C ile Gerçekleştirim
Terim ve üçlü türleri
typedef struct { double katsayi; int us; } Terim;
typedef struct { int satir, sutun, deger; } Uclu;
typedef struct {
Uclu *oge;
int satir_sayisi, sutun_sayisi, adet;
} SeyrekMatris;C ile Gerçekleştirim
C'de Bellek ve Sahiplik
Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.
Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.
Boyut, kapasite ve geçerli indisleri her işlemde koru.
NULL, boş yapı ve tek öğe durumlarını özellikle sıfır katsayılı terimi sonuçta bırakmak riskiyle birlikte test et.
Temel İşlemler
Polinom toplamada eşit üsleri birleştir
while (i < na && j < nb) {
if (a[i].us > b[j].us) c[k++] = a[i++];
else if (a[i].us < b[j].us) c[k++] = b[j++];
else {
c[k] = (Terim){a[i].katsayi + b[j].katsayi, a[i].us};
++i; ++j; if (c[k].katsayi != 0) ++k;
}
}Temel İşlemler
Kodu Okurken
Polinom terimleri neden sıralı tutulur?
Her adımda polinom kuralı korunuyor mu?
Eşit üsleri birleştirerek iki polinomu toplamak.
Terimleri üs sırasından çıkarmak
Adım Adım
Hızlı transpoz
Her hedef satırda kaç öğe olacağını bul.
Kümülatif toplamla her hedef satırın ilk indisini hesapla.
Her üçlüyü hedef konumuna yerleştir.
O(sütun + öğe) zamanda transpoz elde edilir.
Sınıf Notu
Dersten Sesler
“Dizi aç, n. indis n. üssü tutsun. SAKIN HA!”
“Bir kez daha tarayıp işi iki taramada bitirebiliyorsak, her sütun için baştan dolaşmayacağız.”
Notlardaki sınıf içi anlatımdan, yazım ve uzunluk bakımından sunuma uyarlanmıştır.
Analiz
Karmaşıklık Özeti
| İşlem | Zaman | Ek bellek |
|---|---|---|
| Polinom toplama | O(n+m) | O(n+m) |
| Sıradan transpoz | O(sütun·öğe) | O(öğe) |
| Hızlı transpoz | O(sütun+öğe) | O(sütun) |
| Yoğun matris alanı | — | O(rc) |
| Seyrek matris alanı | — | O(t) |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Hücrelerin çoğu doluysa.
Sıfır olmayan öğe sayısı küçük ve toplu işleme yapılacaksa.
Satır bazlı ekleme ve dolaşım sık yapılacaksa.
Büyük sayısal işlemlerde sıkıştırılmış erişim gerekiyorsa.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- Polinom terimleri neden sıralı tutulur?
- Üçlü gösterimin başlığında ne bulunur?
- Hızlı transpoz neyi önceden sayar?
- Seyrek gösterim ne zaman kaybettirir?
- İki seyrek matrisin çarpımı mutlaka seyrek midir?
Cevapları göster
- Eşit üsleri merge mantığıyla doğrusal zamanda bulmak için.
- Satır, sütun ve sıfır olmayan öğe sayısı.
- Her sütundaki öğe sayısını.
- Matris yoğunlaştığında üçlülerin ek alanı avantajı yok eder.
- Hayır.
Uygulama
Mini Laboratuvar
Polinom terimleri neden sıralı tutulur?
Hızlı transpoz neyi önceden sayar?
İki seyrek matrisin çarpımı mutlaka seyrek midir?
Özet
Bölüm Özeti
Sıfırları saklamayarak alan kazan.
Polinom toplama doğrusal olur.
Hızlı transpoz tekrarlı taramayı kaldırır.
Özet
Kaynaklar ve Devam
- VYA1 diziler ve yapılar bölümü, polinom ve seyrek matris uygulamaları
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt