ฉันมีปัญหาในการเพิ่มประสิทธิภาพที่ฉันต้องการแก้ไข คุณมีโครงสร้างข้อมูลบางประเภท:
data Foo =
{ fooA :: Int
, fooB :: Int
, fooC :: Int
, fooD :: Int
, fooE :: Int
}
และฟังก์ชันการให้คะแนน:
rateFoo :: myFoo -> Int
ฉันต้องปรับผลลัพธ์ของ rateFoo
ให้เหมาะสมโดยการเปลี่ยนค่าในโครงสร้าง ในกรณีนี้ ฉันตัดสินใจใช้การค้นหาแบบเจาะลึกซ้ำเพื่อแก้ไขปัญหา แผนผังการค้นหา (ไม่สิ้นสุด) เพื่อการเพิ่มประสิทธิภาพที่ดีที่สุดถูกสร้างขึ้นโดยฟังก์ชันอื่น ซึ่งใช้การเปลี่ยนแปลงที่เป็นไปได้ทั้งหมดกับแผนผังแบบเรียกซ้ำ:
fooTree :: Foo -> Tree
ฟังก์ชั่นการค้นหาของฉันมีลักษณะดังนี้:
optimize :: Int -> Foo -> Foo
optimize threshold foo = undefined
คำถามที่ฉันมีก่อนที่จะเริ่มคือ:
เนื่องจากข้อมูลในแต่ละจุดสามารถสร้างแผนภูมิได้ จึงเป็นไปได้ไหมที่จะมีเฉพาะส่วนของแผนภูมิที่สร้างขึ้นซึ่งอัลกอริธึมจำเป็นต้องใช้ในปัจจุบัน เป็นไปได้หรือไม่ที่หน่วยความจำจะว่างและต้นไม้ถูกสร้างใหม่หากจำเป็นเพื่อบันทึกหน่วยความจำ (การลาที่ระดับ n สามารถสร้างได้ใน
O(n)
และ n ยังคงเล็ก แต่ไม่เล็กพอที่จะมีทั้งต้นไม้ในหน่วยความจำเมื่อเวลาผ่านไป)นี่เป็นสิ่งที่ฉันคาดหวังได้จากรันไทม์หรือไม่ นิพจน์รันไทม์ ประเมินค่าไม่ได้ สามารถ (เปลี่ยนนิพจน์ที่ได้รับการประเมินให้เป็นนิพจน์ที่ไม่ได้รับการประเมิน) ได้หรือไม่ หรือแฮ็คสกปรกที่ฉันต้องทำเพื่อสิ่งนี้คืออะไร?