อัลกอริทึม (และประสิทธิภาพโดยทั่วไป) มีความสำคัญน้อยลงหรือไม่?


29

เนื่องจากความสามารถในการคำนวณการซื้อมีราคาไม่แพงมากในอดีตความรู้เกี่ยวกับอัลกอริธึมและการมีประสิทธิภาพมีความสำคัญน้อยลงหรือไม่? เป็นที่ชัดเจนว่าคุณต้องการหลีกเลี่ยงการวนซ้ำไม่สิ้นสุดดังนั้นทุกอย่างจะไม่เกิดขึ้น แต่ถ้าคุณมีฮาร์ดแวร์ที่ดีกว่าคุณมีซอฟต์แวร์ที่แย่กว่านี้ได้ไหม?


2
"ทั้งใช่และไม่ใช่"!
vzn

4
ตอนนี้มีเครื่องบินอยู่แล้วและค่าระวางเรือข้ามมหาสมุทรแอตแลนติกไม่ได้มีไว้สำหรับเรืออีกต่อไปความเร็วในการขนส่งมีความสำคัญน้อยลงหรือไม่? ลูกค้า FedEx และ DHL ไม่คิดอย่างนั้น
Peter Shor

2
หากขนาดของอินพุตมีขนาดใหญ่พอความแตกต่างตามลำดับของอัลกอริธึมนั้นสำคัญไม่ว่าเครื่องจะเร็วแค่ไหนก็ตาม แต่บางครั้งฉันก็ถูกหลอกในการเปลี่ยนแปลงเพื่อ "เพิ่มประสิทธิภาพ" ความแตกต่างของปัจจัยคงที่เพียงเพื่อให้ตระหนักว่าการใช้นิพจน์ที่สร้างขึ้นในน้ำตาลเชิงไวยากรณ์ของภาษาโปรแกรม <cough> Python </cough> นั้นเร็วกว่า "การเพิ่มประสิทธิภาพ" ของฉันอย่างมาก
kojiro


กรณีศึกษาที่น่าสนใจอย่างหนึ่งที่นี่ก็คือ Windows ซึ่งในบางวิธี / หลายวิธีทำงานได้อย่างมีประสิทธิภาพน้อยกว่าแม้ในฮาร์ดแวร์ที่ได้รับการปรับปรุงให้ดีที่สุดกว่าที่เคย ... เช่นเดียวกับกฎหมายมัวร์กำลังปรับปรุงฮาร์ดแวร์ดูเหมือนว่าจะเป็นกฎหมายเงินเฟ้อ ซอฟต์แวร์ที่ทันสมัยกำลังทำอยู่เรื่อย ๆ ตลอดเวลาด้วยเลเยอร์ใหม่ที่เพิ่มเข้ามาและทวีคูณ ... ค่อนข้างคล้ายกับวิธีที่แก๊สเติมปริมาตรที่มีอยู่ทั้งหมด ... หรือในงบประมาณไม่ว่าจะเพิ่มขึ้นหรือใหญ่ขึ้นเรื่อย ๆ หรือไม่ก็ตาม ค่อนข้างจะเหยียบย่ำ ... ดูการแข่งขันวิวัฒนาการด้วย
vzn

คำตอบ:


31

ฉันชอบตัวอย่างจากหนังสือแนะนำสู่อัลกอริทึมซึ่งแสดงให้เห็นถึงความสำคัญของประสิทธิภาพอัลกอริทึม:

ลองเปรียบเทียบสองขั้นตอนวิธีการเรียงลำดับ: เรียงแทรกและผสานการเรียงลำดับ ความซับซ้อนของพวกเขาคือและO ( n log n ) = c 2 n lg nตามลำดับ โดยปกติ merge sort มีปัจจัยคงที่ใหญ่กว่าดังนั้นสมมติ1 < 2O(n2)=c1n2O(nlogn)=c2nlgnc1<c2

เพื่อตอบคำถามของคุณเราประเมินเวลาดำเนินการของคอมพิวเตอร์ที่เร็วกว่า (A) ใช้อัลกอริทึมการเรียงลำดับการแทรกกับคอมพิวเตอร์ที่ช้ากว่า (B) ใช้อัลกอริทึมการเรียงลำดับผสาน

