แนวคิดของเอนโทรปีสามารถใช้ในการวิเคราะห์ซอร์สโค้ดด้วยวิธีที่มีประโยชน์ได้หรือไม่?


19

ดูเหมือนว่าฉันมีเหตุผลที่จะกำหนดบริบทสำหรับการวิเคราะห์ซอร์สโค้ดแบบสแตติกซึ่งรวมถึงกฎในการสร้างค่าสัมพัทธ์ของความซับซ้อน ฉันรู้ว่ามันไม่ได้เป็นไปตามความรู้สึกทางกายภาพเพราะ souce code ไม่มี "พลังงาน" แต่ฉันเดิมพันว่ามีความพยายามในการศึกษาทางวิชาการเพื่อวาดแบบขนาน มีใครรู้เรื่องนี้บ้างไหมและถ้าเป็นเช่นนั้นสิ่งใดที่ทำให้เกิดผลลัพธ์ที่มีประโยชน์?


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

3
มีการวัดความซับซ้อนของรหัสอยู่แล้ว - ความซับซ้อนของวงจร, ความยาวของคลาส (LOC), ความยาวของวิธี (LOC), จำนวนฟิลด์, จำนวนพารามิเตอร์วิธี, ความซับซ้อนของ n-path, การเข้า / ออกของแฟน ๆ และการวิเคราะห์การไหลของข้อมูล (DU / เครือง DD) มีการทำงานเพื่อเชื่อมโยงสิ่งเหล่านี้กับข้อบกพร่องของความหนาแน่นความพยายามในการรักษาและความง่ายในการทำความเข้าใจ สิ่งที่คุณต้องการเปรียบเทียบกับสิ่งเหล่านี้เป็นอย่างไร
โธมัสโอเวนส์

@Thomas Owens: ฉันคิดว่านี่เป็นสิ่งที่ OP ต้องการขอได้โปรดโพสต์เป็นคำตอบ!
blubb

@ Simon โอเคถ้าคุณคิดอย่างนั้น ฉันไม่แน่ใจ 100%
โธมัสโอเวนส์

1
สำหรับวิธีการที่ค่อนข้างแปลกใหม่คุณสามารถคำนวณอัตราส่วนการบีบอัดข้อมูลสำหรับซอร์สโค้ดโดยตรงหรือคำนวณอัตราส่วนการบีบอัดข้อมูลหลังจากการทำให้เป็นมาตรฐานในบางประเภท (เช่นc2.com/doc/SignatureSurvey ) - ฉันไม่ทราบว่าจะมีความหมายหรือมีประโยชน์อย่างไร แต่อาจให้ข้อมูลเชิงลึกบางอย่างเมื่อรวมกับตัวชี้วัดแบบดั้งเดิมมากขึ้น
วิลเลียมเพน

คำตอบ:


22

มีจำนวนของการวัดความซับซ้อนของรหัสอยู่แล้ว:

  • ความซับซ้อนของวัฏจักร
  • ความยาวระดับ
  • ความยาวของเมธอด
  • จำนวนสาขา
  • จำนวนพารามิเตอร์เมธอด
  • ความซับซ้อนของ N-path
  • Fan-in และ fan-out
  • การวิเคราะห์การไหลของข้อมูล (เครือข่าย DU / DD)

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

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


13

ฉันคิดว่าคุณกำลังพยายามวาดเส้นขนานระหว่างอุณหพลศาสตร์อุณหพลศาสตร์และ "ความซับซ้อน" สิ่งที่เป็นเอนโทรปีเป็นตัวชี้วัดของความผิดปกติไม่ซับซ้อน ฉันไม่เชื่อว่าทั้งสองมีความเท่าเทียมกันและใช้แทนกันได้

เอนโทรปีที่ใกล้เคียงที่สุดกับเทอร์โมไดนามิกส์คือเอนโทรปีของแชนนอนซึ่งวัดปริมาณความผิดปกติในตัวแปรสุ่ม แนวคิดนี้เกี่ยวข้องกับปริมาณของ "ข้อมูล" ในข้อความเป็นหลัก

