C Vs C ++ Vs C ++ 14 (Параўнанне часу працы)

Падчас праграмавання часам вы, магчыма, апынуліся ў становішчы, калі вы маеце выбар займацца гэтым пытаннем на C і C ++ ці C ++ 14, то вырашальным фактарам з'яўляецца час працы і здольнасць праграмы адаптавацца да зменаў у будучыню. Тут C ++, C ++ 14 маюць перавагу над C, паколькі ён мае супер-загадзя вызначаныя функцыі ў сваёй бібліятэцы пад назвай Стандартная бібліятэка шаблонаў, шырока вядомы як STL, якая ўяўляе сабой набор класаў шаблонаў C ++ для забеспячэння агульных структур дадзеных праграмавання і функцый, такіх як спісы, стэкі , масівы і г.д. Гэта бібліятэка кантэйнерных класаў, алгарытмаў і ітэратараў, якая дазваляе зэканоміць шмат часу, прадастаўляючы праграмістам розныя структуры дадзеных пры націску.

Асноўная розніца паміж C і C ++ заключаецца ў тым, што C з'яўляецца працэдурнай мовай праграмавання і не падтрымлівае класы і аб'екты, у той час як C ++ з'яўляецца спалучэннем працэдурнай і аб'ектна-арыентаванай мовы праграмавання; таму C ++ можна назваць гібрыднай мовай.

Цяпер вы падышлі да таго, што вы, магчыма, чулі, што C ++ павольней, чым на C, але вы бачылі статыстыку? Правёўшы нязначныя змены ў праграме, мы можам зрабіць праграму C ++ запуск у той жа час, а часам і хутчэй, чым адпаведная праграма, напісаная на З. Тут я ўзяў два пытанні па бінарным пошуку, а потым закадаваў іх у C і C ++ і C ++ 14, а потым параўнаў іх час працы.

Калі вы звычайна выкарыстоўваеце cin / cout у C ++, наступная мадыфікацыя можа быць вельмі карыснай. Проста ўключыце яго ў пачатку праграмы і выкарыстоўвайце яго ў асноўным, і вам добра ісці.

Тут вы знойдзеце тое, што робіцца.

Q1. Таямніца мыла

Гэта агульны бінарны пытанне пошуку, у якім задаюцца q запыты, і мы павінны двайковы пошук q колькасць разоў па n элементах і ідэнтыфікатар яго складанасці O (Q * Log (N)), дзе N няма элементаў у масіве.

Вы можаце знайсці рашэнне тут.

Кадыроўка і запуск яе ў вялікіх тэставых выпадках - вось, што я атрымаў.

Час працы Q1 з дапамогай G ++ 5.4.0

Вы можаце выразна бачыць, што C значна хутчэй, чым C ++ 14, але трэба заўважыць, што пры выкарыстанні гэтай мадыфікацыі (павышэння) добра відаць, што C ++ 14 і C ++ пераўзыходзяць С у часе выканання (у выпадку вялікія тэставыя выпадкі).

Q2. Пачатак распрацоўкі гульняў

Гэта просты ў сярэднім пытанне, які ўключае ў сябе N двайковага пошуку на 2-м масіве з N радкоў і M слупкоў, а затым пошук мінімальнага адказу, атрыманага ў кожным радку, які з'яўляецца нашым канчатковым адказам. Складанасць аказваецца O (Nlog (M)).

Рашэнне можна знайсці тут.

Цяпер гэта кадаванне на трох розных мовах: вось, што я атрымаў:

Час працы Q2 з дапамогай G ++ 5.4.0

Тут таксама выразна відаць, што C перавышае C ++ 14, але пры дапамозе гэтай мадыфікацыі C ++ хутчэй, чым C.

Некаторыя з іх нават разблакуюцца getchar () (хаця гэта і ёсць уцечка бяспекі), што з'яўляецца самым хуткім сярод усіх іх, паколькі ён непасрэдна чытае і піша, выкарыстоўваючы рэгістр, абыходзячы патокі паміж імі (выкарыстоўваецца толькі калі час выклікае вялікую праблему). Часам межы ў пытаннях бываюць настолькі строгімі, што гэтыя мадыфікацыі гуляюць вырашальнае правіла, і без іх можна атрымаць TLE.

Укладальнік таксама гуляе вырашальную ролю. Два з іх - G ++ 5.4.0 і CLANG. Кампілятар - гэта камп'ютэрная праграма (альбо набор праграм), якая пераўтварае зыходны код, напісаны на мове праграмавання (мова крыніцы), у іншую кампутарную мову (мову, мэтавую), прычым апошняя часта мае двайковую форму, якую называюць аб'ектным кодам. Лепш будзе кампілятар, які можа зрабіць гэтую працу хутчэй.

PROS GCC

1. GCC падтрымлівае мовы, на якія кланг не імкнецца, напрыклад, Java, Ada, FORTRAN, Go і г.д.

2. GCC падтрымлівае мноства моўных пашырэнняў, некаторыя з якіх не рэалізаваны Clang. Напрыклад, у рэжыме C, GCC падтрымлівае укладзеныя функцыі і мае пашырэнне, якое дазваляе VLA ў структурах.

ЗА КЛАНГ

  1. Clang значна хутчэй і выкарыстоўвае значна менш памяці, чым GCC.
  2. Падтрымка Кланга для C ++ у многіх адносінах больш сумяшчальная, чым GCC.
  3. Clang падтрымлівае мноства моўных пашырэнняў, некаторыя з якіх не рэалізаваны GCC. Напрыклад, Clang падае атрыбуты для праверкі бяспекі тэмы і пашыраных тыпаў вектараў.
  4. Clang быў распрацаваны з самага пачатку, каб забяспечыць надзвычай ясную і сціснутую дыягностыку (паведамленні пра памылкі і папярэджання) і ўключае падтрымку экспрэсіўнай дыягностыкі.

Такім чынам, я завяршаю маю цікавую дзейнасць па параўнанні часу выканання дзвюх найбольш часта выкарыстоўваюцца моў у камп'ютэрным праграмаванні, якія выкарыстоўваюць двайковы пошук у якасці стрыжня. Я спадзяюся, што вы прачыталі некаторыя веды, прачытаўшы гэта, і зможаце выбраць мову праграмавання лепш.

Шчаслівага чытання!