เปรียบเทียบจำนวนตรรกยะ


12

ได้รับ, B , C , D NและB , D { 0 } ,a,b,c,dNb,d{0}

ab<cdad<cb

คำถามของฉันคือ:

ได้รับ, B , C , Da,b,c,d

  1. สมมติว่าเราสามารถตัดสินใจx<yZในO(|x|+|y|)จะมีวิธีของการตัดสินใจใด ๆd < โดยไม่ต้อง preform คูณ (หรือหน่วยงาน) และ . หรือมีหลักฐานบางอย่างที่ไม่มีทางad<cbadcb
  2. มีวิธีที่เร็วกว่าในการเปรียบเทียบจำนวนตรรกยะมากกว่าการคูณตัวส่วน

1
@PKG แต่การคูณจะใช้เวลามากกว่าเวลาเชิงเส้น ฉันคิดว่าเราต้องการบางสิ่งที่เร็วกว่าสำหรับคำถามนี้
โจ

1
กรณีที่หากินคือเมื่อช่วงเวลาหนึ่งมีอีกเช่น[a,d][b,c] ]
PKG

1
คุณถือว่าโดยปริยายว่าbและdมีสัญญาณเหมือนกัน มิฉะนั้นทิศทางความไม่เท่าเทียมจะเปลี่ยนไป
Ran G.

1
(1) การคูณเกือบเป็นเชิงเส้น (ค้นหาอัลกอริทึมของFürer) (2) "จำนวนเต็มจำนวนตรรกยะ" อย่างน้อยในบริบทของทฤษฎีจำนวนพีชคณิตจริง ๆ แล้วหมายถึงจำนวนเต็ม คุณต้องการพูดว่า "เหตุผล" หรือ "จำนวนตรรกยะ"
Yuval Filmus

1
ดูข้อมูลที่ซ้ำกันชัดเจนวิธีการเปรียบเทียบจำนวนตรรกยะ?
vzn

คำตอบ:


5

งานวิจัยปัจจุบันของฉัน:

ความพยายามเริ่มต้นที่กฎทั่วไปบางอย่าง

เราสามารถลองสร้างกฎทั่วไปสำหรับการแก้ปัญหาการเปรียบเทียบด้วยเหตุผล:

สมมติว่า :a,b,c,d

a<bcdab<cd
นี่หมายถึงโดยทั่วไปหากด้านซ้ายน้อยกว่าหนึ่งและด้านขวาอย่างน้อยหนึ่งด้านซ้ายจะน้อยกว่าด้านขวา ในหลอดเลือดดำเดียวกัน:

abcdabcd

กฎอื่น:

(b>d)(ac)[ab<cd]
ฉันคิดว่ากฎนี้เป็นตรรกะเนื่องจากตัวส่วนใหญ่จำนวนน้อยในขณะที่ยิ่งใหญ่ ตัวเศษยิ่งตัวเลข ดังนั้นหากด้านซ้ายมีตัวส่วนที่ใหญ่กว่าและตัวเศษที่เล็กกว่าทางด้านซ้ายจะเล็กกว่า

จากที่นี่เป็นต้นไปเราจะสมมติว่าเพราะมิฉะนั้นเราสามารถแก้ปัญหาด้วยกฎข้างต้นหรือย้อนกลับคำถามไปที่ , และเราจบลงด้วยเงื่อนไขนี้อย่างไรก็ตามa<cb<dcd<?ab

กฎ : นี่ โดยทั่วไปกฎระบุว่าคุณสามารถลบตัวเศษจากตัวส่วนและตั้งค่าผลลัพธ์เป็นตัวเศษเสมอเพื่อให้ได้ปัญหาที่เท่าเทียมกัน ฉันจะทิ้งหลักฐานไว้

(ba)b<(dc)d[ab<cd]|a<c,b<d

ab<cadb[ab<cd]|a<c,b<d

กฎนี้ช่วยให้คุณสามารถลบตัวเศษและตัวส่วนซ้ายจากตัวเศษและตัวหารด้านขวาสำหรับปัญหาที่เทียบเท่ากัน

และแน่นอนว่ามีการปรับสเกล:

