และโดยเฉพาะอย่างยิ่งกฎหมายที่สอง : เอนโทรปีของแยกระบบเพิ่มขึ้นเมื่อเวลาผ่านไป
สำหรับความท้าทายนี้
- " ระบบแยก " จะถูกนำไปเป็นโปรแกรมหรือฟังก์ชั่น (ตัวย่อเป็น "โปรแกรม" นับจากนี้เป็นต้นไป);
- การผ่านของ " เวลา " จะสอดคล้องกับการประมวลผลซ้ำของเอาต์พุตของโปรแกรมซึ่งถือว่าเป็นโปรแกรมใหม่
- " เอนโทรปี " จะถูกใช้เป็นเอนโทรปีลำดับแรกของแชนนอน (จะถูกกำหนดไว้ด้านล่าง) ซึ่งเป็นการวัดความหลากหลายของตัวละครของสตริง
ความท้าทาย
โปรแกรมของคุณควรสร้างสตริงที่ไม่ว่างเปล่าซึ่งเมื่อเรียกใช้งานเป็นโปรแกรมในภาษาเดียวกันจะสร้างสตริงที่มีเอนโทรปีมากกว่าสตริงก่อนหน้า อนันต์วนนี้ขั้นตอนการดำเนินการที่การส่งออกจะต้องผลิตลำดับที่เพิ่มขึ้นอย่างเคร่งครัดของค่าเอนโทรปี
สตริงสามารถมีอักขระ Unicode 9.0ได้ ลำดับของสตริงจะต้องกำหนดไว้ล่วงหน้า (เมื่อเทียบกับการสุ่ม)
เอนโทรปีสำหรับสตริงที่กำหนดจะได้รับการกำหนดไว้ดังนี้ ระบุอักขระที่ไม่ซ้ำและจำนวนครั้งที่ปรากฏในสตริง ความถี่p iของอักขระเฉพาะi -th คือจำนวนการเกิดขึ้นของอักขระนั้นหารด้วยความยาวของสตริง เอนโทรปีคืออะไร
โดยที่ผลรวมอยู่เหนืออักขระเฉพาะทั้งหมดของสตริง ในทางเทคนิคแล้วสิ่งนี้สอดคล้องกับเอนโทรปีของตัวแปรสุ่มแบบไม่ต่อเนื่องโดยมีการแจกแจงตามความถี่ที่สังเกตได้ในสตริง
ให้H kแสดงถึงเอนโทรปีของสตริงที่สร้างโดยโปรแกรมk -th และให้H 0แสดงถึงเอนโทรปีของรหัสโปรแกรมเริ่มต้น นอกจากนี้ให้L 0แทนความยาวของโปรแกรมเริ่มต้นเป็นตัวอักษร ลำดับ { H k } เป็นเสียงเดียวตามข้อกำหนดของการท้าทายและถูก จำกัด ขอบเขต (เนื่องจากจำนวนอักขระที่มีอยู่มี จำกัด ) ดังนั้นมันมีขีด จำกัดH ∞
คะแนนของการส่งจะเป็น ( H ∞ - H 0 ) / L 0 :
- ตัวเศษ, H ∞ - H 0 , สะท้อนให้เห็นถึงสิ่งที่ขอบเขตรหัสของคุณ "เชื่อฟัง" กฎหมายของการเพิ่มเอนโทรปีในช่วงเวลาที่ไม่มีที่สิ้นสุด
- denonimator, L 0คือความยาวของรหัสเริ่มต้นเป็นตัวอักษร (ไม่ใช่เป็นไบต์)
รหัสที่มีคะแนนสูงสุดชนะ ความสัมพันธ์จะได้รับการแก้ไขในความโปรดปรานของการส่ง / แก้ไขที่เร็วที่สุด
ในการคำนวณเอนโทรปีของสตริงคุณสามารถใช้ข้อมูลโค้ด JavaScript (ความอนุเคราะห์ของ@flawrและด้วยการแก้ไขโดย@Dennisและ@ETHproductions ) ที่ส่วนท้ายของโพสต์นี้
หากได้รับขีด จำกัดH ∞เป็นเรื่องยากในกรณีเฉพาะของคุณคุณสามารถใช้ขอบเขตล่างใด ๆ พูดH 20เพื่อคำนวณคะแนน (ดังนั้นคุณจะใช้ ( H 20 - H 0 ) / L 0 ) แต่ในกรณีใด ๆ ลำดับอนันต์ของเอนโทรปีจะต้องเพิ่มขึ้นอย่างเคร่งครัด
โปรดระบุคำอธิบายหรือหลักฐานสั้น ๆ ว่าลำดับของการเพิ่มขึ้นของ entropies หากไม่ชัดเจน
ตัวอย่าง
ในภาษาสมมติให้พิจารณาโค้ดaabcab
ซึ่งเมื่อ run สร้างสตริงcdefgh
ซึ่งเมื่อ run สร้างcdefghi
ขึ้นซึ่ง ...
ตัวละครที่เป็นเอกลักษณ์ของรหัสเดิมa
, b
และc
มีความถี่ที่เกี่ยวข้อง 3/6, 2/6 และ 1/6 เอนโทรปีของมันคือ 1.4591 นี่คือH 0
สตริงมีเอนโทรปีมากกว่าcdefgh
aabcab
เราสามารถรู้สิ่งนี้ได้โดยไม่ต้องคำนวณเพราะจำนวนตัวอักษรที่กำหนดเอนโทรปีจะถูกขยายให้มากที่สุดเมื่อความถี่ทั้งหมดเท่ากัน อันที่จริงแล้วเอนโทรปีH 1คือ 2.5850
สตริงcdefghi
อีกครั้งมีเอนโทรปีมากกว่าครั้งก่อน ตอนนี้เราสามารถทำได้โดยไม่ต้องใช้คอมพิวเตอร์เพราะการเพิ่มตัวละครที่ไม่มีอยู่เพิ่มเอนโทรปีเสมอ แน่นอนH 2คือ 2.8074
หากสตริงถัดไปเป็น42
เชนจะไม่ถูกต้องเนื่องจากH 3จะเป็น 1 มีขนาดเล็กกว่า 2.8074
หากในทางกลับกันลำดับก็เกิดการผลิตสายของเอนโทรปีที่เพิ่มขึ้นด้วยขีด จำกัดH ∞ = 3 คะแนนจะเป็น (3 (1.4597) / 6 = 0.2567
กิตติกรรมประกาศ
ขอบคุณ
@ xnorสำหรับความช่วยเหลือของเขาในการปรับปรุงความท้าทายและโดยเฉพาะอย่างยิ่งสำหรับการโน้มน้าวใจฉันว่าโซ่ที่ไม่มีที่สิ้นสุดของการเพิ่มเอนโทรปีที่ได้รับจากการกระทำซ้ำแล้วซ้ำอีกเป็นไปได้จริง;
@ flawrสำหรับคำแนะนำหลายประการรวมถึงการแก้ไขฟังก์ชั่นคะแนนและสำหรับการเขียนตัวอย่างที่มีประโยชน์มาก
@ คำตอบสำหรับการชี้ให้เห็นข้อเสียเปรียบที่สำคัญในคำจำกัดความก่อนหน้านี้ของฟังก์ชันคะแนน
@Dennisสำหรับการแก้ไขในตัวอย่าง JavaScript;
@ETHproductionsสำหรับการแก้ไขอื่นในตัวอย่าง
@PeterTaylorสำหรับการแก้ไขในความหมายของเอนโทรปี