ភាពស្មុគស្មាញនៃក្បួនដោះស្រាយជាចម្បងដោះស្រាយធនធានពីរ៖
ពេលវេលា
(រយៈពេលអនុវត្ត) និង
លំហ
(ការប្រើប្រាស់អង្គចងចាំ) ។ ខណៈពេលដែលភាពស្មុគស្មាញពេលវេលាវាស់ស្ទង់ពីរបៀបដែលពេលរត់កើនឡើងជាមួយនឹងទំហំបញ្ចូល (
ន
) ភាពស្មុគស្មាញនៃលំហ វាយតម្លៃការប្រើប្រាស់អង្គចងចាំ។ ឧទាហរណ៍៖
- ក្បួនដោះស្រាយជាមួយ
O(n)
ភាពស្មុគស្មាញពេលវេលាធ្វើមាត្រដ្ឋានតាមលីនេអ៊ែរជាមួយនឹងទំហំបញ្ចូល។
- ក្បួនដោះស្រាយជាមួយ
O(1)
ភាពស្មុគស្មាញនៃលំហប្រើប្រាស់អង្គចងចាំថេរដោយមិនគិតពីទំហំបញ្ចូល។
សូចនាករទាំងពីរគឺចាំបាច់។ ក្បួនដោះស្រាយដែលមានល្បឿនលឿនអាចធ្វើអោយអង្គចងចាំអស់អស់នៅលើសំណុំទិន្នន័យធំ ខណៈដែលក្បួនដោះស្រាយដែលមានប្រសិទ្ធភាពអង្គចងចាំអាចយឺតពេកសម្រាប់កម្មវិធីក្នុងពេលជាក់ស្តែង។
ប្រសិទ្ធភាពកំណត់លទ្ធភាព។ ពិចារណាតម្រៀបបញ្ជីនៃធាតុ 10 ធៀបនឹង 10 លាន៖
- A
តម្រៀបពពុះ
(
O(n)
) អាចគ្រប់គ្រាន់សម្រាប់សំណុំទិន្នន័យតូចៗ ប៉ុន្តែមិនអាចអនុវត្តបានសម្រាប់ឯកសារធំ។
- A
តម្រៀបបញ្ចូលគ្នា
(
O(n log n)
) គ្រប់គ្រងសំណុំទិន្នន័យធំជាងនេះយ៉ាងរលូន ប៉ុន្តែត្រូវការអង្គចងចាំបន្ថែម។
ការវិភាគភាពស្មុគ្រស្មាញផ្តល់នូវភាសាសកលដើម្បីប្រៀបធៀបក្បួនដោះស្រាយ ដោយដកចេញនូវព័ត៌មានលម្អិតជាក់លាក់នៃផ្នែករឹង។ វាផ្តល់អំណាចដល់អ្នកអភិវឌ្ឍន៍ក្នុងការទស្សន៍ទាយលទ្ធភាពធ្វើមាត្រដ្ឋាន និងជៀសវាងការជាប់គាំងនៅក្នុងប្រព័ន្ធសំខាន់ៗ។
សញ្ញាណ asymptotic ពិពណ៌នាអំពីឥរិយាបថកំណត់នៃមុខងារ ដោយផ្តល់នូវពាក្យខ្លីសម្រាប់ភាពស្មុគស្មាញ។ សញ្ញាណចម្បងបីគឺ៖
សញ្ញាណ Big O កំណត់ពេលវេលាអតិបរមា ឬចន្លោះដែលក្បួនដោះស្រាយនឹងយក។ ឧទាហរណ៍៖
-
O(1)
៖ ពេលវេលាថេរ (ឧ. ការចូលប្រើធាតុអារេដោយលិបិក្រម)។
-
O(n)
: ពេលវេលាលីនេអ៊ែរ (ឧ. ធ្វើឡើងវិញតាមរយៈបញ្ជីមួយ)។
-
O(n)
: ពេលវេលាបួនជ្រុង (ឧ. រង្វិលជុំដែលដាក់នៅក្នុងលំដាប់ពពុះ)។
Big O គឺជាម៉ែត្រដែលគេប្រើជាទូទៅបំផុត ព្រោះវាធានានូវការអនុវត្តពិដាន។
អូមេហ្គាពិពណ៌នាអំពីពេលវេលាអប្បបរមាដែលត្រូវការ។ ឧទាហរណ៍៖
- ការស្វែងរកលីនេអ៊ែរមាន
(1)
ប្រសិនបើគោលដៅគឺជាធាតុទីមួយ។
ខណៈពេលដែលមានសុទិដ្ឋិនិយម ការវិភាគករណីល្អបំផុតគឺផ្តល់ព័ត៌មានតិចជាងសម្រាប់ការធ្វើផែនការករណីអាក្រក់បំផុត។
Theta រួមបញ្ចូលគ្នានូវ Big O និង Omega ដែលតំណាងឱ្យអាកប្បកិរិយា asymptotic ពិតប្រាកដ។ ប្រសិនបើ algorithms ករណីល្អបំផុត និងអាក្រក់បំផុតគឺដូចគ្នា។៖
-
(n log n)
អនុវត្តចំពោះការដាក់បញ្ចូលគ្នានូវសេណារីយ៉ូមធ្យម និងករណីអាក្រក់បំផុត។
សញ្ញាណទាំងនេះអរូបីនៅឆ្ងាយអថេរ និងពាក្យលំដាប់ទាប ដោយផ្តោតលើអត្រាកំណើន។ ឧ. 2n + 3n + 4 សម្រួលដល់ O(n) ដោយសារតែពាក្យ quadratic គ្រប់គ្រងសម្រាប់ធំ ន .
ការយល់ដឹងអំពីថ្នាក់ស្មុគស្មាញជួយចាត់ថ្នាក់ក្បួនដោះស្រាយតាមមាត្រដ្ឋាន។ នេះជាឋានានុក្រមពីច្រើនទៅតិចបំផុតដែលមានប្រសិទ្ធភាព៖
ពេលវេលាប្រតិបត្តិ ឬអង្គចងចាំនៅតែមិនផ្លាស់ប្តូរដូច
ន
លូតលាស់។
-
ឧទាហរណ៍
៖ ការចូលប្រើតម្លៃតារាង hash ដោយគន្លឹះ។
ពេលវេលាដំណើរការកើនឡើងលោការីត
ន
.
-
ឧទាហរណ៍
៖ ការស្វែងរកប្រព័ន្ធគោលពីរកាត់ចន្លោះបញ្ចូលជាពាក់កណ្តាលរាល់ការធ្វើម្តងទៀត។
ពេលដំណើរការធ្វើមាត្រដ្ឋានសមាមាត្រជាមួយ
ន
.
-
ឧទាហរណ៍
៖ ការស្វែងរកតាមលីនេអ៊ែរតាមរយៈបញ្ជីដែលមិនបានតម្រៀប។
ជាទូទៅនៅក្នុងក្បួនដោះស្រាយបែងចែក និងយកឈ្នះ។
-
ឧទាហរណ៍
៖ បញ្ចូលតម្រៀបចូលគ្នា និងតម្រៀបបណ្តុំ។
ការធ្វើឡើងវិញដែលមានសំបុកនាំឱ្យមានការរីកចម្រើនខ្លាំង។
-
ឧទាហរណ៍
៖ តម្រៀបពពុះ និងការតម្រៀបជម្រើស។
ពេលដំណើរការកើនឡើងទ្វេដងជាមួយនឹងការបញ្ចូលបន្ថែមនីមួយៗ។
-
ឧទាហរណ៍
៖ ការគណនា Fibonacci ដដែលៗដោយមិនចាំបាច់ចងចាំ។
ក្បួនដោះស្រាយផ្អែកលើការផ្លាស់ប្តូរ។
-
ឧទាហរណ៍
៖ ដោះស្រាយបញ្ហាអ្នកលក់ធ្វើដំណើរតាម brute-force ។
ភាពខុសគ្នារវាង O(n log n) និង O(n) ក្លាយជាស្រឡះ n = 10 ៖ អតីតអាចប្រតិបត្តិជាមិល្លីវិនាទី ខណៈពេលក្រោយអាចប្រើពេលច្រើនថ្ងៃ។
ក្បួនដោះស្រាយដំណើរការខុសគ្នាដោយផ្អែកលើការកំណត់រចនាសម្ព័ន្ធបញ្ចូល។ ការវិភាគករណីទាំងអស់ធានាបាននូវភាពរឹងមាំ៖
កម្មវិធីបង្កើនប្រសិទ្ធភាពសំណួរមូលដ្ឋានទិន្នន័យអាចជ្រើសរើសរវាង hash join ( O(n + m) ) និងភ្ជាប់រង្វិលជុំ ( O(nm) ) ផ្អែកលើការចែកចាយទិន្នន័យ។ ការវិភាគករណីដ៏អាក្រក់បំផុតគឺមានសារៈសំខាន់សម្រាប់ប្រព័ន្ធសុវត្ថិភាពដែលមានសារៈសំខាន់ (ឧ. កម្មវិធីអាកាសចរណ៍) ដែលភាពមិនអាចទាយទុកជាមុនបានគឺមិនអាចទទួលយកបាន។
បញ្ហាដូចគ្នាអាចត្រូវបានដោះស្រាយដោយប្រើក្បួនដោះស្រាយផ្សេងគ្នា។ ឧទាហរណ៍ បញ្ហានៃការស្វែងរកតម្លៃគោលដៅក្នុងបញ្ជីតម្លៃអាចត្រូវបានដោះស្រាយដោយប្រើក្បួនដោះស្រាយផ្សេងៗគ្នា ដូចជាការស្វែងរកលីនេអ៊ែរ ការស្វែងរកប្រព័ន្ធគោលពីរ ឬការស្វែងរកតារាងសញ្ញា។
តារាងខាងក្រោមប្រៀបធៀបភាពស្មុគស្មាញនៃពេលវេលា និងលំហនៃក្បួនដោះស្រាយទាំងនេះសម្រាប់ការស្វែងរកតម្លៃគោលដៅនៅក្នុងបញ្ជីនៃ ន តម្លៃ។
ជម្រើសនៃក្បួនដោះស្រាយអាស្រ័យលើទំហំបញ្ហា លក្ខណៈបញ្ចូល និងធនធានដែលមាន។ ជាឧទាហរណ៍ ប្រសិនបើបញ្ជីតូច និងមិនបានតម្រៀប ការស្វែងរកតាមលីនេអ៊ែរអាចជាជម្រើសដ៏ល្អបំផុត។ ប្រសិនបើបញ្ជីមានទំហំធំ និងតម្រៀប ការស្វែងរកប្រព័ន្ធគោលពីរអាចជាជម្រើសដ៏ល្អបំផុត។ ប្រសិនបើបញ្ជីមានទំហំធំ និងមិនត្រូវបានតម្រៀប ការស្វែងរកតារាង hash អាចជាជម្រើសដ៏ល្អបំផុត។
ការវិភាគរំលស់ជាមធ្យមមានរយៈពេលជាមធ្យមលើលំដាប់នៃប្រតិបត្តិការ។
-
ឧទាហរណ៍
៖ អារេថាមវន្តមានសមត្ថភាពទ្វេដងនៅពេលពេញ។ ខណៈពេលដែលនៅលីវ
រុញ
ប្រតិបត្តិការអាចចំណាយពេល
O(n)
ពេលវេលា ថ្លៃរំលោះនៅសល់
O(1)
.
ក្បួនដោះស្រាយដូចជា
ម៉ុងតេ ខាឡូ
និង
ឡាសវេហ្គាស
ប្រើចៃដន្យសម្រាប់ប្រសិទ្ធភាព។
-
ឧទាហរណ៍
៖ ការធ្វើតេស្តបឋមរបស់ Miller-Rabin មានការធានាប្រហែល ប៉ុន្តែលឿនជាងវិធីសាស្ត្រកំណត់។
បញ្ហាមួយចំនួន (ឧ. ការពេញចិត្ត Boolean) មាន NP-ពេញលេញ មានន័យថាមិនមានដំណោះស្រាយពហុនាមដែលគេស្គាល់ទេ។ ការបញ្ជាក់ពីភាពពេញលេញ NP តាមរយៈការកាត់បន្ថយជួយចាត់ថ្នាក់ភាពរឹងរបស់កុំព្យូទ័រ។
ក O(n) ក្បួនដោះស្រាយការចង្កោមអាចក្លាយជាឧបសគ្គសម្រាប់សំណុំទិន្នន័យដ៏ធំ ដែលជំរុញឱ្យមានការប្តូរទៅវិធីសាស្ត្រប្រហាក់ប្រហែលដូចជាដើមឈើ kd ( O(n log n) ).
ប្រព័ន្ធសោសាធារណៈ ពឹងផ្អែកលើភាពរឹងរបស់ O(2) បញ្ហា (ឧ. កត្តាចំនួនគត់) ដើម្បីទប់ទល់នឹងការវាយប្រហារ។
ម៉ាស៊ីនបង្ហាញពេលវេលាពិតផ្តល់អាទិភាព O(1) ក្បួនដោះស្រាយសម្រាប់ការក្លែងធ្វើរូបវិទ្យាដើម្បីរក្សា 60+ FPS ។
ការដោះដូរជាបញ្ហា៖
-
ពេលវេលាទល់នឹង លំហ
៖ ប្រើផែនទី hash (
O(1)
រកមើល) ក្នុងតម្លៃនៃការចងចាំ។
-
ភាពសាមញ្ញទល់នឹង ភាពល្អប្រសើរ
៖ តម្រៀបបញ្ចូល (
O(n)
) ប្រហែលជាល្អសម្រាប់សំណុំទិន្នន័យតូច និងស្ទើរតែតម្រៀប។
សម្រាប់ក្បួនដោះស្រាយដែលកើតឡើងដដែលៗ ទំនាក់ទំនងដែលកើតឡើងវិញរយៈពេលដំណើរការ។ ជាឧទាហរណ៍ ការរួមបញ្ចូលគ្នានៃការកើតឡើងដដែលៗ៖
[ T(n) = 2T(n/2) + O(n)] ដោះស្រាយ
O(n log n)
តាមរយៈ
ទ្រឹស្តីបទមេ
.
ការធ្វើតេស្តជាក់ស្តែង បំពេញបន្ថែមការវិភាគទ្រឹស្តី។ ឧបករណ៍កំណត់ទម្រង់ (ឧ. Valgrind, perf) បង្ហាញពីការរាំងស្ទះក្នុងពិភពពិត។
ពស់ថ្លាន់
def linear_sum(arr)៖
សរុប = 0
សម្រាប់លេខក្នុង arr៖
សរុប += លេខ
សរុបមកវិញ
def quadratic_sum(arr)៖
សរុប = 0
សម្រាប់ខ្ញុំនៅក្នុង arr៖
សម្រាប់ j ក្នុង arr៖
សរុប += i * j
សរុបមកវិញ
ខណៈពេលដែល O(n) abstracts ឆ្ងាយថេរ, ក 100ន ក្បួនដោះស្រាយអាចយឺតជាង a 0.01ន ក្បួនដោះស្រាយសម្រាប់ការអនុវត្ត ន .
ក O(n log n) ក្បួនដោះស្រាយអាចដំណើរការបានតិចតួច O(n) សម្រាប់ n = 10 ដោយសារតែលើសក្បាល។
អនុគមន៍ Fibonacci ចងចាំ ( O(n) space) អាចគាំងលើការបញ្ចូលធំ មិនដូចកំណែដដែលៗ ( O(1) លំហ)។
តុល្យភាពដោយខ្លួនឯង BST ( O(log n) ការស្វែងរក) គឺមានសុវត្ថិភាពជាង BST ធម្មតា ( O(n) worst-case) សម្រាប់ទិន្នន័យដែលមិនគួរឱ្យទុកចិត្ត។
ការវិភាគភាពស្មុគស្មាញនៃក្បួនដោះស្រាយគឺជាត្រីវិស័យដែលណែនាំអ្នកអភិវឌ្ឍន៍តាមរយៈទិដ្ឋភាពដ៏ធំនៃប្រសិទ្ធភាពនៃការគណនា។ សម្រាប់សិស្ស MTSC7196 ការធ្វើជាម្ចាស់នៃវិន័យនេះ ស្ពានចំណេះដឹងទ្រឹស្តី និងជំនាញជាក់ស្តែង។ តាមរយៈការបំបែកតម្រូវការពេលវេលា និងលំហ ប្រៀបធៀបព្រំដែន asymptotic និងរុករកការដោះដូរក្នុងពិភពពិត អ្នកអភិវឌ្ឍន៍អាចបង្កើតប្រព័ន្ធដែលមានមាត្រដ្ឋានយ៉ាងរលូន និងដំណើរការប្រកបដោយភាពជឿជាក់។
នៅក្នុងយុគសម័យមួយដែលបានកំណត់ដោយការច្នៃប្រឌិតដែលជំរុញដោយទិន្នន័យ សមត្ថភាពក្នុងការបែងចែករវាង O(n log n) និងមួយ។ O(n) ដំណោះស្រាយមិនមែនគ្រាន់តែជាការសិក្សាជាការចាំបាច់ជាយុទ្ធសាស្ត្រប៉ុណ្ណោះទេ។ នៅពេលអ្នករីកចម្រើនតាមរយៈការសិក្សារបស់អ្នក សូមចងចាំថា៖ ការវិភាគភាពស្មុគស្មាញមិនមែនគ្រាន់តែអំពីលេខ និងនិមិត្តសញ្ញាប៉ុណ្ណោះទេ។ វានិយាយអំពីការយល់ដឹងពីចង្វាក់បេះដូងនៃការគណនាខ្លួនឯង។
ចាប់តាំងពីឆ្នាំ 2014 មកជួបអ្នកគ្រឿងអលង្ការយូត្រូវបានបង្កើតឡើងនៅក្វាងចូវប្រទេសចិនមូលដ្ឋានផលិតគ្រឿងអលង្ការរបស់ប្រទេសចិន។ យើងគឺជាសហគ្រាសគ្រឿងអលង្ការដែលបញ្ចូលការរចនាផលិតកម្មនិងលក់។
+86-19924726359/+86-13431083798
ជាន់ទី 13 អគារ West Tower នៃទីក្រុង Gomm Smart, ទេ។ 33 ផ្លូវជូជីនស្រុកហៃហ្សូស៊ូក្វាងចូវប្រទេសចិន។