هذا مشروع يهدف إلى أن يكون تنفيذ كتب نصية لهياكل البيانات الشائعة والخوارزميات. ويوفر كل من التنفيذ التجريبي واختبارات الوحدة.
يهدف الرمز إلى أن يكون نظيفًا وبسيطًا ، والكفاءة ليست الهدف الرئيسي. سأكتب التنفيذ الأكثر كفاءة من حيث تعقيد الحساب أو توفير تنفيذ الإصدارات المختلفة.
مثال رمز:
template < class Iter >
void linearInsert (Iter first, Iter last)
{
auto insertionPoint = std::upper_bound (first, last, *last);
std::rotate (insertionPoint, last, last + 1 );
}
template < class Iter >
void insertionSort (Iter first, Iter last)
{
// [begin, p) sorted
// [p, end) to be processed
for ( auto p = first; p != last; ++p) {
linearInsert (first, p);
}
}إذا كنت ترغب في ممارسة مهارات الترميز الخاصة بك ، فما عليك سوى تنزيل المشروع وإعادة كتابة الخوارزميات ذات الصلة وتشغيل اختبارات الوحدة بنفسك.
عندما تقوم بتنفيذ خوارزمية تتطلب خوارزميات أخرى أو هياكل البيانات ، يمكنك ببساطة استخدام التنفيذ الحالي في المكتبة القياسية أو في الريبو والتركيز على الأفكار الرئيسية ، على سبيل المثال:
template < class Iter >
void quickSort (Iter first, Iter last)
{
if (last - first <= 1 ) {
return ;
}
auto partitionPoint = partition (first, last);
quickSort (first, partitionPoint);
quickSort (partitionPoint, last);
} في المثال أعلاه ، يضمن partition (الذي تم تنفيذه في REPO) إرجاع نسلتين غير فارغتين إذا كان طول نطاق الإدخال إذا كان أكبر من واحد ، حيث نؤكد أن كلا من مكالمات العودية التالية ستحدث على أبعاد أصغر.
رحب بك للمساهمة في هذا المشروع من خلال: