ไม่มีรหัสของคุณมีความซับซ้อนเวลาของการO(2^|<DeltaTime>|)
,
เพื่อการเข้ารหัสที่เหมาะสมของเวลาปัจจุบัน
ได้โปรดฉันขอโทษสำหรับภาษาอังกฤษของฉันก่อน
Big O คืออะไรและทำงานอย่างไรใน CS
Big O สัญกรณ์ไม่ได้ใช้ในการผูกการป้อนข้อมูลของโปรแกรมที่มีเวลาในการทำงานของตน
Big O สัญกรณ์เป็นทิ้งไว้ข้างหลังความรุนแรงวิธีการแสดงที่อัตราส่วนเชิงปริมาณของทั้งสอง
ในกรณีของการวิเคราะห์อัลกอริทึมปริมาณทั้งสองนี้ไม่ใช่อินพุต (ซึ่งอันดับแรกต้องมีฟังก์ชัน "วัด") และเวลาที่ทำงาน
พวกเขาคือความยาวของการเข้ารหัสของอินสแตนซ์ของปัญหา1และเมตริกที่น่าสนใจ
เมตริกที่ใช้กันทั่วไปคือ
- จำนวนขั้นตอนที่ต้องใช้ในการทำอัลกอริทึมให้สมบูรณ์ในรูปแบบการคำนวณที่กำหนด
- พื้นที่ที่ต้องการหากมีแนวคิดดังกล่าวอยู่โดยรูปแบบการคำนวณ
โดยปริยายจะสันนิษฐาน TM เป็นแบบจำลองเพื่อให้จุดแรกแปลกับจำนวนการใช้งานของการเปลี่ยนแปลงที่2ฟังก์ชั่นคือ "ขั้นตอน" และคนที่สองแปลว่าจำนวนของเซลล์เทปที่แตกต่างกันเป็นลายลักษณ์อักษรอย่างน้อยหนึ่งครั้ง
บ่อยครั้งที่สันนิษฐานโดยปริยายว่าเราสามารถใช้การเข้ารหัสที่เกี่ยวข้องกับพหุนามแทนการเข้ารหัสดั้งเดิมได้หรือไม่เช่นฟังก์ชันที่ค้นหาอาร์เรย์ตั้งแต่ต้นจนจบมีO(n)
ความซับซ้อนแม้ว่าการเข้ารหัสอินสแตนซ์ของอาร์เรย์ดังกล่าวควรมีความยาวn*b+(n-1)
ซึ่งb
เป็นจำนวน (คงที่) ในสัญลักษณ์ของแต่ละองค์ประกอบ เนื่องจากb
ถือว่าเป็นค่าคงที่ของโมเดลการคำนวณดังนั้นนิพจน์ด้านบนและn
ไม่มีอาการเหมือนกัน
นอกจากนี้ยังอธิบายว่าทำไมอัลกอริทึมเช่นTrial Divisionจึงเป็นอัลกอริทึมเอกซ์โพเนนเชียลแม้ว่าโดยพื้นฐานแล้วจะเป็นfor(i=2; i<=sqr(N); i++)
อัลกอริทึมที่เหมือนกัน3ก็ตาม
ดูนี้
นอกจากนี้ยังหมายความว่าสัญกรณ์ O ขนาดใหญ่อาจใช้พารามิเตอร์ได้มากเท่าที่ต้องการเพื่ออธิบายปัญหาไม่ใช่เรื่องแปลกที่จะมีพารามิเตอร์kสำหรับอัลกอริทึมบางอย่าง
ดังนั้นนี่จึงไม่เกี่ยวกับ "อินพุต" หรือ "ไม่มีอินพุต"
กรณีศึกษาตอนนี้
สัญกรณ์ Big O ไม่ได้ตั้งคำถามกับอัลกอริทึมของคุณเพียงแค่ถือว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่ โดยพื้นฐานแล้วเป็นเครื่องมือที่ใช้ได้ทุกที่แม้แต่กับอัลกอริทึมที่อาจจะยุ่งยากโดยเจตนา (เช่นของคุณ)
ในการแก้ปัญหาของคุณคุณใช้วันที่ปัจจุบันและวันที่ในอนาคตดังนั้นจึงต้องเป็นส่วนหนึ่งของปัญหาอย่างใด เพียงแค่ใส่: พวกเขาเป็นส่วนหนึ่งของตัวอย่างของปัญหา
โดยเฉพาะอินสแตนซ์คือ:
<DeltaTime>
โดย<>
วิธีการใด ๆ ที่ไม่ใช่ทางพยาธิวิทยาการเข้ารหัสของทางเลือก
ดูคำชี้แจงที่สำคัญมากด้านล่าง
เวลาซับซ้อน O ขนาดใหญ่ของคุณจึงเป็นเพียงO(2^|<DeltaTime>|)
เพราะคุณทำการวนซ้ำหลายครั้งซึ่งขึ้นอยู่กับค่าของเวลาปัจจุบัน ไม่มีประเด็นในการใส่ค่าคงที่เป็นตัวเลขอื่น ๆ เนื่องจากสัญกรณ์ asymptotic มีประโยชน์ในการกำจัดค่าคงที่ (ตัวอย่างเช่นการใช้O(10^|<DeltaTime>|*any_time_unit)
ไม่มีจุดหมาย)
ส่วนที่ยุ่งยากอยู่ที่ไหน
เราได้ตั้งสมมติฐานที่สำคัญไว้ข้างต้นนั่นคือแบบจำลองของการคำนวณใช้เวลา5ครั้งและตามเวลาฉันหมายถึงเวลาจริง (จริง?) ไม่มีแนวคิดดังกล่าวในแบบจำลองการคำนวณมาตรฐาน TM ไม่ทราบเวลาเราเชื่อมโยงเวลากับจำนวนขั้นตอนเพราะนี่คือวิธีการทำงานจริงของเรา4 .
ในแบบจำลองของคุณอย่างไรก็ตามเวลาเป็นส่วนหนึ่งของการคำนวณคุณอาจใช้คำศัพท์เฉพาะของคนที่ใช้งานได้โดยบอกว่า Main ไม่บริสุทธิ์ แต่มีแนวคิดเหมือนกัน
เพื่อทำความเข้าใจสิ่งนี้ควรทราบว่าไม่มีอะไรป้องกันไม่ให้ Framework ใช้เวลาปลอมที่ทำงานสองครั้งห้าครั้งเร็วขึ้นสิบเท่า ด้วยวิธีนี้โค้ดของคุณจะทำงานเป็น "ครึ่ง" "หนึ่งในห้า" "หนึ่งในสิบ" ของ "เวลา"
การสะท้อนนี้มีความสำคัญต่อการเลือกการเข้ารหัส<DeltaTime>
ซึ่งโดยพื้นฐานแล้วเป็นวิธีการเขียนแบบย่อ <(CurrentTime, TimeInFuture)> เนื่องจากไม่มีเวลาที่กำหนดไว้การเข้ารหัสของ CurrentTime อาจเป็นคำว่าNow (หรือทางเลือกอื่น ๆ ) เมื่อวันก่อนสามารถเข้ารหัสเป็นเมื่อวานนี้ได้โดยทำลายสมมติฐานที่ว่าความยาวของการเข้ารหัสจะเพิ่มขึ้นตามเวลาจริง ไปข้างหน้า (และหนึ่งใน DeltaTime ลดลง)
เราต้องสร้างแบบจำลองเวลาอย่างเหมาะสมในแบบจำลองการคำนวณของเราเพื่อทำสิ่งที่เป็นประโยชน์
ทางเลือกเดียวที่ปลอดภัยที่เราทำได้คือเข้ารหัสการประทับเวลาด้วยความยาวที่เพิ่มขึ้น (แต่ยังไม่ใช้ยูนารี) เมื่อเวลาทางกายภาพก้าวไปข้างหน้า นี่เป็นคุณสมบัติที่แท้จริงเพียงอย่างเดียวของเวลาที่เราต้องการและสิ่งที่การเข้ารหัสจำเป็นต้องจับ เฉพาะการเข้ารหัสประเภทนี้เท่านั้นที่อัลกอริทึมของคุณอาจให้ความซับซ้อนของเวลา
ความสับสนของคุณเกิดจากข้อเท็จจริงที่ว่าคำว่าเวลาในวลี ' ความซับซ้อนของเวลาคืออะไร?' และ ' จะใช้เวลาเท่าไหร่?' หมายถึงสิ่งที่แตกต่างกันมาก
อนิจจาคำศัพท์ใช้คำเดียวกัน แต่คุณสามารถลองใช้ "ความซับซ้อนของขั้นตอน" ในหัวของคุณแล้วถามตัวเองอีกครั้งฉันหวังว่าจะช่วยให้คุณเข้าใจคำตอบจริงๆ ^ _ ^
1นอกจากนี้ยังอธิบายถึงความจำเป็นของวิธีการแบบไม่แสดงอาการเนื่องจากแต่ละอินสแตนซ์มีความยาวที่แตกต่างกัน แต่ไม่ได้กำหนดเอง
2ฉันหวังว่าฉันจะใช้คำศัพท์ภาษาอังกฤษที่ถูกต้องที่นี่
3นี่คือสาเหตุที่เรามักจะพบlog(log(n))
คำศัพท์ในคณิตศาสตร์
4 Id est ขั้นตอนต้องใช้ช่วงเวลาที่ จำกัด แต่ไม่เป็นโมฆะหรือไม่เชื่อมต่อช่วงเวลา
5ซึ่งหมายความว่าโหมดการคำนวณเป็นความรู้เกี่ยวกับเวลาทางกายภาพในนั้นซึ่งสามารถแสดงด้วยเงื่อนไขของมัน การเปรียบเทียบคือการทำงานของยาสามัญใน. NET framework
O(N)
ความซับซ้อนไม่ใช่O(1)