ในเรื่องนั้นรหัสบางส่วนสามารถมีข้อมูลจำนวนมาก (เอนโทรปีสูง) แต่มีความซับซ้อนต่ำมาก ลองนึกถึงโปรแกรมที่พิมพ์ตัวอักษรตามอำเภอใจที่ยาวออกไป มีข้อมูลจำนวนมาก แต่มีความซับซ้อนต่ำ


1
เอนโทรปีสำหรับซอร์สโค้ดจะไม่ถูกคำนวณจากแบบจำลองเดียวกันกับข้อความที่ไม่มีโครงสร้าง ด้วยโมเดลที่เหมาะสมกับซอร์สโค้ดมันควรจะมีความหมายในการคำนวณเอนโทรปีซึ่งจะไม่แตกต่างกันอย่างมากสำหรับสถานการณ์โดยพลการเช่นสตริงอักขระยาวที่คุณอธิบาย
Matthew Rodatus

ดังนั้นคุณจะให้คะแนนเอนโทรปีและความซับซ้อนในโปรแกรมที่กำหนดอย่างไร ฉันขอยืนยันว่ามันมีข้อมูลจำนวนมากไม่ว่าคุณจะใช้โมเดลรุ่นใด แม้ว่าความหมายของความซับซ้อนจะชัดเจนน้อยกว่ามาก
tskuzzy

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

ฉันชอบคำตอบของคุณ - ฉันกำลังคิดตัวอย่างเช่นเมื่อมีการนำรหัส "ไม่ดี" มาใช้งานการเพิ่มขึ้นของเอนโทรปีของสภาพแวดล้อมทั้งหมดนั้นรวมถึงผู้เขียนโค้ดที่ต้องทำงานหนักขึ้น ถ้าไม่ใช่การเชื่อมโยงทางวิทยาศาสตร์กับอุณหพลศาสตร์?
Aaron Anodide

2

เอนโทรปีคือ "การวัดความผิดปกติ [หรือ] ความไม่แน่นอน" รูปแบบที่เป็นเอกลักษณ์ในช่วงกว้างของข้อมูล (เช่น "ความหมายที่มากกว่า") บ่งบอกถึงระดับความสูงของเอนโทรปี

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

เมื่อแบบจำลองได้รับการออกแบบและบรรจุด้วยซอร์สโค้ดของแอปพลิเคชันซอฟต์แวร์ (เช่นความถี่สำหรับโหนด / ขอบ) เอนโทรปีสามารถคำนวณได้

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


2

วิธีคิดอย่างหนึ่งของเอนโทรปีคือ "ข้อมูลโดยเฉลี่ยที่จะได้รับ" ดังนั้นฉันคิดว่ามันจะเป็นการดีกว่าที่จะกลับไปใช้ข้อมูลแบบจำลอง ฉันรู้สองวิธีพื้นฐานในการสร้างแบบจำลองทางคณิตศาสตร์ข้อมูล (ยกโทษให้ฉันที่ให้การอ้างอิง Wikipedia แต่ IMHO พวกเขาไม่ได้เลวร้าย)

  • ข้อมูลแชนนอนซึ่งดูที่ชุดสัญลักษณ์การแจกแจงความน่าจะเป็นของรหัสที่สามารถถ่ายโอนข้อมูลระหว่างชุดสัญลักษณ์และความยาวของรหัสเหล่านั้น แนวคิดทั่วไปเกี่ยวกับประสิทธิภาพของรหัสเสียงการตรวจจับข้อผิดพลาดและการแก้ไขผ่านความซ้ำซ้อน ฯลฯ ได้รับการรับรองในแง่ของทฤษฎีสารสนเทศของแชนนอน วิธีหนึ่งในการแสดงข้อมูลคือการบอกว่ามันคือความยาวของรหัสเลขฐานสองที่สั้นที่สุดที่สามารถแทนสัญลักษณ์ได้ สิ่งนี้ขึ้นอยู่กับความน่าจะเป็นซึ่งเป็นค่าตัวเลขที่กำหนดให้กับสัญลักษณ์หรือเหตุการณ์โดยผู้สังเกตการณ์บางคน

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

ถ้าฉันสามารถใช้เสรีภาพในการบอกสิ่งที่ฉันคิดว่านี่หมายถึงในชีวิตประจำวันเกี่ยวกับสิ่งที่ฉันเขียนหนังสือมันก็หมายถึงความซับซ้อนของโปรแกรมคือความยาวของมันเมื่อสิ่งต่าง ๆ เช่นฟังก์ชั่นการใช้งานและภาษาคงที่ ค่าเผื่อสำหรับสิ่งต่างๆเช่นความคิดเห็นและความยาวชื่อ แต่มีปัญหาเกี่ยวกับสิ่งนี้ - "APL tarpit" ซึ่งมีความกระชับเท่ากับความไม่เข้าใจ

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

ฉันขอโทษถ้าข้อมูลอ้างอิงนั้นอ่อนแอ / เป็นส่วนตัว แต่ฉันคิดว่าคำถามโดยรวมนี้เป็นคำถามที่สำคัญมาก


+1 สำหรับ Shannon และ Kolmogorov ซึ่งทั้งสองอย่างเกี่ยวข้อง ...
Alex Feinman

@Alex: ฉันคิดว่าแชนนอนนั้นใช้ได้ในเวลาทำงาน ตัวอย่างเช่นคุณสามารถเข้าใจประสิทธิภาพของอัลกอริทึมในแง่ของเอนโทรปีของจุดตัดสินใจและคุณสามารถเข้าใจการทำให้โครงสร้างข้อมูลเป็นมาตรฐานในรูปของโค้ดขั้นต่ำ ข้อมูลอัลกอริทึมดูเหมือนจะมีความหลากหลายทางภาษามากขึ้นการนำไปใช้กับความเหมาะสมของภาษาเพื่อวัตถุประสงค์ในการแสดงออกและอัลกอริทึมที่คุณพยายามทำให้มีประสิทธิภาพนั้นเป็นสิ่งที่ลึกลับที่หัวของคุณเมื่อคุณเขียนโปรแกรม
Mike Dunlavey

2

จอนแจ็คเกอร์และOlve Maudalมีมุมมองที่แตกต่างกันเล็กน้อยของรหัสเอนโทรปีในขณะที่สามารถมองเห็นได้ในปี 2011 เซสชั่นการประชุมของพวกเขา Accu รหัสเอนโทรปีและฟิสิกส์ของซอฟแวร์

พวกเขาพูดเกี่ยวกับความเสถียรของรหัสที่เกี่ยวข้องว่าผู้พัฒนา / ผู้ดูแลในอนาคตมีแนวโน้มที่จะเปลี่ยนรหัสนั้นหรือไม่

เพื่อแสดงสิ่งนี้พวกเขาทำการสำรวจโดยมีข้อมูลโค้ดจำนวนหนึ่งและผลลัพธ์นั้นน่าสนใจทีเดียว

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

บวก 16 คนอื่น ๆ

แนวโน้มทั่วไปดูเหมือนจะเป็นการสร้างรหัสให้เข้าใจได้ง่ายขึ้นและยากต่อการเข้าใจผิด

พวกเขายังดูการเปลี่ยนแปลงบางอย่างที่เกิดขึ้นกับฐานข้อมูลขนาดใหญ่ในช่วงหลายปีที่ผ่านมา

แม้ว่าสไลด์ของตัวเองจะต้องทนทุกข์ทรมานจากการไม่ได้บันทึกบท แต่ก็ยังมีบางจุดที่น่าสนใจอยู่ในนั้น


1

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

หนึ่งวิทยานิพนธ์ดังกล่าวเป็นทฤษฎีสารสนเทศและการวัดซอฟแวร์


0

หากคุณต้องการคำจำกัดความที่เป็น "mathy" ในวิธีที่เอนโทรปีคุณอาจต้องการดูความซับซ้อนของ Kolmogorov ซึ่งวัดความซับซ้อนด้วยจำนวนโค้ดขั้นต่ำที่สามารถทำได้อย่างไรก็ตามนี่ไม่ใช่ความซับซ้อนของรหัส แต่สิ่งที่คุณพยายามทำกับรหัส แต่คุณอาจคิดว่ามันมีความเกี่ยวข้องเพราะในทางทฤษฎีคุณสามารถเปรียบเทียบโค้ดบางส่วนกับโค้ดที่น้อยที่สุด อย่างไรก็ตามนี่ไม่ได้เป็นเทคนิคที่มีประโยชน์สำหรับการวัดความซับซ้อนของรหัสโลกแห่งความจริง