akbk<cd[ab<cd]|a<c,b<d
คุณ สามารถใช้มาตราส่วนเพื่อทำให้กฎการลบมีความสำคัญมากกว่า

ใช้กฎเหล่านี้คุณสามารถเล่นกับสิ่งต่าง ๆ นำไปใช้ซ้ำ ๆ ในชุดค่าผสมอัจฉริยะ แต่มีบางกรณีที่ตัวเลขใกล้เคียงและพยาธิสภาพ

ด้วยการใช้กฎก่อนหน้านี้คุณสามารถลดปัญหาเหล่านี้เป็น:

ab<ap+qbp+qab<qq|a>q,b>q

บางครั้งคุณสามารถแก้ปัญหานี้ได้ในตอนนี้บางครั้งก็ไม่ กรณีทางพยาธิวิทยามักจะอยู่ในรูปแบบ:

ab<cd|a>c,b>d,cO(a),dO(b)

จากนั้นคุณพลิกมันและส่งผลในสิ่งเดียวกันเพียงน้อยลงเล็กน้อย แอปพลิเคชันของกฏ + การพลิกแต่ละอันจะลดขนาดลงด้วยหลัก / บิต AFAICT คุณไม่สามารถแก้ไขได้อย่างรวดเร็วเว้นแต่ว่าคุณจะใช้กฎครั้ง (หนึ่งครั้งสำหรับแต่ละหลัก / บิต) ในกรณีทางพยาธิวิทยาโดยไม่คำนึงถึงข้อได้เปรียบที่ปรากฏO(n)

ปัญหาเปิด?

ฉันตระหนักว่าปัญหานี้ดูเหมือนจะยากกว่าปัญหาเปิดปัจจุบันบางอย่าง

ปัญหาที่อ่อนแอกว่าคือการพิจารณา:

ad=?bc

และอ่อนแอกว่า:

ad=?c

นี่คือปัญหาที่เปิดกว้างของการตรวจสอบการคูณ มันจะอ่อนแอกว่าเพราะถ้าคุณมีวิธีกำหนดจากนั้นคุณสามารถกำหนดได้อย่างง่ายดายโดยการทดสอบโดยใช้อัลกอริทึมสองครั้ง ,<โฆษณาiff ทั้งเป็นความจริงที่คุณรู้ว่าภาคตะวันออกเฉียงเหนือปีก่อนคริสตกาลad<?bcad=?bcad<?bcbc<?adadbc

ตอนนี้เป็นปัญหาเปิดอย่างน้อยในปี 1986:ad=?c

ความซับซ้อนของการคูณและการหาร ให้เราเริ่มต้นด้วยสมการที่ง่ายมาก ax = b เมื่อพิจารณาถึงจำนวนเต็มการทดสอบความสามารถในการละลายและการหาวิธีแก้ปัญหา x เป็นไปได้โดยการหารจำนวนเต็มด้วยส่วนที่เหลือเป็นศูนย์ สำหรับการตรวจสอบโซลูชันที่กำหนด x การคูณจำนวนเต็มจะเพียงพอ แต่เป็นปัญหาเปิดที่น่าสนใจไม่ว่าจะมีวิธีการตรวจสอบที่เร็วขึ้น

- ARNOLD SCHÖNHAGEในการแก้สมการในแง่ของความซับซ้อนในการคำนวณ

น่าสนใจมากเขายังกล่าวถึงคำถามของการตรวจสอบการคูณเมทริกซ์ :

มันเป็นคำถามที่น่าสนใจว่าการตรวจสอบการคูณเมทริกซ์หรือไม่เช่นการตรวจสอบว่า AB = G สำหรับ C ที่กำหนดสามารถทำได้เร็วกว่าหรือไม่

- ARNOLD SCHÖNHAGEในการแก้สมการในแง่ของความซับซ้อนในการคำนวณ

