มีวิธีใดที่เร็วกว่าในการตรวจสอบว่ารายการในรายการเทียบเท่าหรือไม่
นี่ฉันมีจำนวนเต็ม1:7สำหรับสี่พาร์ทิชันที่แตกต่างกันกล่าวคือ {1}, {2,3,4}, {5,6} และ {7} list(1,c(2,3,4),c(5,6),7)และพาร์ทิชันเหล่านั้นจะถูกเขียนในรายการคือ ฉันถือว่าพาร์ติชั่นเป็นชุด, ดังนั้นการเปลี่ยนแปลงองค์ประกอบที่แตกต่างกันภายในพาร์ติชั่นหนึ่งควรถูกจดจำเป็นพาร์ติชั่นเดียวกัน. ตัวอย่างเช่นlist(1,c(2,3,4),c(5,6),7)และlist(7,1,c(2,3,4),c(6,5))เทียบเท่า โปรดทราบว่าไม่มีการทำซ้ำสำหรับองค์ประกอบในรายการเช่นไม่ใช่list(c(1,2),c(2,1),c(1,2))เนื่องจากปัญหานี้กำลังพูดถึงพาร์ติชันพิเศษเหนือทั้งชุด ฉันแสดงรายการการเรียงลำดับที่แตกต่างกันบางรายการลงในรายการ lstด้านล่าง lst <- list(list(1,c(2,3,4),c(5,6),7), list(c(2,3,4),1,7,c(5,6)), list(1,c(2,3,4),7,c(6,5)), list(7,1,c(3,2,4),c(5,6))) และสิ่งที่ฉันต้องการทำคือการตรวจสอบว่าพีชคณิตทั้งหมดมีความเท่าเทียมกัน TRUEถ้าใช่แล้วเราจะได้รับผล สิ่งที่ฉันทำจนถึงตอนนี้คือการจัดเรียงองค์ประกอบภายในแต่ละพาร์ติชันและใช้setdiff()กับinterset()และunion()ตัดสินมัน (ดูรหัสของฉันด้านล่าง) s <- Map(function(v) Map(sort,v),lst) equivalent <- length(setdiff(Reduce(union,s),Reduce(intersect,s),))==0 อย่างไรก็ตามฉันคิดว่าวิธีนี้จะช้าเมื่อใดก็ตามที่ขนาดพาร์ติชันเพิ่มขึ้น มีวิธีเร็วกว่าที่จะทำหรือไม่ ขอบคุณล่วงหน้า! กรณีทดสอบบางอย่าง (ข้อมูลขนาดเล็ก) # should return `TRUE` lst1 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,4),c(6,5))) # should return `TRUE` lst2 <- …