Bölüm 14: Polinomlar ve Seyrek Matrisler

Yoğun olmayan veriyi yalnız anlamlı öğelerle saklamak
Polinom terimiSıralı terimlerToplamaÜçlü gösterimTranspozÇarpma
C ile Veri Yapıları · İki ciltlik ders notları temel alınmıştır

Hazırlık

Başlamadan Önce

C ön bilgisi

Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.

İlk kavram

Polinom terimi ve Sıralı terimler

Bu bölümün hedefi

Yalnız sıfır olmayan terimleri üs sırasıyla tutmak.

Başlangıç sorusu

Polinom terimleri neden sıralı tutulur?

Giriş

Öğrenme Çıktıları

Polinomu temsil etmek

Yalnız sıfır olmayan terimleri üs sırasıyla tutmak.

Merge mantığını kullanmak

Eşit üsleri birleştirerek iki polinomu toplamak.

Seyrek matrisi sıkıştırmak

Satır, sütun, değer üçlüleriyle sıfırları saklamamak.

Hızlı transpoz yapmak

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.

Polinom

Her terim katsayı ve üs taşır.

Sıralı terimler

Toplama işlemini merge benzeri yapar.

Üçlü

Matris öğesi satır, sütun ve değerle gösterilir.

Başlık

Boyutlar ve sıfır olmayan öğe sayısı saklanır.

Temel Kavramlar

Kavram Haritası

1Polinom terimi
2Sıralı terimler
3Toplama
4Üçlü gösterim
5Transpoz
6Çarpma
Veri seyrekse, sabit boyutlu yoğun dizi yerine yalnız var olan terimleri saklamak hem alanı hem taramayı azaltır.

Gösterim

5×6 matriste yalnız dört değer var

satırsütundeğer
038
115
3412
407
30 hücre yerine 4 üçlü ve bir başlık saklanır.

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;
Tür tanımı veri yapısının bellekteki biçimini; yordamlar ise bu yapı üzerindeki davranışı kurar.

C ile Gerçekleştirim

C'de Bellek ve Sahiplik

Sahip kim?

Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.

Yaşam süresi

Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.

Sınırlar

Boyut, kapasite ve geçerli indisleri her işlemde koru.

Boş durum

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;
    }
}
Kod örnekleri C99/C11 uyumlu olacak biçimde küçük ve tek sorumluluklu tutulmuştur.

Temel İşlemler

Kodu Okurken

Ön koşul

Polinom terimleri neden sıralı tutulur?

Değişmez

Her adımda polinom kuralı korunuyor mu?

Son koşul

Eşit üsleri birleştirerek iki polinomu toplamak.

Hata yolu

Terimleri üs sırasından çıkarmak

Adım Adım

Hızlı transpoz

Sütunları say

Her hedef satırda kaç öğe olacağını bul.

Başlangıçları çıkar

Kümülatif toplamla her hedef satırın ilk indisini hesapla.

Tekrar tara

Her üçlüyü hedef konumuna yerleştir.

Sonuç

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

İşlemZamanEk bellek
Polinom toplamaO(n+m)O(n+m)
Sıradan transpozO(sütun·öğe)O(öğe)
Hızlı transpozO(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?

Yoğun dizi

Hücrelerin çoğu doluysa.

Üçlü dizi

Sıfır olmayan öğe sayısı küçük ve toplu işleme yapılacaksa.

Satır listeleri

Satır bazlı ekleme ve dolaşım sık yapılacaksa.

CSR/CSC

Büyük sayısal işlemlerde sıkıştırılmış erişim gerekiyorsa.

Dikkat

Sık Yapılan Hatalar

1Sıfır katsayılı terimi sonuçta bırakmak
2Terimleri üs sırasından çıkarmak
3Transpozda satır ve sütunu değiştirip sıralamayı bozmamak
4Seyrek çarpım sonucunun seyrek olacağını varsaymak

Alıştırmalar

Kendini Sına

  1. Polinom terimleri neden sıralı tutulur?
  2. Üçlü gösterimin başlığında ne bulunur?
  3. Hızlı transpoz neyi önceden sayar?
  4. Seyrek gösterim ne zaman kaybettirir?
  5. İki seyrek matrisin çarpımı mutlaka seyrek midir?
Cevapları göster
  1. Eşit üsleri merge mantığıyla doğrusal zamanda bulmak için.
  2. Satır, sütun ve sıfır olmayan öğe sayısı.
  3. Her sütundaki öğe sayısını.
  4. Matris yoğunlaştığında üçlülerin ek alanı avantajı yok eder.
  5. Hayır.

Uygulama

Mini Laboratuvar

1 · Çiz

Polinom terimleri neden sıralı tutulur?

2 · Kodla

Hızlı transpoz neyi önceden sayar?

3 · Ölç

İki seyrek matrisin çarpımı mutlaka seyrek midir?

Teslim: küçük bir C modülü, üç uç test ve zaman/bellek karmaşıklığı tablosu.

Özet

Bölüm Özeti

Yalnız anlamlı öğe

Sıfırları saklamayarak alan kazan.

Sıra algoritmayı hızlandırır

Polinom toplama doğrusal olur.

Ön sayım

Hızlı transpoz tekrarlı taramayı kaldırır.

Özet

Kaynaklar ve Devam

Son

Bölüm 14: Polinomlar ve Seyrek Matrisler
Ders planına dön
1 / 1 C ile Veri Yapıları

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt