Sayısal Algoritmalar: accumulate, reduce, transform_reduce
Sayısal aralıkları accumulate, reduce ve paralel kullanıma uygun transform_reduce ile birleştirin
Sayısal Algoritmalar: accumulate, reduce, transform_reduce, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
<numeric> Başlığı
Sayısal algoritmalar sayı aralıkları üzerinde çalışır. Bu algoritmalar <numeric> içinde bulunur.
std::accumulate
Klasik indirgeme algoritmasıdır. Varsayılan olarak toplama yapar; başka indirgemeler için özel bir ikili işlem geçirin.
#include <numeric>
std::vector<int> v = {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0);
// sum = 15Özel İndirgeme
Bir başlangıç değeri ve ikili işlem sağlayın.
int product = std::accumulate(v.begin(), v.end(), 1,
std::multiplies<int>{});
// product = 120Başlangıç Değerinin Türü Önemlidir
Birikim değişkeninin türü başlangıç değerinden çıkarılır. Ondalık değerleri double türünde biriktirmek için 0.0 sağlayın.
std::vector<double> v = {1.5, 2.5, 3.5};
double sum_d = std::accumulate(v.begin(), v.end(), 0.0); // 7.5
int sum_i = std::accumulate(v.begin(), v.end(), 0); // truncates to 6std::reduce (C++17)
accumulate gibidir, ancak işlemin birleşme özelliğine ve değişme özelliğine sahip olması gerekir; bu da paralel değerlendirmeye olanak tanır.
#include <numeric>
#include <execution>
std::vector<int> v(1000);
int sum = std::reduce(std::execution::par,
v.begin(), v.end(), 0);reduce ve accumulate karşılaştırması
İki fark vardır:
reduceparalel çalışabilirreduceişlem sırasını garanti etmez — + ve * için uygundur, ancak dize birleştirme gibi birleşme özelliğine sahip olmayan işlemlerde bozulur
std::transform_reduce (C++17)
Bir dönüştürme ile indirgemeyi tek geçişte birleştirir. Ayrı bir transform ve reduce kullanımından daha hızlı ve daha ifade edicidir.
// Dot product
std::vector<int> a = {1, 2, 3}, b = {4, 5, 6};
int dot = std::transform_reduce(
a.begin(), a.end(), b.begin(),
0,
std::plus<int>{}, // reduce
std::multiplies<int>{} // transform
);
// dot = 1*4 + 2*5 + 3*6 = 32std::inner_product
transform_reduce algoritmasının daha eski eşdeğeridir. İki aralığın iç çarpımını hesaplar. Daha az geneldir, ancak arayüzü daha basittir.
std::partial_sum
Ardışık toplamları bir çıktı aralığına yazar.
std::vector<int> v = {1, 2, 3, 4};
std::vector<int> sums(4);
std::partial_sum(v.begin(), v.end(), sums.begin());
// sums = {1, 3, 6, 10}std::adjacent_difference
partial_sum işleminin tersidir; ardışık öğeler arasındaki farkları yazar.
std::vector<int> v = {1, 3, 6, 10};
std::vector<int> diffs(4);
std::adjacent_difference(v.begin(), v.end(), diffs.begin());
// diffs = {1, 2, 3, 4}Kayan Nokta Uyarısı
Kayan noktalı sayılarda yuvarlama nedeniyle biriktirme sırası önemlidir. Belirtilmemiş değerlendirme sırası nedeniyle reduce, accumulate'ten biraz farklı sonuçlar verebilir.
Gerçek Dünya Kullanım Alanları
Sayısal algoritmalar şu işlemlere güç sağlar:
- Toplam ve çarpım hesaplamaları
- İstatistiksel toplamalar (ortalama, varyans)
- Doğrusal cebirde iç çarpımlar ve normlar
- Önek sorguları için birikimli toplamlar
Hızlı Kontrol
Bir aralığı tek bir işlev çağrısıyla paralel olarak indirgeyen C++17 algoritması hangisidir?
Özet
<numeric>, sayısal indirgemeler ve önek işlemleri için accumulate, reduce, transform_reduce, partial_sum ve adjacent_difference işlevlerini sağlar. Paralel çalışma için reduce, belirli bir sıra için accumulate seçin.
Sıkça Sorulan Sorular
“Sayısal Algoritmalar: accumulate, reduce, transform_reduce” dersi ücretsiz mi?
Evet — “Sayısal Algoritmalar: accumulate, reduce, transform_reduce” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Sayısal Algoritmalar: accumulate, reduce, transform_reduce” dersinde ne öğreneceğim?
Sayısal aralıkları accumulate, reduce ve paralel kullanıma uygun transform_reduce ile birleştirin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Sayısal Algoritmalar: accumulate, reduce, transform_reduce” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Değiştirmeyen Algoritmalar: find, count, all_of
- Değiştiren Algoritmalar: transform, copy_if, replace
- Sıralama ve Bölümleme: sort, stable_partition
- Sayısal Algoritmalar: accumulate, reduce, transform_reduce