مسیرها
/
C++
C++
/
تمرین‌ها
/
فراوانی موازی حروف
فراوانی موازی حروف

فراوانی موازی حروف

متوسط

دستورالعمل‌ها

فراوانی حروف را در متن‌ها با استفاده از محاسبات موازی بشمارید.

موازی‌سازی یعنی کارهایی را به‌صورت موازی انجام دهیم که می‌توان آن‌ها را به‌صورت متوالی هم انجام داد. یک مثال رایج، شمردن فراوانی حروف است.

برای محاسبه‌ی فراوانی کل هر حرف در فهرستی از متن‌ها، از موازی‌سازی استفاده کنید.

نکات تکمیلی برای پیاده‌سازی در C++

راه‌های مختلفی برای رسیدن به موازی‌سازی در C++ وجود دارد. اجراکننده‌ی آنلاین Exercism از C++17 پشتیبانی می‌کند، بنابراین می‌توانید از سیاست‌های اجرا در کتابخانه‌ی الگوریتم‌ها استفاده کنید. گزینه‌ی دیگر، مدیریت دستی ریسه‌ها است. با این حال، توجه داشته باشید که ساختن یک ریسه نسبتاً پرهزینه است (استفاده از یک استخر ریسه کمک می‌کند).

وقتی به‌صورت محلی کار می‌کنید، طبیعتاً می‌توانید هر چه می‌خواهید به کار ببرید. با این حال، راه‌حلی که از کتابخانه‌های غیراستاندارد استفاده کند، به احتمال زیاد با اجراکننده‌ی آنلاین Exercism کار نخواهد کرد.

بنچمارک

وقتی به‌صورت محلی کار می‌کنید، می‌توانید به‌صورت اختیاری یک بنچمارک اجرا کنید تا تصوری از میزان افزایش سرعت پیاده‌سازی‌های مختلف به دست آورید. فعال کردن گزینه‌ی CMake با نام EXERCISM_INCLUDE_BENCHMARK بنچمارک را فعال می‌کند:

cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .

پشتیبانی کامپایلر از الگوریتم‌های موازی

پیاده‌سازی کتابخانه‌ی استاندارد C++ در GCC (یعنی libstdc++) به TBB وابسته است. اگر TBB در دسترس نباشد، حتی وقتی اجرای موازی درخواست شده باشد، به یک نسخه‌ی ترتیبی بازگشت داده می‌شود.

در Ubuntu باید بسته‌ی libtbb-dev را نصب کنید:

apt-get install libtbb-dev

در macOS می‌توانید با Homebrew، TBB را نصب کنید:

brew install tbb

libc++ در Clang از نسخه‌ی ۱۷ به بعد پشتیبانی آزمایشی و نسبی از الگوریتم‌های موازی دارد. برای فعال کردن آن، باید گزینه‌ی کامپایلر -fexperimental-library را بدهید.

Apple Clang ۱۵ و نسخه‌های پیش‌تر از آن، از الگوریتم‌های موازی پشتیبانی نمی‌کنند.

در Linux و macOS توصیه می‌کنیم برای این تمرین از GCC (همراه با libstdc++ پیش‌فرض) استفاده کنید.

MSVC مایکروسافت، دست‌کم از VS ۲۰۱۷ ۱۵.۷ به بعد، بدون نیاز به نصب کتابخانه‌ی اضافی از الگوریتم‌های موازی پشتیبانی می‌کند.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C++ Exercism

آماده‌اید فراوانی موازی حروف را شروع کنید؟

در Exercism ثبت‌نام کنید تا C++ را همراه با 19 مفهوم100 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.

بررسی عمیق فراوانی موازی حروف!

ما تفاوت‌های میان هم‌روندی و موازی‌سازی را بررسی می‌کنیم و به رویکردهای متفاوتی که زبان‌هایی مانند JavaScript، Go، Elixir و Rust در پیش می‌گیرند نگاه می‌کنیم.