เราถือว่า:

  • ขนาดของปัญหาอินพุตคือ 10 ล้านตัว: ;n=107
  • คอมพิวเตอร์ A ประมวลผลคำสั่งต่อวินาที (~ 10GHz);1010
  • คอมพิวเตอร์ B รันคำสั่งเพียงต่อวินาที (~ 10MHz);107
  • ปัจจัยคงที่คือ (สิ่งที่ประเมินค่าสูงไปเล็กน้อย) และc 2 = 50 (ในความเป็นจริงมีขนาดเล็กกว่า)c1=2c2=50

ดังนั้นด้วยสมมติฐานเหล่านี้

สำหรับคอมพิวเตอร์ A เพื่อเรียงหมายเลข107และ

2(107)2 คำแนะนำ1010 คำแนะนำ/ที่สอง=2104 วินาที
107

50107LG107 คำแนะนำ107 คำแนะนำ/ที่สอง1163 วินาที

สำหรับคอมพิวเตอร์ B.

ดังนั้นคอมพิวเตอร์ซึ่งช้ากว่า 1,000 เท่าสามารถแก้ปัญหาได้เร็วขึ้น 17 เท่า ในความเป็นจริงข้อดีของการจัดเรียงจะยิ่งสำคัญและเพิ่มขึ้นตามขนาดของปัญหา ฉันหวังว่าตัวอย่างนี้ช่วยตอบคำถามของคุณ

อย่างไรก็ตามนี่ไม่ได้เกี่ยวกับความซับซ้อนของอัลกอริทึม วันนี้แทบจะเป็นไปไม่ได้เลยที่จะได้รับการเร่งความเร็วอย่างมีนัยสำคัญเพียงแค่ใช้งานเครื่องที่มีความถี่ CPU สูงขึ้น ผู้คนจำเป็นต้องออกแบบอัลกอริทึมสำหรับระบบมัลติคอร์ที่ขยายขนาดได้ดี นอกจากนี้ยังเป็นงานที่ยุ่งยากเนื่องจากการเพิ่มคอร์การเพิ่มโอเวอร์เฮด (สำหรับการจัดการการเข้าถึงหน่วยความจำเป็นต้น) ก็เพิ่มขึ้นเช่นกัน ดังนั้นจึงเป็นไปไม่ได้เลยที่จะได้รับความเร็วเชิงเส้น

ดังนั้นการสรุปการออกแบบอัลกอริธึมที่มีประสิทธิภาพในวันนี้จึงมีความสำคัญเท่า ๆ กันมาก่อนเพราะการเพิ่มความถี่หรือคอร์เพิ่มเติมจะไม่ทำให้คุณเร็วขึ้นเมื่อเทียบกับอัลกอริธึมที่มีประสิทธิภาพ


4
เป็นมูลค่าการกล่าวถึงว่าเป็นไปไม่ได้บุคลากรเพิ่มความเร็วเชิงเส้นจากกฎหมาย Amdhal ของ
Bartosz Przybylski

กฎหมายของอัมดาห์ไม่ได้มีผลบังคับใช้เสมอไป มีปัญหามากมายในวิทยาศาสตร์คอมพิวเตอร์ที่เศษส่วนของงานที่ไม่มีใครเทียบได้ลดลงเป็นศูนย์เมื่อขนาดของปัญหาเพิ่มขึ้น Say คอมพิวเตอร์จะใช้เวลาn 2งานและคุณจำเป็นต้องคำนวณΣ n ฉัน= 1 F ( x ผม )สำหรับnที่แตกต่างกันx ' ฉัน s ในอนุกรมเวลาค่าใช้จ่ายเป็นO ( n n 2f(x)n2i=1nf(xi)nxisO(nn2+n)=O(n3)ในขณะที่ในแบบคู่ขนานกับประมวลผลการทำงานเป็นO (n ) O(n2+n)=O(n2)
Nick Alger