สิ่งนี้ได้รับการแก้ไขตั้งแต่และเป็นไปได้ที่จะตรวจสอบในเวลาด้วยอัลกอริธึมแบบสุ่ม (โดยเป็นขนาดของเมทริกซ์อินพุตดังนั้นโดยทั่วไปแล้วเวลาเชิงเส้นใน ขนาดของอินพุต) ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะลดการคูณจำนวนเต็มเป็นการคูณเมทริกซ์โดยเฉพาะอย่างยิ่งกับความคล้ายคลึงของพวกเขาเนื่องจากความคล้ายคลึงกันของการคูณจำนวนเต็มของ Karatsuba กับอัลกอริทึมการคูณเมทริกซ์ที่ตามมา บางทีในบางวิธีเราสามารถใช้อัลกอริทึมการตรวจสอบการคูณเมทริกซ์สำหรับการคูณจำนวนเต็มO(n2)n×n

อย่างไรก็ตามเนื่องจากความรู้ของฉันยังคงเป็นปัญหาเปิดปัญหาที่แข็งแกร่งของเปิดแน่นอน ฉันอยากรู้อยากเห็นหากการแก้ปัญหาการตรวจสอบความเท่าเทียมกันจะมีผลต่อปัญหาการตรวจสอบความไม่เท่าเทียมกันการเปรียบเทียบad<?cd

ความแตกต่างเล็กน้อยของปัญหาของเราคือถ้ามีการรับประกันว่าเศษส่วนจะลดลงเหลือน้อยที่สุด ในกรณีนี้มันง่ายที่จะบอกว่าcd สิ่งนี้มีผลต่อการตรวจสอบการเปรียบเทียบสำหรับเศษส่วนที่ลดลงหรือไม่ab=?cd

คำถามที่ละเอียดกว่านี้จะเกิดอะไรขึ้นถ้าเรามีวิธีทดสอบสิ่งนี้จะขยายไปสู่การทดสอบ ? ฉันไม่เห็นวิธีที่คุณสามารถใช้ "ทั้งสองวิธี" อย่างที่เราทำกับ<cdad<?cad=?cad<?cd

ที่เกี่ยวข้อง:

  • การรับรู้โดยประมาณของภาษาที่ไม่ปกติโดย Finite Automata

    พวกเขาทำงานเกี่ยวกับการคูณโดยประมาณและการตรวจสอบแบบสุ่มซึ่งฉันไม่เข้าใจ

  • math.SE: จะเปรียบเทียบการคูณสองรายการโดยไม่คูณได้อย่างไร
  • สมมติว่าเราได้รับอนุญาตให้ preprocessมากเท่าที่เราต้องการในเวลาพหุนามเราสามารถแก้เส้นเวลา?cab=c
  • มีอัลกอริธึมการคูณจำนวนเต็มแบบไม่เชิงเส้นเชิงเวลาหรือไม่? ดูhttp://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1129399

    มีอัลกอริทึมที่รู้จักกันดีสำหรับการคูณตัวเลข n-bit ด้วยความซับซ้อนของ O (n log log (n) log (n)) และเราไม่สามารถทำได้ดีกว่า O (n) เพราะอย่างน้อยเราต้องดูข้อมูลทั้งหมด คำถามของฉันคือเราสามารถเข้าถึง O (n) สำหรับคลาสที่เหมาะสมของอัลกอริทึม "nondeterministic" ได้หรือไม่?

    แม่นยำกว่ามีอัลกอริทึมที่สามารถยอมรับตัวเลขไบนารีสองบิต "a" และ "b" และหมายเลข 2n- บิต "c" และบอกคุณในเวลา O (n) ว่า "a * b = c" หรือไม่? ถ้าไม่มีมีรูปแบบอื่น ๆ ของใบรับรอง C (a, b, c) ที่อัลกอริทึมสามารถใช้เพื่อทดสอบผลิตภัณฑ์ในเวลาเชิงเส้นหรือไม่? ถ้าไม่ใช่เวลาเชิงเส้นปัญหาของการทดสอบผลิตภัณฑ์อย่างน้อย asymptotically ง่ายกว่าการคำนวณมัน? ยินดีต้อนรับผลลัพธ์ที่รู้จักตามบรรทัดเหล่านี้จะยินดีต้อนรับ

    จอห์น.

    -johnh4717


1

