Excel: ค้นหาชุดย่อยของตัวเลขที่เพิ่มไปยังผลรวมที่กำหนดหรือไม่


10

ฉันมีคอลัมน์ตัวเลข (สมมติว่ามันคือ A1: A100) และฉันต้องการค้นหาชุดย่อยของผลรวมนั้นเป็นผลรวมที่แน่นอน


เรื่องไม่สำคัญ: นี่เป็นตัวอย่างของปัญหาที่เกิดขึ้นอย่างสมบูรณ์: en.wikipedia.org/wiki/Subset_sum_problem
Dave L.

คำตอบ:


25

เป็นไปได้ด้วย Solver add-in * ขั้นตอนต่อไปนี้ใช้ได้กับฉันใน Excel 2007 และ 2010

  1. กำหนดเซลล์เพื่อเก็บผลลัพธ์ (C1 สำหรับตัวอย่างนี้) - นี่คือเซลล์เป้าหมายและคอลัมน์ที่ excel สามารถใช้สำหรับงานขูด (B1: B100 สำหรับตัวอย่างนี้)
  2. ในเซลล์เป้าหมายให้ป้อนสูตร "= SUMPRODUCT (A1: A100, B1: B100)" (ไม่มีเครื่องหมายคำพูด) วิธีนี้จะคำนวณผลรวมของ A1 * B1 + A2 * B2 + ... ฯลฯ
  3. เลือกเปิดตัวแก้ปัญหา (แท็บข้อมูลกลุ่มการวิเคราะห์)
  4. เซลล์เป้าหมายควรชัดเจน ($ C $ 1 สำหรับตัวอย่างนี้)
  5. สำหรับ 'เท่ากับ:' เลือก 'ค่าของ:' และป้อนค่าที่ต้องการ
  6. ใน 'โดยการเปลี่ยนเซลล์' ป้อน "$ B $ 1: $ B $ 100" (ไม่มีเครื่องหมายคำพูดและอาจจำเป็นต้องเริ่มต้นค่าเหล่านี้เป็น 0 ด้วยตัวคุณเอง)
  7. เพิ่มข้อ จำกัด ให้กับเซลล์ที่สามารถเปลี่ยนแปลงได้ ในเมนูเลื่อนลงเลือก 'bin' (Binary) สิ่งนี้จะ จำกัด ค่าของเซลล์เหล่านี้เป็น 0 (ลบเซลล์ A ที่สอดคล้องกันออกจากผลรวม) หรือ 1 (เพิ่มเซลล์ A ที่สอดคล้องกับผลรวม)
  8. คลิก 'แก้ไข' และรอ ตัวเลขที่เป็นส่วนหนึ่งของชุดย่อยที่คุณต้องการจะมี 1 ในคอลัมน์ B

ตัวอย่าง


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


โบนัส: คุณสามารถให้ Excel ไฮไลต์เซลล์ที่คุณต้องการได้โดยอัตโนมัติโดยเพิ่มการจัดรูปแบบตามเงื่อนไขให้กับเซลล์เหล่านั้น เลือกเซลล์ทั้งหมดที่คุณต้องการจัดรูปแบบและจาก (แท็บหน้าแรก) >> (กลุ่มสไตล์) >> การจัดรูปแบบตามเงื่อนไข >> กฎใหม่เลือก 'ใช้สูตรเพื่อกำหนดเซลล์ที่จะจัดรูปแบบ' ในสูตรให้ป้อน '= $ B1 = 1' (ไม่มีเครื่องหมายอัญประกาศ) ซึ่งจะประเมินเป็นจริงหากแถวที่เกี่ยวข้องในคอลัมน์ B คือ 1 สำหรับรูปแบบคุณสามารถเพิ่มสิ่งที่คุณต้องการ (ตัวหนาตัวเอียงตัวเอียงสีเขียว ฯลฯ )