"ดังนั้นคอมพิวเตอร์ซึ่งช้ากว่า 1,000 ครั้งสามารถแก้ปัญหาได้เร็วขึ้น 17 เท่า" นี่เป็นข้อความที่ผิดเนื่องจากคุณกำลังรวมความเร็วของฮาร์ดแวร์และอัลกอริธึมที่แตกต่างกันในเวลาเดียวกัน เปรียบเทียบคอมพิวเตอร์ A กับคอมพิวเตอร์ B สำหรับการเรียงลำดับแต่ละประเภทแยกกัน (เหตุใดฉันจึงไม่สามารถใช้การเรียงแบบผสานบนคอมพิวเตอร์ A หรือการเรียงลำดับการแทรกบนคอมพิวเตอร์ B)
AquaAlex

3
@AquaAlex จุดประสงค์ของตัวอย่างคือแสดงให้เห็นว่าคอมพิวเตอร์ที่ช้าสามารถทำงานได้เร็วกว่าเครื่องที่เร็วเพียงแค่ใช้อัลกอริธึมที่เลือก เราสามารถเปรียบเทียบเวลาดำเนินการสำหรับการเรียงลำดับแต่ละประเภทหรือเรียกใช้การเรียงลำดับผสานบน A และการเรียงลำดับการแทรกบน B แต่แสดงให้เห็นว่าโดยทั่วไปแล้วคอมพิวเตอร์ที่เร็วกว่าจะทำงานได้ดีกว่าช้ากว่าเพียงแค่ไม่สมเหตุสมผล
Pavel Zaichenkov

ตกลงดังนั้นแนวคิดก็คือการแสดงให้เห็นว่าอัลกอริทึมที่มีประสิทธิภาพมากขึ้นยังคงมีน้ำหนักแม้กระทั่งในวันที่ cpu เร็วขึ้นและหน่วยความจำขนาดใหญ่
AquaAlex

36

ในทางตรงกันข้าม. ในเวลาเดียวกันกับที่ฮาร์ดแวร์เริ่มมีราคาถูกลงการพัฒนาอื่น ๆ ก็เกิดขึ้น

ก่อนจำนวนของข้อมูลที่จะดำเนินการมีการเติบโตชี้แจง นี้ได้นำไปสู่การศึกษาของquasilinearเวลาขั้นตอนวิธีและพื้นที่ของข้อมูลขนาดใหญ่ ลองคิดดูตัวอย่างเกี่ยวกับเสิร์ชเอ็นจิ้น - พวกเขาต้องจัดการกับคำค้นหาจำนวนมากประมวลผลข้อมูลจำนวนมากและดำเนินการอย่างรวดเร็ว อัลกอริทึมมีความสำคัญมากกว่าที่เคย

ประการที่สองพื้นที่ของการเรียนรู้ของเครื่องจักรกำลังเพิ่มขึ้นอย่างแข็งแกร่งและเต็มไปด้วยอัลกอริธึม (แม้ว่าจะเป็นประเภทที่แตกต่างจากที่คุณเรียนใน BA) พื้นที่กำลังเจริญรุ่งเรืองและบ่อยครั้งที่อัลกอริธึมใหม่ถูกคิดค้นขึ้นมาและปรับปรุงประสิทธิภาพอย่างมาก

ประการที่สามขั้นตอนวิธีการกระจายได้กลายเป็นสิ่งที่สำคัญมากเนื่องจากเราจะตีสิ่งกีดขวางบนถนนในการเพิ่มการประมวลผล CPU ความเร็ว ทุกวันนี้กำลังประมวลผลกำลังเพิ่มขึ้นโดยการขนานและเกี่ยวข้องกับอัลกอริธึมเฉพาะ