นี่คือความพยายามบางส่วนที่ทำให้ไม่สามารถปิดบังได้ สมมติว่าเราสามารถใช้การบวกและการลบ (จำนวนคงที่) ใน decider ของเราเช่นเดียวกับจำนวนคงที่ของ wrt ตัวเลขที่กำหนดไว้ล่วงหน้า กล่าวอีกนัยหนึ่งเราสามารถทำจำนวนคงที่ , , ฯลฯ ใน decider ของเรา จากนั้นปริมาณที่เราสามารถคำนวณได้มีรูปแบบโดยที่ค่าคงที่ที่กำหนดไว้ล่วงหน้าคือโปรดทราบว่าสามารถคำนวณได้ในเวลาการ)modmod 2mod 3q=k1a+k2b+k3c+k4d=kiakqO(|a|)

แก้ไข decider นี้อ้างว่าจะตรวจสอบบิต IFF โฆษณา>พิจารณาเป็นคะแนนใน 4 บิตจะถูกกำหนดโดยตำแหน่งของมันที่พื้นผิวของซึ่งเป็นไฮเปอร์โบลด์ใน 4 มิติ ถ้าเรามีจุดในพื้นที่อินพุต, decider ด้านบนสามารถคำนวณคะแนนภายในระยะทางที่ถูก จำกัด ขอบเขตของจุดอินพุตนี้, นั่นคือจุดเป็นต้นสิ่งนี้กำหนดคิวบอยด์ในพื้นที่ 4 dB:B=1ad>bca,b,c,dR4Bad=bc(a,b,c,d)q:|qa|=k1,

(จะทำให้ความแม่นยำมากขึ้นได้อย่างไร) ระยะทางจากทรงลูกบาศก์ถึงพื้นผิวนั้นอยู่ในขอบเขตทั่วไปและด้วยเหตุนี้พื้นผิวจึงไม่สามารถคำนวณได้โดย decider


ขออภัยฉันไม่ตอบสนองต่อสิ่งนี้ ฉันคิดว่าสิ่งนี้อาจอยู่เหนือความเข้าใจของฉันและฉันกำลังยุ่งกับการค้นคว้าคำตอบที่เป็นไปได้ในระหว่างนี้
Realz Slaw

1

คำถามที่ดี. คุณจะยอมรับระดับความมั่นใจหรือไม่

อาจจะแบ่งประมาณ กล่าวคือ

ในการคำนวณหาค่าประมาณผลหารโดยประมาณของ a / b ให้เลื่อน a a ไปทางขวา (log_2 (b)) และตามพื้น (log_2 (b)) จากนั้นเรารู้ว่าความฉลาดทางที่ถูกต้องอยู่ระหว่างค่าสองค่านี้

จากนั้นขึ้นอยู่กับขนาดสัมพัทธ์ของจำนวนเต็มสี่จำนวนหนึ่งอาจสามารถออกกฎบางกรณีและรับความมั่นใจ 100%

หนึ่งอาจทำซ้ำขั้นตอนสำหรับ radix นอกเหนือจาก 2 และโดยการสืบทอดของการดำเนินการดังกล่าวเพิ่มระดับของความเชื่อมั่นจนกว่าการเปลี่ยนแปลงของสัญญาณ / tie-break อย่างใดสังเกต?

นั่นคือร่างร่างแรกของฉันของวิธีการ


หากคุณดูที่คำตอบ "การวิจัยปัจจุบัน" ของฉันฉันคิดว่ากฎเหล่านั้นทำอะไรบางอย่างกับผลกระทบนี้ คุณสามารถทำต่อไปได้หลายครั้งที่จะได้รับความเชื่อมั่น 100% ถ้ามันกระทบกับกฎข้อใดข้อหนึ่งและที่แย่ที่สุดคือคุณทำซ้ำกฎหลังซ้ำไปซ้ำมาในแต่ละรอบซึ่งคล้ายกับสิ่งที่คุณแนะนำ อย่างไรก็ตามคำถามของฉันเกี่ยวกับอะไรบางอย่างที่ชัดเจนใน (หรือมากกว่าดีกว่าการคูณจะตอบสนองคำถามนี้ด้วย) หรืออย่างน้อยก็เป็นอัลกอริธึมแบบสุ่ม ของความล้มเหลว O(n)O(nlogn)
Realz Slaw

