info@meetujewelry.com
+86-19924726359 / +86-13431083798
ຄວາມສັບສົນຂອງສູດການຄິດໄລ່ຕົ້ນຕໍແມ່ນແກ້ໄຂສອງຊັບພະຍາກອນ:
ເວລາ
(ໄລຍະເວລາການປະຕິບັດ) ແລະ
ຊ່ອງ
(ການນໍາໃຊ້ຄວາມຈໍາ). ໃນຂະນະທີ່ຄວາມສັບສົນຂອງເວລາວັດແທກວິທີ runtime ຂະຫຍາຍຕົວກັບຂະຫນາດການປ້ອນຂໍ້ມູນ (
ນ
), ຄວາມສັບສົນໃນຊ່ອງປະເມີນການບໍລິໂພກຫນ່ວຍຄວາມຈໍາ. ຕົວຢ່າງ:
- ສູດການຄິດໄລ່ທີ່ມີ
O(n)
ຄວາມສັບສົນຂອງເວລາຈະປັບຂະຫນາດການປ້ອນຂໍ້ມູນ.
- ສູດການຄິດໄລ່ທີ່ມີ
O(1)
ຄວາມຊັບຊ້ອນຊ່ອງໃຊ້ຄວາມຊົງຈໍາຄົງທີ່ໂດຍບໍ່ຄໍານຶງເຖິງຂະຫນາດຂອງວັດສະດຸປ້ອນ.
ທັງສອງຕົວຊີ້ວັດແມ່ນມີຄວາມຈໍາເປັນ. ສູດການຄິດໄລ່ໄວອາດຈະໝົດຄວາມຈຳໃນຊຸດຂໍ້ມູນຂະໜາດໃຫຍ່, ໃນຂະນະທີ່ສູດການຄິດໄລ່ປະສິດທິພາບຄວາມຈຳອາດຊ້າເກີນໄປສຳລັບແອັບພລິເຄຊັນໃນເວລາຈິງ.
ປະສິດທິພາບກໍານົດຄວາມເປັນໄປໄດ້. ພິຈາລະນາຈັດຮຽງບັນຊີລາຍຊື່ຂອງ 10 ລາຍການທຽບກັບ 10 ລ້ານ:
- A
ການຈັດລຽງຟອງ
(
O(n)
) ອາດຈະພຽງພໍສໍາລັບຊຸດຂໍ້ມູນຂະຫນາດນ້ອຍແຕ່ກາຍເປັນສິ່ງທີ່ບໍ່ສາມາດປະຕິບັດໄດ້ສໍາລັບຂະຫນາດໃຫຍ່.
- A
ຮວມການຈັດລຽງ
(
O(n log n)
) ຈັດການຊຸດຂໍ້ມູນໃຫຍ່ກວ່າຢ່າງສະຫງ່າງາມ ແຕ່ຕ້ອງການຄວາມຈຳເພີ່ມເຕີມ.
ການວິເຄາະຄວາມຊັບຊ້ອນສະຫນອງພາສາທົ່ວໄປເພື່ອປຽບທຽບວິທີການ, abstracting ໄປຫ່າງຈາກລາຍລະອຽດສະເພາະຂອງຮາດແວ. ມັນຊ່ວຍໃຫ້ຜູ້ພັດທະນາສາມາດຄາດຄະເນການຂະຫຍາຍໄດ້ ແລະຫຼີກລ່ຽງການຂວ້ຳບາດໃນລະບົບທີ່ສຳຄັນ.
notations asymptotic ອະທິບາຍພຶດຕິກໍາການຈໍາກັດຂອງຫນ້າທີ່, ສະເຫນີ shorthand ສໍາລັບຄວາມສັບສົນ. ສາມຫມາຍເຫດຕົ້ນຕໍແມ່ນ:
Big O notation ກຳນົດເວລາສູງສຸດ ຫຼືພື້ນທີ່ທີ່ລະບົບຈະໃຊ້. ຕົວຢ່າງ:
-
O(1)
: ເວລາຄົງທີ່ (ເຊັ່ນ: ການເຂົ້າເຖິງອົງປະກອບ array ໂດຍດັດສະນີ).
-
O(n)
: Linear time (ເຊັ່ນ: iterating ຜ່ານລາຍການ).
-
O(n)
: ເວລາສີ່ຫຼ່ຽມ (ຕົວຢ່າງ: ວົງແຫວນທີ່ຕິດຢູ່ໃນການຈັດລຽງຟອງ).
Big O ແມ່ນ metric ທີ່ໃຊ້ທົ່ວໄປທີ່ສຸດ, ຍ້ອນວ່າມັນຮັບປະກັນການປະຕິບັດເພດານ.
Omega ອະທິບາຍເວລາຂັ້ນຕ່ໍາທີ່ຕ້ອງການ. ຕົວຢ່າງ:
- ການຊອກຫາເສັ້ນມີ
(1)
ຖ້າເປົ້າຫມາຍແມ່ນອົງປະກອບທໍາອິດ.
ໃນຂະນະທີ່ມີແງ່ດີ, ການວິເຄາະກໍລະນີທີ່ດີທີ່ສຸດແມ່ນມີຂໍ້ມູນຫນ້ອຍສໍາລັບການວາງແຜນກໍລະນີທີ່ຮ້າຍແຮງທີ່ສຸດ.
Theta ສົມທົບ Big O ແລະ Omega, ເປັນຕົວແທນຂອງພຶດຕິກໍາ asymptotic ທີ່ແນ່ນອນ. ຖ້າ algorithms ກໍລະນີທີ່ດີທີ່ສຸດແລະຮ້າຍແຮງທີ່ສຸດແມ່ນຄືກັນ:
-
(n log n)
ໃຊ້ກັບການລວມການຈັດລຽງຂອງສະຖານະການສະເລ່ຍ ແລະກໍລະນີຮ້າຍແຮງທີ່ສຸດ.
notations ເຫຼົ່າ ນີ້ abstracts ຫ່າງ ຄົງ ທີ່ ແລະ ຄໍາ ສັ່ງ ຕ ່ ໍ າ, ສຸມ ໃສ່ ການ ອັດ ຕາ ການ ຂະ ຫຍາຍ ຕົວ. ສໍາລັບຕົວຢ່າງ, 2n+3n+ 4 ເຮັດໃຫ້ງ່າຍ O(n) ເນື່ອງຈາກວ່າໄລຍະ quadratic dominates ສໍາລັບຂະຫນາດໃຫຍ່ ນ .
ຄວາມເຂົ້າໃຈກ່ຽວກັບຊັ້ນຮຽນຄວາມຊັບຊ້ອນຈະຊ່ວຍຈັດໝວດໝູ່ຂອງສູດການຄິດໄລ່ຕາມການຂະຫຍາຍ. ນີ້ແມ່ນການຈັດລຳດັບຈາກຫຼາຍສຸດໄປຫາປະສິດທິພາບໜ້ອຍທີ່ສຸດ:
ເວລາປະຕິບັດຫຼືຄວາມຊົງຈໍາຍັງຄົງບໍ່ປ່ຽນແປງເປັນ
ນ
ເຕີບໃຫຍ່.
-
ຕົວຢ່າງ
: ການເຂົ້າເຖິງຄ່າຕາຕະລາງ hash ໂດຍຄີ.
Runtime ເຕີບໃຫຍ່ຂຶ້ນດ້ວຍ logarithmically
ນ
.
-
ຕົວຢ່າງ
: ການຄົ້ນຫາແບບໄບນາຣີ ແບ່ງພື້ນທີ່ການປ້ອນຂໍ້ມູນແຕ່ລະເທື່ອ.
Runtime scales ອັດຕາສ່ວນກັບ
ນ
.
-
ຕົວຢ່າງ
: ຄົ້ນຫາເສັ້ນຜ່ານລາຍຊື່ທີ່ບໍ່ຈັດຮຽງ.
ທົ່ວໄປໃນຂັ້ນຕອນການແບ່ງ ແລະ ເອົາຊະນະ.
-
ຕົວຢ່າງ
: ລວມການຈັດຮຽງ ແລະຈັດຮຽງ heap.
ການເຮັດຊ້ໍາຊ້ອນເຮັດໃຫ້ການຂະຫຍາຍຕົວລະເບີດ.
-
ຕົວຢ່າງ
: Bubble sort and selection sort.
ເວລາແລ່ນເພີ່ມຂຶ້ນສອງເທົ່າດ້ວຍການປ້ອນຂໍ້ມູນແຕ່ລະອັນ.
-
ຕົວຢ່າງ
: ການຄຳນວນ Fibonacci ຊ້ຳໆ ໂດຍບໍ່ມີການ memoization.
ສູດການຄິດໄລ່ຕາມການປ່ຽນແປງ.
-
ຕົວຢ່າງ
: ແກ້ໄຂບັນຫາພະນັກງານຂາຍເດີນທາງຜ່ານ brute-force.
ຄວາມແຕກຕ່າງລະຫວ່າງ O(n log n) ແລະ O(n) ກາຍເປັນ stark ສໍາລັບ n = 10 : ອະດີດອາດຈະປະຕິບັດເປັນ milliseconds, ໃນຂະນະທີ່ອັນສຸດທ້າຍອາດຈະໃຊ້ເວລາຫຼາຍມື້.
ສູດການຄິດໄລ່ປະຕິບັດແຕກຕ່າງກັນໂດຍອີງໃສ່ການຕັ້ງຄ່າການປ້ອນຂໍ້ມູນ. ການວິເຄາະທຸກກໍລະນີຮັບປະກັນຄວາມແຂງແຮງ:
ຕົວເພີ່ມປະສິດທິພາບການສອບຖາມຖານຂໍ້ມູນອາດຈະເລືອກລະຫວ່າງການເຂົ້າຮ່ວມ hash ( O(n + m) ) ແລະ loop ຊ້ອນເຂົ້າຮ່ວມ ( O(nm) ) ອີງໃສ່ການແຈກຢາຍຂໍ້ມູນ. ການວິເຄາະກໍລະນີທີ່ຮ້າຍແຮງທີ່ສຸດແມ່ນສໍາຄັນສໍາລັບລະບົບຄວາມປອດໄພທີ່ສໍາຄັນ (ເຊັ່ນ: ຊອບແວການບິນ), ບ່ອນທີ່ການຄາດເດົາແມ່ນບໍ່ສາມາດຍອມຮັບໄດ້.
ບັນຫາດຽວກັນສາມາດແກ້ໄຂໄດ້ໂດຍໃຊ້ສູດການຄິດໄລ່ທີ່ແຕກຕ່າງກັນ. ຕົວຢ່າງ, ບັນຫາຂອງການຄົ້ນຫາມູນຄ່າເປົ້າຫມາຍໃນບັນຊີລາຍຊື່ຂອງມູນຄ່າສາມາດແກ້ໄຂໄດ້ໂດຍໃຊ້ສູດການຄິດໄລ່ທີ່ແຕກຕ່າງກັນ, ເຊັ່ນ: ການຄົ້ນຫາເສັ້ນ, ການຄົ້ນຫາຄູ່, ຫຼືການຊອກຫາຕາຕະລາງ hash.
ຕາຕະລາງຂ້າງລຸ່ມນີ້ປຽບທຽບຄວາມຊັບຊ້ອນເວລາແລະພື້ນທີ່ຂອງ algorithms ເຫຼົ່ານີ້ສໍາລັບການຊອກຫາມູນຄ່າເປົ້າຫມາຍໃນບັນຊີລາຍຊື່ຂອງ ນ ຄຸນຄ່າ.
ທາງເລືອກຂອງສູດການຄິດໄລ່ແມ່ນຂຶ້ນກັບຂະຫນາດບັນຫາ, ລັກສະນະການປ້ອນຂໍ້ມູນ, ແລະຊັບພະຍາກອນທີ່ມີຢູ່. ຕົວຢ່າງ, ຖ້າບັນຊີລາຍຊື່ມີຂະຫນາດນ້ອຍແລະບໍ່ຖືກຈັດຮຽງ, ການຄົ້ນຫາເສັ້ນອາດຈະເປັນທາງເລືອກທີ່ດີທີ່ສຸດ. ຖ້າບັນຊີລາຍຊື່ມີຂະຫນາດໃຫຍ່ແລະຈັດຮຽງ, ການຄົ້ນຫາຄູ່ອາດຈະເປັນທາງເລືອກທີ່ດີທີ່ສຸດ. ຖ້າບັນຊີລາຍຊື່ໃຫຍ່ແລະບໍ່ຖືກຈັດຮຽງ, ການຄົ້ນຫາຕາຕະລາງ hash ອາດຈະເປັນທາງເລືອກທີ່ດີທີ່ສຸດ.
ການວິເຄາະການຕັດຊໍາລະສະເລ່ຍແມ່ນໃຊ້ເວລາໃນໄລຍະການດໍາເນີນການຕາມລໍາດັບ.
-
ຕົວຢ່າງ
: ອາເຣແບບໄດນາມິກຈະມີຄວາມຈຸສອງເທົ່າເມື່ອເຕັມ. ໃນຂະນະທີ່ເປັນໂສດ
ຍູ້
ການດໍາເນີນງານອາດຈະໃຊ້ເວລາ
O(n)
ທີ່ໃຊ້ເວລາ, ຄ່າໃຊ້ຈ່າຍຈໍາຫນ່າຍຍັງຄົງຢູ່
O(1)
.
ສູດການຄິດໄລ່ເຊັ່ນ
Monte Carlo
ແລະ
ລາສເວກັສ
ໃຊ້ແບບສຸ່ມເພື່ອປະສິດທິພາບ.
-
ຕົວຢ່າງ
: Miller-Rabin primality test ມີການຮັບປະກັນຄວາມເປັນໄປໄດ້ແຕ່ໄວກວ່າວິທີການກໍານົດ.
ບັນຫາບາງຢ່າງ (ຕົວຢ່າງ, ຄວາມພໍໃຈ Boolean) ແມ່ນ NP-complete , ຊຶ່ງຫມາຍຄວາມວ່າບໍ່ມີການແກ້ໄຂເວລາ polynomial ທີ່ຮູ້ຈັກມີຢູ່. ການພິສູດຄວາມສົມບູນຂອງ NP ຜ່ານການຫຼຸດລົງຈະຊ່ວຍຈັດປະເພດຄວາມແຂງຂອງຄອມພິວເຕີ້.
ອັນ O(n) algorithm ການຈັດກຸ່ມສາມາດກາຍເປັນກະຕຸກສໍາລັບຊຸດຂໍ້ມູນຂະຫນາດໃຫຍ່, ກະຕຸ້ນໃຫ້ປ່ຽນໄປຫາວິທີການໂດຍປະມານເຊັ່ນ: ຕົ້ນ kd ( O(n log n) ).
ລະບົບສາທາລະນະທີ່ສໍາຄັນອີງໃສ່ຄວາມແຂງຂອງ O(2) ບັນຫາ (ຕົວຢ່າງ, ຕົວເລກຕົວເລກ) ເພື່ອຕ້ານການໂຈມຕີ.
ເຄື່ອງຈັກສະແດງຜົນແບບສົດໆໃຫ້ຄວາມສຳຄັນ O(1) ສູດການຄິດໄລ່ສໍາລັບການຈໍາລອງຟີຊິກເພື່ອຮັກສາ 60+ FPS.
ການຄ້າ- offs ສໍາຄັນ:
-
ເວລາທຽບກັບ. ຊ່ອງ
: ໃຊ້ແຜນທີ່ hash (
O(1)
lookups) ໃນຄ່າໃຊ້ຈ່າຍຂອງຫນ່ວຍຄວາມຈໍາ.
-
ຄວາມງ່າຍດາຍທຽບກັບ. ເໝາະສົມ
: ການຈັດລຽງການແຊກ (
O(n)
) ອາດຈະເປັນທີ່ເຫມາະສົມສໍາລັບຂະຫນາດນ້ອຍ, ຊຸດຂໍ້ມູນເກືອບຈັດລຽງລໍາດັບ.
ສໍາລັບສູດການຄິດໄລ່ recursive, recurrence relationship model runtime. ສໍາລັບຕົວຢ່າງ, merge sorts recurrence:
[ T(n) = 2T(n/2) + O(n) ] ແກ້ໄຂໃຫ້
O(n log n)
ຜ່ານ
ທິດສະດີຕົ້ນສະບັບ
.
ການທົດສອບທາງວິຊາການເສີມຂະຫຍາຍການວິເຄາະທາງທິດສະດີ. ເຄື່ອງມືການເກັບຂໍ້ມູນ (ຕົວຢ່າງ, Valgrind, perf) ເປີດເຜີຍຂໍ້ບົກຜ່ອງຂອງໂລກທີ່ແທ້ຈິງ.
python
def linear_sum(arr):
ທັງໝົດ = 0
ສໍາລັບຕົວເລກໃນ arr:
ທັງໝົດ += ຈຳນວນ
ກັບຄືນທັງຫມົດ
def quadratic_sum(arr):
ທັງໝົດ = 0
ສໍາລັບຂ້າພະເຈົ້າໃນ arr:
ສໍາລັບ j in arr:
ທັງຫມົດ += i * j
ກັບຄືນທັງຫມົດ
ໃນຂະນະທີ່ O(n) abstracts ຫ່າງຄົງທີ່, ກ 100ນ algorithm ອາດຈະຊ້າກວ່າ a 0.01ນ ສູດການຄິດໄລ່ສໍາລັບການປະຕິບັດ ນ .
ອັນ O(n log n) algorithm ອາດຈະເຮັດວຽກຫນ້ອຍ O(n) ສໍາລັບ n = 10 ເນື່ອງຈາກ overhead.
ຟັງຊັນ Fibonacci memoized ( O(n) space) ສາມາດຂັດກັບການນໍາເຂົ້າຂະຫນາດໃຫຍ່, ບໍ່ເຫມືອນກັບສະບັບຊ້ໍາ ( O(1) ຊ່ອງ).
ການດຸ່ນດ່ຽງຕົນເອງ BST ( O(log n) ຄົ້ນຫາ) ແມ່ນປອດໄພກວ່າ BST ປົກກະຕິ ( O(n) worst-case) ສໍາລັບຂໍ້ມູນທີ່ບໍ່ຫນ້າເຊື່ອຖື.
ການວິເຄາະຄວາມສັບສົນຂອງສູດການຄິດໄລ່ແມ່ນເຂັມທິດນໍາພານັກພັດທະນາຜ່ານພູມສັນຖານທີ່ກວ້າງຂວາງຂອງປະສິດທິພາບຄອມພິວເຕີ້. ສໍາລັບນັກສຶກສາ MTSC7196, ການຮຽນຮູ້ວິຊາສະເພາະນີ້ສ້າງຂົວຄວາມຮູ້ທາງທິດສະດີແລະຄວາມຊໍານານພາກປະຕິບັດ. ໂດຍການຕັດເອົາຄວາມຕ້ອງການເວລາແລະພື້ນທີ່, ການປຽບທຽບຂອບເຂດ asymptotic, ແລະການນໍາທາງການຄ້າ - offs ທີ່ແທ້ຈິງ, ນັກພັດທະນາສາມາດສ້າງລະບົບທີ່ມີຂະຫນາດທີ່ສະຫງ່າງາມແລະປະຕິບັດຫນ້າເຊື່ອຖືໄດ້.
ໃນຍຸກທີ່ ກຳ ນົດໂດຍນະວັດຕະ ກຳ ທີ່ຂັບເຄື່ອນດ້ວຍຂໍ້ມູນ, ຄວາມສາມາດໃນການເຂົ້າໃຈລະຫວ່າງ O(n log n) ແລະ O(n) ການແກ້ໄຂບໍ່ພຽງແຕ່ວິຊາການເປັນຄວາມຈໍາເປັນຍຸດທະສາດ. ໃນຂະນະທີ່ເຈົ້າກ້າວໄປເຖິງການສຶກສາຂອງເຈົ້າ, ຈົ່ງຈື່ໄວ້ວ່າ: ການວິເຄາະຄວາມຊັບຊ້ອນບໍ່ແມ່ນກ່ຽວກັບຕົວເລກ ແລະ ສັນຍາລັກເທົ່ານັ້ນ. ມັນກ່ຽວກັບການເຂົ້າໃຈການເຕັ້ນຂອງຫົວໃຈຂອງຄອມພິວເຕີ້ເອງ.
ນັບຕັ້ງແຕ່ປີ 2019, ໃຫ້ພົບກັບເຄື່ອງປະດັບ u ໄດ້ສ້າງຕັ້ງຂຶ້ນຢູ່ Guangzhou, ຈີນ, ຖານການຜະລິດເຄື່ອງປະດັບ. ພວກເຮົາແມ່ນເຄື່ອງປະດັບສາກົນປະກວດໄປສະນີ, ການຜະລິດແລະຂາຍ.
+86-19924726359/+86-13431083798
ຊັ້ນ 13, West Tower of Gome Smart City, ບໍ່. 33 Juxin Street, ເມືອງ Haizhu, Guangzhou, ປະເທດຈີນ.