ประการที่สี่เพื่อถ่วงดุลพลังที่เพิ่มขึ้นของซีพียูกระบวนทัศน์การเขียนโปรแกรมที่ทันสมัยใช้วิธีเครื่องเสมือนเพื่อต่อสู้กับช่องโหว่ความปลอดภัย ซึ่งทำให้โปรแกรมเหล่านี้ช้าลงด้วยปัจจัยที่ประเมินค่าได้ ระบบปฏิบัติการของคุณเพิ่มเวลาให้กับ CPU ในเสียงระฆังและเสียงนกหวีดมากขึ้นทำให้เหลือเวลา CPU น้อยลงสำหรับโปรแกรมจริงของคุณซึ่งอาจรวมถึงอัลกอริทึมที่ใช้ CPU เช่นการบีบอัดวิดีโอและการคลายการบีบอัด ดังนั้นในขณะที่ฮาร์ดแวร์เร็วขึ้นก็ไม่ได้ใช้อย่างมีประสิทธิภาพ

สรุปอัลกอริทึมที่มีประสิทธิภาพเป็นสิ่งจำเป็นในการจัดการข้อมูลจำนวนมาก อัลกอริธึมชนิดใหม่กำลังโผล่ขึ้นมาในพื้นที่ของปัญญาประดิษฐ์ ; อัลกอริทึมแบบกระจายกำลังเข้ามาโฟกัส และ CPU power ได้รับการควบคุมให้มีประสิทธิภาพน้อยลงด้วยเหตุผลหลายประการ (แต่ส่วนใหญ่เป็นเพราะคอมพิวเตอร์มีประสิทธิภาพมากขึ้น) อัลกอริทึมยังไม่ตาย


"อัลกอริทึมยังไม่ตาย" ... ค่อนข้างตรงกันข้ามเราน่าจะใช้ชีวิตผ่าน "ยุคทองของอัลกอริธึม" ....
vzn

12

ความรู้เกี่ยวกับอัลกอริทึมเป็นมากกว่าวิธีเขียนอัลกอริทึมที่รวดเร็ว

นอกจากนี้ยังให้วิธีการแก้ปัญหา (เช่นการหารและพิชิตการเขียนโปรแกรมแบบไดนามิกโลภการลดการเขียนโปรแกรมเชิงเส้น ฯลฯ ) ที่คุณสามารถนำไปใช้เมื่อใกล้ปัญหาใหม่และท้าทาย การมีวิธีการที่เหมาะสมมักจะนำไปสู่โค้ดที่ง่ายและรวดเร็วกว่าในการเขียน ดังนั้นฉันต้องไม่เห็นด้วยกับคำตอบของเควินเนื่องจากรหัสที่ไม่ได้ใส่อย่างระมัดระวังมักไม่เพียง แต่ช้า แต่ยังซับซ้อน ฉันชอบคำพูดของ David Parnas:

ฉันมักจะได้ยินนักพัฒนาอธิบายว่า "คนที่รู้วิธีสร้างระบบขนาดใหญ่อย่างรวดเร็ว" ไม่มีเคล็ดลับในการสร้างระบบขนาดใหญ่อย่างรวดเร็ว ยิ่งคุณสร้างมันเร็วเท่าไหร่พวกเขาก็จะยิ่งใหญ่ขึ้นเท่านั้น!

(แน่นอนเราต้องรวมอัลกอริทึมกับวิธีการออกแบบซอฟต์แวร์เพื่อเขียนโค้ดที่ดี)

ความรู้เกี่ยวกับอัลกอริทึมยังบอกเราถึงวิธีการจัดระเบียบข้อมูลของคุณเพื่อให้คุณสามารถประมวลผลได้มากขึ้น ได้ง่ายและมีประสิทธิภาพผ่านการใช้โครงสร้างข้อมูล

นอกจากนี้ยังช่วยให้เรามีวิธีในการ ประเมินประสิทธิภาพของวิธีการของคุณและทำความเข้าใจกับการแลกเปลี่ยนระหว่างวิธีการที่แตกต่างกันในแง่ของความซับซ้อนของเวลาความซับซ้อนของพื้นที่และความซับซ้อนของรหัส การรู้ถึงการแลกเปลี่ยนเหล่านี้เป็นกุญแจสำคัญในการตัดสินใจที่ถูกต้องภายในข้อ จำกัด ด้านทรัพยากรของคุณ