นอกจากนี้หากใครสามารถตรวจสอบได้ว่านี่เป็นปัญหาเปิดและไม่ยากกว่าการตรวจสอบ (ดูคำตอบ "การวิจัยปัจจุบัน" ของฉันส่วนเปิดปัญหาหรือไม่ ) หรือถ้ามีงานวิจัยหรือผลลัพธ์ที่น่าสนใจอื่น ๆ เกี่ยวกับสิ่งนี้และนั่นอาจเป็นคำตอบที่ยอมรับได้เช่นกัน ab=c
Realz Slaw

1

มีวิธีใดในการตัดสินใจเลือกโฆษณา <cb โดยไม่ต้อง preform การคูณ [แพง]

แน่ใจ

แนวคิด:เปรียบเทียบการขยายทศนิยมแบบทีละนิด

สิ่งที่น่ารังเกียจเพียงอย่างเดียวคือเราต้องแยกความเสมอภาคออกก่อนเพราะมิฉะนั้นเราจะไม่ยุติ
มันมีประโยชน์ที่จะเปรียบเทียบส่วนจำนวนเต็มก่อนเพราะมันง่าย

พิจารณาสิ่งนี้:

def less( (a,b), (c,d) ) = {
  // Compare integer parts first
  intA = a div b
  intC = c div d

  if intA < intB
    return True
  else if intA > intB
    return False
  else // intA == intB
    // Normalize to a number in [0,1]
    a = a mod b
    c = c mod d

    // Check for equality by reducing both
    // fractions to lowest terms
    (a,b) = lowestTerms(a,b)
    (c,d) = lowestTerms(c,d)

    if a == c and b == d
      return False
    else
      do
        // Compute next digits in decimal fraction 
        a = 10 * a
        c = 10 * c

        intA = a div b
        intC = c div d

        // Remove integer part again
        a = a mod b
        c = c mod d
      while intA == intC

      return intA < intC
    end
  end
}

โปรดทราบว่าการdo-whileวนซ้ำจะต้องยุติลงเนื่องจากตัวเลขไม่เท่ากัน เราไม่ทราบว่ามันจะทำงานได้นานแค่ไหน หากตัวเลขใกล้เคียงกันอาจเป็นสักครู่

เห็นได้ชัดว่าไม่มีการทวีคูณที่มีราคาแพง เป็นคนเดียวที่เราต้องการคือการคูณ nominators โดย10โดยเฉพาะอย่างยิ่งเราได้หลีกเลี่ยงการคำนวณ และอย่างชัดเจน10adcb

รวดเร็วหรือไม่ อาจจะไม่. มีการหารจำนวนเต็มจำนวนมาก modulos และgdcs เพื่อคำนวณและเรามีลูปที่จำนวนการวนซ้ำนั้นแปรผกผันกับระยะห่างระหว่างตัวเลขที่เราเปรียบเทียบ


วิธีการช่วยเหลือ:

def lowestTerms(a,b) = {
  d = gcd(a,b)
  if d == 1
    return (a,b)
  else
    return lowestTerms(a div d, b div d)
  end
}

ฉันไม่คิดว่านี่เป็นจิตวิญญาณของคำถาม การคำนวณและในตอนเริ่มต้นนั้นใช้เวลามากพอ ๆ กับการคำนวณและในคำถามและคำถามนั้นบอกว่า "ไม่มี ... การคูณ (หรือดิวิชั่น),และ " นอกจากนี้ยังขออัลกอริธึมเชิงเส้นเวลาซึ่งฉันเดาว่านี่ไม่ใช่ตามความคิดเห็นของคุณเกี่ยวกับการวนซ้ำที่ทำงานชั่วขณะ a/bc/dadbcadcb
David Richerby

@DavidRicherby อืม ฉันคิดเกี่ยวกับล้นส่วนใหญ่ - ที่นี่การดำเนินการมีโอกาสน้อยที่จะสร้างจำนวนมาก
Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.