0Pricing
C++ Academy · Ders

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 = 120

Baş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 6

std::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:

  • reduce paralel çalışabilir
  • reduce iş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 = 32

std::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

  1. Değiştirmeyen Algoritmalar: find, count, all_of
  2. Değiştiren Algoritmalar: transform, copy_if, replace
  3. Sıralama ve Bölümleme: sort, stable_partition
  4. Sayısal Algoritmalar: accumulate, reduce, transform_reduce
← C++ Academy Sayfasına Dön