เกี่ยวกับความสำคัญของประสิทธิภาพของซอฟต์แวร์ฉันจะอ้างถึงกฎหมายของ Wirth:

ซอฟต์แวร์เริ่มช้าลงเร็วกว่าฮาร์ดแวร์จะเร็วขึ้น

Larry Page เพิ่งปรับปรุงใหม่ว่าซอฟต์แวร์ช้าลงเป็นสองเท่าในทุก ๆ 18 เดือนและทำให้กฎหมายของมัวร์เหนือกว่า


7

ใช่พวกเขามีความสำคัญน้อยกว่าในอุตสาหกรรมที่กว้างกว่า โปรแกรมแก้ไขข้อความอาจ 'เร็วพอ' และอาจไม่ต้องการการปรับปรุงมากนัก ส่วนใหญ่ของความพยายามด้านไอทีจะทำให้แน่ใจว่าองค์ประกอบการเขียนใน Java ทำงานกับส่วนประกอบ B ที่เขียนด้วย C สื่อสารอย่างถูกต้องผ่านคิวข้อความที่เขียนใน Cobol (หรือบางอย่าง) หรือเพื่อนำผลิตภัณฑ์ออกสู่ตลาดเป็นต้น

นอกจากนี้สถาปัตยกรรมก็ซับซ้อน เมื่อคุณมีตัวประมวลผลแบบธรรมดาธรรมดาที่คุณมี 1 คำสั่งต่อรอบและคุณเขียนไว้ในการประกอบการเพิ่มประสิทธิภาพเป็น 'ง่าย' (คุณเพียงแค่ต้องนับจำนวนคำสั่ง) ขณะนี้คุณยังไม่มีโปรเซสเซอร์ที่เรียบง่าย แต่เป็นโปรเซสเซอร์ที่มี pipelined, superscalar, out-of-order ที่สมบูรณ์พร้อมการเปลี่ยนชื่อรีจิสเตอร์และแคชหลายระดับ และคุณไม่ได้เขียนในการชุมนุม แต่ใน C / Java / ฯลฯ โดยที่โค้ดของคอมไพล์ / JITed (โดยปกติจะเป็นโค้ดที่ดีกว่าจากนั้นคุณหรือฉันจะเขียนในแอสเซมบลี) หรือใน Python / Ruby / ... ซึ่งโค้ดถูกแปลความหมายและคุณถูกคั่นด้วยนามธรรมหลายระดับจากเครื่อง การเพิ่มประสิทธิภาพขนาดเล็กนั้นยากและโปรแกรมเมอร์ส่วนใหญ่จะบรรลุผลตรงกันข้าม

ไม่พวกเขามีความสำคัญต่อการวิจัยและในแง่'สมบูรณ์' มีหลายพื้นที่ที่ความเร็วมีความสำคัญเนื่องจากทำงานกับข้อมูลจำนวนมาก ในระดับนี้ความซับซ้อนมีความสำคัญตามที่แสดงโดยตัวอย่างของพาเวล

อย่างไรก็ตามยังมีอีกหลายกรณี - การ 'ลง' จากอัลกอริทึมยังคงเป็นตัวเลือกที่เลือกเมื่อเรื่องความเร็ว (HPC, อุปกรณ์ฝังตัว ฯลฯ ) คุณจะพบกับกลุ่มมหาวิทยาลัยหลายแห่งที่มีความเชี่ยวชาญในการรวบรวมและ / หรือการปรับแต่งซอฟต์แวร์ให้เหมาะสม ตัวอย่างเช่นการสลับลำดับของการวนรอบอย่างง่ายสามารถเพิ่มความเร็วได้พันครั้งเพียงเพราะใช้แคชอย่างมีประสิทธิภาพ - ในขณะที่มันอาจเป็นตัวอย่างของเส้นขอบช่องว่างของหน่วยความจำของ CPU เติบโตขึ้น 1,000 เท่าในช่วง 30 ปีที่ผ่านมา สถาปัตยกรรมคอมพิวเตอร์เป็นส่วนหนึ่งของ CS ด้วย ดังนั้นการปรับปรุงความเร็วในการคำนวณจำนวนมากจึงเป็นส่วนหนึ่งของฟิลด์ CS ทั่วไป

