Algoritma Numerik: accumulate, reduce, transform_reduce
Agregasikan rentang numerik dengan accumulate, reduce, dan transform_reduce yang sesuai untuk paralelisme
Algoritma Numerik: accumulate, reduce, transform_reduce adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Berkas Header <numeric>
Algoritme numerik bekerja pada rentang angka. Algoritme tersebut tersedia dalam <numeric>.
std::accumulate
Reduksi klasik. Secara bawaan menjumlahkan — berikan operasi biner kustom untuk reduksi lain.
#include <numeric>
std::vector<int> v = {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0);
// sum = 15Reduksi Kustom
Berikan nilai awal dan operasi biner.
int product = std::accumulate(v.begin(), v.end(), 1,
std::multiplies<int>{});
// product = 120Tipe Nilai Awal Penting
Tipe akumulator diturunkan dari nilai awal. Berikan 0.0 untuk mengakumulasikan nilai pecahan presisi ganda ke dalam tipe yang sama.
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)
Seperti accumulate, tetapi operasinya harus asosiatif dan komutatif — sehingga evaluasi paralel dimungkinkan.
#include <numeric>
#include <execution>
std::vector<int> v(1000);
int sum = std::reduce(std::execution::par,
v.begin(), v.end(), 0);reduce vs accumulate
Dua perbedaan:
reducedapat berjalan secara paralelreducetidak menjamin urutan operasi — tidak masalah untuk + dan *, tetapi bermasalah untuk operasi yang tidak asosiatif seperti penggabungan string
std::transform_reduce (C++17)
Menggabungkan transformasi dan reduksi dalam satu lintasan. Lebih cepat dan lebih ekspresif daripada transformasi + reduksi yang terpisah.
// 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
Saudara yang lebih lama dari transform_reduce. Menghitung hasil kali dalam (produk titik) dari dua rentang. Kurang umum, tetapi memiliki antarmuka yang lebih sederhana.
std::partial_sum
Menuliskan total berjalan ke rentang keluaran.
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
Kebalikan dari partial_sum — menuliskan selisih antara elemen-elemen yang berurutan.
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}Catatan tentang Bilangan Titik Mengambang
Untuk bilangan titik mengambang, urutan akumulasi penting karena pembulatan. reduce dapat memberikan hasil yang sedikit berbeda dari accumulate karena urutan evaluasinya tidak ditentukan.
Kasus Penggunaan di Dunia Nyata
Algoritme numerik mendukung:
- Perhitungan jumlah dan hasil kali
- Agregat statistik (rata-rata, varians)
- Produk titik dan norma dalam aljabar linear
- Jumlah kumulatif untuk kueri prefiks
Pemeriksaan Singkat
Algoritme C++17 mana yang melakukan reduksi paralel pada suatu rentang dengan satu pemanggilan fungsi?
Ringkasan
<numeric> menyediakan accumulate, reduce, transform_reduce, partial_sum, dan adjacent_difference untuk reduksi numerik dan operasi prefiks. Pilih reduce untuk paralelisme dan accumulate untuk urutan yang deterministik.
Belajar C++ dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Algoritma Numerik: accumulate, reduce, transform_reduce” gratis?
Ya — teks lengkap “Algoritma Numerik: accumulate, reduce, transform_reduce” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Algoritma Numerik: accumulate, reduce, transform_reduce”?
Agregasikan rentang numerik dengan accumulate, reduce, dan transform_reduce yang sesuai untuk paralelisme Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Algoritma Numerik: accumulate, reduce, transform_reduce” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Algoritma Tanpa Modifikasi: find, count, all_of
- Modifikasi: transform, copy_if, replace
- Pengurutan dan Partisi: sort, stable_partition
- Algoritma Numerik: accumulate, reduce, transform_reduce