0

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

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

แน่นอนอัตราส่วนการบีบอัดเป็นเมตรที่ดีสำหรับการวัดเอนโทรปีของรหัสอย่างไรก็ตามทั้งคู่นั้นไม่ได้เป็นเมตรที่ดีสำหรับคุณภาพของรหัส


0

คำว่าเอนโทรปีไม่เพียง แต่ปรากฏในอุณหพลศาสตร์และทฤษฎีสารสนเทศเท่านั้น แต่ยังปรากฏในโลกแห่งความเป็นจริงของการบีบอัดข้อมูลด้วย ในบริบทนั้นเอนโทรปีที่คอมเพรสเซอร์เห็นนั้นเท่ากับจำนวนบิตที่ผลิต (โปรดสังเกตว่าฉันบอกว่า "เอนโทรปีที่คอมเพรสเซอร์เห็น " เพราะสิ่งที่พิจารณาว่าเอนโทรปีขึ้นอยู่กับรุ่นที่คอมเพรสเซอร์ใช้เพื่ออธิบายข้อมูลอินพุตนี่คือเหตุผลที่ว่าทำไมคอมเพรสเซอร์ต่าง ๆ ผลิตไฟล์ที่มีขนาดแตกต่างกัน: อะไรคือเอนโทรปี หนึ่งคือโครงสร้างที่เอาเปรียบคนอื่น)

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

ตัวอย่างเช่นหากภาษาอนุญาตให้มีตัวระบุที่มีอยู่หรือสิ่งที่อยู่ในวงเล็บหรือผลิตภัณฑ์ ณ จุดที่เฉพาะเจาะจงคอมเพรสเซอร์จะนับตัวบ่งชี้ที่มีอยู่ที่เป็นไปได้โดยนำข้อมูลประเภทเข้าบัญชี (กล่าวว่าคุณมีตัวระบุ 3 ตัวดังกล่าว ) และเพิ่ม 2 สำหรับนิพจน์ย่อยที่เป็นไปได้สองแบบให้ความเป็นไปได้ 5 ข้อ ดังนั้นโหนดจะถูกเข้ารหัสด้วยlb 5 = 2.32บิต ในกรณีของนิพจน์ย่อยที่เป็นไปได้สองอันจำเป็นต้องใช้บิตเพิ่มเติมเพื่อเข้ารหัสเนื้อหา

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


-2

รหัสมีความเอนโทรปีเท่าจำนวน exactly

การบำรุงรักษาและการเปลี่ยนแปลงรหัสอาจทำให้เกิดเอนโทรปี (เพราะอาจมีการเปลี่ยนแปลงสถานะที่เกี่ยวข้อง)

แต่รหัสเป็นจำนวนมาก ด้วยการเป็นตัวแทนไบนารี


คิดว่าวิธีที่คุณไม่สามารถบอกว่ารหัสทั้งหมดมีเอนโทรปีเดียวกันเมื่อ gzip จะ?
Aaron Anodide

@ กาเบรียล: นั่นเป็นสิ่งที่แตกต่าง เอนโทรปีนั้นคือจำนวนเสียงในบิตเมื่อดูหมายเลขนั้นเป็นลำดับของบิต ไม่ได้ดูเป็นเลขคงที่เดียว ซอร์สโค้ดเป็นจำนวนสแตติกเดียวเช่น 42 เท่านั้นที่มีบิตมากกว่ามาก
S.Lott

เพียงแค่อยากรู้อยากเห็นในมุมมองนี้ทำทศนิยม 42 และเลขฐานสอง 42 มีความเท่าเทียมกันเอนโทรปีหรือว่าความคิดเห็นที่บอกว่าตัวเลขไม่ได้มีเอนโทรปีและนั่นคือจุดของมันได้หรือไม่
Aaron Anodide

"ตัวเลขไม่มีเอนโทรปี" พวกเขาเป็นเพียงแค่ การเป็นตัวแทนที่ดูเป็นกระแสของสัญลักษณ์อาจมีเอนโทรปี แต่จำนวนโดยรวมเป็นเพียงตัวเลข
S.Lott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.