ในด้านอุตสาหกรรม - เมื่อคุณมีความเร็วคลัสเตอร์ HPC มีความสำคัญเนื่องจากโปรแกรมเดียวสามารถทำงานได้หลายวันหลายเดือนหรือหลายปี ไม่เพียง แต่คุณต้องจ่ายค่าไฟฟ้า แต่การรอคอยยังสามารถเสียค่าใช้จ่าย คุณสามารถโยนฮาร์ดแวร์ได้มากเป็นสองเท่า แต่700M $นั้นแทบจะไม่ถือว่าเป็นการเปลี่ยนแปลงพ็อกเก็ตสำหรับ บริษัท ที่ใหญ่ที่สุด แต่ในกรณีเช่นนี้โปรแกรมเมอร์เป็นตัวเลือกที่ถูกกว่าและหากการเขียนโปรแกรมเป็นภาษาใหม่ พิจารณามัน

ความเร็วยังอาจหมายถึง UX ที่ดีขึ้น ความคิดเห็นจำนวนมากของระบบปฏิบัติการโทรศัพท์มือถือระบุว่า "snappier" และในขณะที่มันสามารถทำได้โดย 'เทคนิค' มันแน่นอนพื้นที่ของการศึกษา นอกจากนี้คุณยังต้องการเข้าถึงข้อมูลของคุณได้เร็วขึ้นและทำสิ่งที่คุณต้องการได้อย่างรวดเร็ว บางครั้งก็หมายความว่าคุณสามารถทำอะไรได้มากกว่า - ในเกมที่คุณมี 0.017 วินาทีเพื่อทำทุกอย่างและยิ่งคุณใส่ลูกอมได้เร็วขึ้นเท่าไหร่


2

เป็นการสนทนาที่น่าสนใจ และเรามีบางสิ่งที่ต้องดูที่นี่

  1. วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี - นี่คือวิทยาศาสตร์ที่พัฒนาขึ้นซึ่งหมายความว่าเมื่อเวลาผ่านไปเราจะค้นหาวิธีใหม่และดีกว่าในการแก้ปัญหาซึ่งหมายถึงอัลกอริทึมที่ปรับปรุงแล้วสำหรับการค้นหาและการเรียงลำดับเช่น

  2. ชุมชนขนาดใหญ่ / ห้องสมุดขนาดใหญ่ - เนื่องจากคนอื่นทำงานเป็นจำนวนมากเราจึงสามารถสร้างงานของพวกเขาขึ้นมาและใช้อัลกอริธึมที่พวกเขาสร้างขึ้นแล้วและแม้แต่เขียนรหัส และห้องสมุดเหล่านี้จะได้รับการปรับปรุงตามเวลาทำให้เราสามารถเข้าถึงโปรแกรม / อัลกอริทึมที่มีประสิทธิภาพมากขึ้นโดยอัตโนมัติ

  3. การพัฒนา - ตอนนี้ที่นี่เรามีปัญหาฉันคิดว่า โปรแกรมเมอร์จำนวนมากไม่ใช่นักวิทยาศาสตร์คอมพิวเตอร์ดังนั้นพวกเขาจึงเขียนโค้ดเพื่อแก้ปัญหาทางธุรกิจไม่ใช่ปัญหาทางเทคนิค / ทางทฤษฎีและจะมีความสุขที่ได้ใช้การเรียงลำดับฟองเป็นแบบเรียงลำดับอย่างรวดเร็ว และที่นี่ความเร็วของฮาร์ดแวร์ช่วยให้โปรแกรมเมอร์ที่ไม่ดีสามารถใช้อัลกอริธึมที่ไม่ดีและการเขียนโค้ดที่ไม่ดีได้ หน่วยความจำ, ความเร็วของ CPU, พื้นที่จัดเก็บสิ่งเหล่านี้ไม่ใช่สิ่งที่สำคัญอีกต่อไปและทุก ๆ เดือนก็จะมีขนาดใหญ่ขึ้นเร็วขึ้นและราคาถูกลง ฉันหมายถึงดูโทรศัพท์มือถือใหม่ ตอนนี้พวกเขาก้าวหน้ากว่าคอมพิวเตอร์เมนเฟรม / เซิร์ฟเวอร์จากปี 1970/80 พื้นที่เก็บข้อมูลมากขึ้นพลังการประมวลผลมากขึ้นหน่วยความจำที่เร็วขึ้น

  4. UI & DATA - ส่วนต่อประสานผู้ใช้ / ประสบการณ์ผู้ใช้และ DATA ได้รับการพิจารณาว่ามีความสำคัญมากกว่ารหัสที่มีประสิทธิภาพสูงในการพัฒนาส่วนใหญ่ ดังนั้นความเร็วจึงกลายเป็นปัญหาเมื่อผู้ใช้ต้องรอนาน หากเราให้รูปลักษณ์และความรู้สึกที่ดีแก่ผู้ใช้และเขาได้รับการตอบรับที่ดีจากแอปพลิเคชันเขามีความสุข และหากธุรกิจรู้ว่าข้อมูลทั้งหมดจะถูกจัดเก็บอย่างปลอดภัยและปลอดภัยและพวกเขาสามารถเรียกคืนและจัดการได้ตลอดเวลาพวกเขาไม่สนใจว่าต้องการพื้นที่มากแค่ไหน

