ความแตกต่างของผลรวมโซลูชั่นที่นำเสนอโดยTobiและมาริโอสามารถในความเป็นจริงจะได้รับการทั่วไปประเภทข้อมูลใด ๆ ที่เราสามารถกำหนด (คงที่เวลา) ดำเนินการทวิภาค⊕ที่เป็น:Θ ( n )⊕
- รวมเช่นว่าค่าใด ๆและข , ⊕ ขถูกกำหนดและประเภทเดียวกัน (หรืออย่างน้อยที่สุดของ supertype เหมาะสมบางส่วนของมันซึ่งผู้ประกอบการ⊕ยังคงกำหนด);aขa ⊕ b⊕
- เชื่อมโยงดังกล่าวว่า⊕ ( ข⊕ ค) = ( ⊕ ข) ⊕ ค ;a ⊕ ( b ⊕ c ) = ( a ⊕ b ) ⊕ c
- commutativeเช่น ; และa ⊕ b = b ⊕ a
- cancellativeเช่นว่ามีผู้ประกอบการผกผันที่น่าพอใจ( ⊕ ข) ⊖ ข= เทคนิคการดำเนินการผกผันนี้ไม่ได้จำเป็นต้องคงที่เวลาตราบใดที่ "ลบ" สองผลบวกของnองค์ประกอบแต่ละไม่ได้ใช้เวลานานกว่าO ( n )เวลา⊖( a ⊕ b ) ⊖ b = anO ( n )
(ถ้าชนิดเท่านั้นที่สามารถใช้จำนวน จำกัด ของค่าที่แตกต่างกันคุณสมบัติเหล่านี้มีเพียงพอที่จะทำให้มันเป็นกลุ่มศาสนาคริสต์แม้ว่าไม่ก็อย่างน้อยจะมีการสับเปลี่ยน semigroup cancellative .)
เช่นการใช้การดำเนินการเราสามารถกำหนด "ผลรวม" ของอาร์เรย์= ( 1 , 2 , ... , n )เป็น( ⊕⊕a = ( a1,2, … , an) ได้รับอีกอาร์เรย์ข= ( ข1 , ข2 , ... , ขn , ขn + 1 )ที่มีองค์ประกอบทั้งหมดของบวกหนึ่งองค์ประกอบเสริม xเราจึงมี ( ⊕
( ⊕a ) = a1⊕2⊕ ⋯ ⊕ an.
b = ( b1, ข2, … , bn, ขn + 1)ax , และเพื่อให้เราสามารถหาองค์ประกอบพิเศษนี้ได้โดยการคำนวณ:
x = ( ⊕( ⊕b ) = ( ⊕a ) ⊕ xx = ( ⊕b ) ⊖ ( ⊕ก. )
ตัวอย่างเช่นถ้าค่าในอาร์เรย์เป็นจำนวนเต็มแล้วจำนวนเต็มนอกจาก (หรือนอกเหนือจากแบบแยกส่วนชนิดที่มีความยาว จำกัด จำนวนเต็ม) สามารถใช้เป็นผู้ประกอบการกับการลบการดำเนินงานผกผัน⊖ อีกทางเลือกหนึ่งสำหรับการใด ๆชนิดของข้อมูลที่มีค่าสามารถแสดงเป็นสตริงความยาวคงบิตเราสามารถใช้ค่าที่เหมาะสมแฮคเกอร์ขณะที่ทั้งสอง⊕และ⊖⊕⊖⊕⊖
โดยทั่วไปเราสามารถใช้วิธีการ XOR bitwise กับสตริงที่มีความยาวผันแปรได้โดยการขยายให้ยาวเท่ากับความยาวเท่าที่จำเป็นตราบใดที่เรามีวิธีที่จะลบการขยายแบบกลับด้านในตอนท้าย
ในบางกรณีนี่เป็นเรื่องเล็กน้อย ตัวอย่างเช่น C-style null สิ้นสุดด้วยไบต์สตริงที่เข้ารหัสความยาวของตนเองโดยนัยดังนั้นการใช้วิธีนี้สำหรับพวกเขานั้นเป็นเรื่องเล็กน้อย: เมื่อ XORing สองสายให้วางหนึ่งอันที่สั้นกว่าด้วย null null เพื่อทำการจับคู่ความยาวของมัน ผลลัพธ์สุดท้าย โปรดทราบว่าสตริงผลรวม XOR กลางสามารถมีไบต์ที่เป็นโมฆะดังนั้นคุณจะต้องเก็บความยาวไว้อย่างชัดเจน (แต่คุณต้องการได้เพียงหนึ่งหรือสองสตริงเท่านั้น)
โดยทั่วไปแล้ววิธีการหนึ่งที่จะใช้ได้กับสตริงบิทโดยพลการนั้นจะใช้การแพ็ดหนึ่งบิตโดยที่บิตอินพุตแต่ละอันจะถูกเติมด้วยบิตเดียวและจากนั้นด้วย0บิตมากเท่าที่จำเป็นเพื่อให้ตรงกับความยาว (เบาะ) ของ สตริงอินพุตที่ยาวที่สุด (แน่นอนว่าการขยายนี้ไม่จำเป็นต้องทำล่วงหน้าอย่างชัดเจนเราสามารถนำไปใช้ได้ตามต้องการขณะคำนวณผลรวม XOR) ในที่สุดเราก็ต้องตัด0บิตต่อท้ายและ1บิตสุดท้ายจาก ผล. อีกทางหนึ่งถ้าเรารู้ว่าสายอักขระนั้นมีค่าไม่เกิน2 321001232ไบต์ยาวเราสามารถเข้ารหัสความยาวของแต่ละสตริงเป็นจำนวนเต็ม 32 บิตและเติมเข้าไปในสตริง หรือเราสามารถเข้ารหัสความยาวของสายอักขระได้โดยใช้รหัสนำหน้าบางส่วนและเติมความยาวให้กับสตริง มีการเข้ารหัสที่เป็นไปได้อื่น ๆ เช่นกัน
ในความเป็นจริงตั้งแต่ใด ๆซึ่งแสดงประเภทข้อมูลเกี่ยวกับความสามารถของคอมพิวเตอร์โดยความหมายจะเป็นตัวแทนเป็นสตริงบิต จำกัด ความยาววิธีนี้ผลตอบแทนถัวเฉลี่ยทั่วไปการแก้ไขปัญหาΘ ( n )
ส่วนที่อาจมีความยุ่งยากเพียงอย่างเดียวคือเพื่อการยกเลิกการทำงานเราต้องเลือกการแสดง bitstring แบบบัญญัติที่เป็นเอกลักษณ์สำหรับแต่ละค่าซึ่งอาจเป็นเรื่องยาก ในการรับรองเทียบเท่าที่แตกต่างกัน นี่ไม่ใช่จุดอ่อนเฉพาะของวิธีนี้อย่างไรก็ตาม วิธีการอื่นในการแก้ปัญหานี้ยังสามารถทำให้ล้มเหลวได้หากอินพุตได้รับอนุญาตให้มีค่าที่มีความเท่าเทียมกันไม่สามารถตัดสินใจได้