อีกวิธีที่ง่ายในการค้นหาแถวที่สำคัญคือการจัดเรียงคอลัมน์ B Z-> A และสิ่งที่ 1 ทั้งหมดจะขึ้นไปด้านบน


* สามารถเพิ่มตัวแก้ปัญหาด้วยขั้นตอนเหล่านี้

  1. คลิกปุ่ม Microsoft Office แล้วคลิกตัวเลือกของ Excel
  2. คลิก Add-In จากนั้นในกล่อง Manage ให้เลือก Excel Add-in
  3. คลิกไป
  4. ในกล่อง Add-in ที่มีอยู่ให้เลือกกล่องกาเครื่องหมาย Solver Add-in แล้วคลิกตกลง (หาก Solver Add-in ไม่ปรากฏในกล่อง Add-in ที่มีอยู่ให้คลิกเรียกดูเพื่อค้นหา Add-in)
  5. หากคุณได้รับแจ้งว่าไม่ได้ติดตั้ง Solver Add-in ในคอมพิวเตอร์ของคุณให้คลิก Yes เพื่อติดตั้ง

1
ใน Excel 2013 คุณต้องยกเลิกการเลือก "ละเว้นข้อ จำกัด จำนวนเต็ม" จากเมนูตัวเลือก มิฉะนั้นคุณจะได้รับค่า INT ที่ไม่ใช่ 0 และ 1
Omar Shahine

1
เพื่อให้ทำงานได้อย่างถูกต้อง: 1. สูตรใน Cell C1 ควรเป็น sumPRODUCT (ไม่ใช่แค่ผลรวม) 2. เซลล์ในคอลัมน์ B ควรมีอินพุตเป็นศูนย์

ขอบคุณ! สำหรับฉันแล้วขั้นตอนเก่ายังคงใช้ได้ แต่ฉันชอบ sumproduct ดีกว่าเพราะมันไม่ได้ขึ้นอยู่กับคุณสมบัติของสูตรอาร์เรย์
เนทพาร์สันส์

อย่างไรก็ตามเพื่อค้นหาชุดค่าผสมทั้งหมด ... แม้ว่าจะมีโซลูชันหนึ่งที่พบโดยตัวแก้ไข .. วิธีการค้นหาโซลูชันอื่น ๆ ??? อาร์เรย์ของฉันอยู่ที่นี่: v = [1100, 1105, 11830, 14790, 2325, 2455, 2555, 2935, 3050, 3150, 3185, 3370, 3475, 350, 3530, 3580, 885, 9624] ผลรวม = 43029 ... solution1 = [350, 1100, 2325, 2455, 2555, 2935, 3150, 3745, 9624, 14790], solution2 = [350, 885, 1100, 1105, 2325, 2455, 2555, 3530, 3590, 3680 , 9624, 11830]
ihightower

2

SumMatch Add-in Excel ราคาประหยัดซึ่งจะเน้นชุดย่อยของตัวเลขที่รวมกันเป็นผลรวมเป้าหมาย

ป้อนคำอธิบายรูปภาพที่นี่


1
สวัสดี AIsoft หาดี อาจเป็นครั้งต่อไปที่คุณสามารถเพิ่มข้อมูลเพิ่มเติม
nixda

@pnuts ฉันทำผิดพลาดหรือไม่? ฉันไม่เข้าใจสิ่งที่คุณหมายถึงด้วย AUD $ 30
nixda

@pnuts อาโอเคนั่นเป็นจุดที่ดี
nixda

6
หมายเหตุสำหรับตัวเอง: AUD $ 30 = 30 ดอลลาร์ออสเตรเลีย มันไม่ได้อ้างอิงถึงเซลล์ Excel [AUD30] พร้อมคอลัมน์คงที่ .... : D
nixda

1
ป้ายราคาเป็นข้อเสียเปรียบเช่นเดียวกับการขาดคำแนะนำที่ชัดเจน มีอะไรมากกว่า 1 ประโยค + 1 รูปจากเว็บไซต์ของผลิตภัณฑ์จริงๆ
Nate Parsons
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.