ดังนั้นฉันต้องบอกว่าไม่ใช่โปรแกรมเมอร์ที่มีประสิทธิภาพไม่มีความสำคัญอีกต่อไปหรือเป็นที่ต้องการอีกต่อไปมันเป็นเพียงไม่กี่ บริษัท / ผู้ใช้ที่ให้รางวัลกับผู้คนในการเป็นโปรแกรมเมอร์ที่มีประสิทธิภาพสูงและเนื่องจากฮาร์ดแวร์ที่ดีกว่า ที่มีประสิทธิภาพ แต่อย่างน้อยก็ยังมีคนที่มุ่งเน้นไปที่ประสิทธิภาพและเนื่องจากจิตวิญญาณของชุมชนทุกคนในเวลาได้รับประโยชน์จากสิ่งนี้


1

มุมอื่น ๆ ของคำถามที่น่าสนใจและลึกซึ้งนี้ที่เน้นแง่มุมของสหวิทยาการและการตัดกันของปรากฏการณ์ ไดพูดคำพูดของเขาในกฎหมายของเวิร์ ธ :

ซอฟต์แวร์เริ่มช้าลงเร็วกว่าฮาร์ดแวร์จะเร็วขึ้น

มีแนวความคิดที่น่าสนใจเกี่ยวกับปรากฏการณ์นี้ที่สังเกตได้ในทางเศรษฐศาสตร์ โปรดทราบว่าเศรษฐศาสตร์มีการเชื่อมต่ออย่างลึกซึ้งกับวิทยาการคอมพิวเตอร์เช่นในการกำหนดเวลาที่ทรัพยากรที่ขาดแคลน (พูดถึงเธรดและอื่น ๆ ) ได้รับการจัดสรรตามคำขอโดยอัลกอริทึม "load-balancing" อีกตัวอย่างหนึ่งคือสิ่งที่เรียกว่าคิวผู้ผลิต - ผู้บริโภค อีกทั้งการประมูล

เช่นรายชื่อกฎหมายบาร์, Wikipedia :

กฎหมายของพาร์กินสัน - "งานขยายเพื่อเติมเวลาให้เสร็จสมบูรณ์" ประกาศเกียรติคุณโดย C. Northcote Parkinson (1909-1993) ผู้ประกาศเกียรติคุณของ "ค่าใช้จ่ายเพิ่มขึ้นเพื่อให้มีรายได้" ในคอมพิวเตอร์: โปรแกรมขยายเพื่อเติมหน่วยความจำที่มีอยู่ทั้งหมด

มีความคล้ายคลึงกันอย่างมากกับความขัดแย้งของ Jevon ซึ่งสังเกตได้จากการเพิ่มขึ้นของการใช้พลังงานหลังจากเครื่องยนต์ไอน้ำวัตต์ที่มีประสิทธิภาพมากขึ้นเริ่มแทนที่การออกแบบ Newcomen แต่การใช้หรือการเพิ่มจำนวนของเครื่องยนต์เพิ่มขึ้น:

ในเศรษฐศาสตร์เศรษฐศาสตร์Jevons เส้นขนาน (/ ˈdʒɛvənz /; บางครั้ง Jevons ผล) เป็นข้อเสนอว่าความก้าวหน้าทางเทคโนโลยีที่เพิ่มประสิทธิภาพซึ่งเป็นทรัพยากรที่มีการใช้มีแนวโน้มที่จะเพิ่มขึ้น (แทนที่จะลดลง) อัตราการบริโภคทรัพยากรนั้น

การเปรียบเทียบคือฮาร์ดแวร์เป็นทรัพยากรและซอฟต์แวร์เป็นเหมือนการใช้ทรัพยากร (หรือที่เรียกว่าอุปสงค์และอุปทาน) ดังนั้นซอฟต์แวร์และฮาร์ดแวร์ (และความก้าวหน้าในแต่ละคน) อยู่บ้างในวงความคิดเห็นทางชีวภาพแน่นควบคู่กับแต่ละอื่น ๆ ในความรู้สึกช้าจะ มีปัจจัยที่ซับซ้อนและมีความสัมพันธ์ซึ่งกันและกันที่มีอิทธิพลต่อการมีอิทธิพลซึ่งกันและกันเช่น:


ทำไมต้องลงคะแนน ฉันพบการกล่าวถึงกฎหมายของพาร์กินสันและ Jevons บุคคลที่ผิดธรรมดาเปิดเผยมาก
Yuval Filmus

@YuvalFilmus ฉันเดาว่า: ปัญหาเกี่ยวกับไวยากรณ์ ฉันไม่คิดว่ามันจะรบกวนความสามารถในการอ่านคำตอบของฉันในครั้งนี้มากเกินไป แต่ฉันพยายามปรับปรุงมัน
Juho

1
ไม่ใช่ "ปัญหาเกี่ยวกับไวยากรณ์" แต่เป็นสไตล์ที่แตกต่าง มันเหมือนกับการพูดว่าเจ้าของภาษาสร้าง "ความผิดพลาด" ที่พูดภาษาของตนเองในขณะที่ในความเป็นจริงทั้งภาษากำลังเปลี่ยนแปลงหรือมีความแตกต่างในระดับภูมิภาค ในกรณีนี้มันเป็นลักษณะของ vzn
Yuval Filmus

-3

ไม่ส่วนใหญ่ในขณะที่พิจารณาความซับซ้อนของพื้นที่! ความจุของคอมพิวเตอร์ปกติกำลังเพิ่มขึ้นอย่างทวีคูณ


จะไม่กลับเป็นจริง - ถ้าคุณมีพื้นที่เก็บข้อมูล 'ไม่สิ้นสุด' คุณไม่จำเป็นต้องกังวลเกี่ยวกับความซับซ้อนของพื้นที่ 'ปัญหา' ไม่ได้อยู่ที่การจัดเก็บข้อมูลเพิ่มขึ้น แต่ข้อมูลที่ใช้ในการซิงค์แบบเติมเต็มเพิ่มความเร็วในการคำนวณที่เพิ่มขึ้นโดยการเพิ่มพลังการคำนวณและหน่วยความจำ - ซึ่งเป็นสิ่งที่ดีเราต้องการสร้างแบบจำลองจักรวาล (ป.ล. ฉันไม่ได้ลงคะแนน)
Maciej Piechotka

4
มันเป็นความจริงที่หลาย ๆ นักพัฒนาของปพลิเคชันมือถือดูเหมือนจะถือว่าทรัพยากรอนันต์ แต่โชคร้ายที่อุปกรณ์ของฉันมี จำกัด มาก
ราฟาเอล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.