तुलनात्मक संख्याओं की तुलना


12

यह देखते हुए और , { 0 } ,a,b,c,dNb,d{0}

ab<cdad<cb

मेरे प्रश्न हैं:

दिए गए a,b,c,d

  1. मान लिया जाये कि हम तय कर सकते हैं में हे ( | x | + | y | ) , वहाँ तय करने का कोई तरीका है एक < गुणा (या डिवीजनों), पहिले किए बिना एक और । या कोई सबूत है कि कोई रास्ता नहीं है।x<yZO(|x|+|y|)ad<cbadcb
  2. क्या विभाजकों की तुलना में तर्कसंगत संख्याओं की तुलना करने के लिए एक तेज़ विधि है।

1
@ पीकेजी लेकिन गुणन रैखिक समय से अधिक ले जाएगा। मुझे लगता है कि हम इस प्रश्न के लिए कुछ तेज चाहते हैं।
जो

1
मुश्किल मामला है जब एक अंतराल एक और होता है, उदाहरण के लिए है [a,d][b,c]
पीकेजी

1
आप स्पष्ट रूप से मानते हैं कि और डी में एक ही संकेत है। अन्यथा, असमानता दिशा बदल जाती है। bd
रैन जी

1
(1) गुणन लगभग रैखिक (फ़्यूरर के एल्गोरिथ्म के लिए खोज) है। (2) एक "तर्कसंगत पूर्णांक", कम से कम बीजीय संख्या सिद्धांत के संदर्भ में, वास्तव में केवल एक पूर्णांक का अर्थ है। आप "तर्कसंगत" या "तर्कसंगत संख्या" कहना चाहते हैं।
युवल फिल्मस

जवाबों:


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)

O(n)

खुली समस्या ??

मैंने महसूस किया कि यह समस्या कुछ मौजूदा खुली समस्याओं की तुलना में कठिन प्रतीत होती है।

एक कमजोर समस्या यह निर्धारित करना है:

ad=?bc

और अभी तक कमजोर:

ad=?c

ad<?bcad=?bcad<?bcbc<?adadbc

ad=?c

गुणन और विभाजन की जटिलता। आइए हम बहुत ही सरल समीकरण ax = b से शुरू करते हैं। जब पूर्णांकों पर विचार किया जाता है, तो इसकी विलेयता का परीक्षण करना और शेष शून्य के साथ पूर्णांक विभाजन द्वारा एक समाधान x खोजना संभव है। किसी दिए गए समाधान x की जाँच के लिए, पूर्णांक गुणन पर्याप्त होगा, लेकिन यह एक दिलचस्प खुली समस्या है कि सत्यापन के तेज़ तरीके हैं या नहीं।

- समीकरण में अरनॉल्ड शकोनहेज कम्प्यूटेशनल जटिलता की शर्तों में सुलझाने

बहुत दिलचस्प बात है, उन्होंने मैट्रिक्स गुणा के सत्यापन के प्रश्न का भी उल्लेख किया है :

यह भी एक दिलचस्प सवाल है कि क्या मैट्रिक्स गुणन का सत्यापन, यानी, जाँच कर कि क्या AB = G दिए गए C के लिए है, संभवतः तेजी से किया जा सकता है।

- समीकरण में अरनॉल्ड शकोनहेज कम्प्यूटेशनल जटिलता की शर्तों में सुलझाने

O(n2)n×n

ad<?cd

ab=?cd

ad<?cad=?cad<?cd

सम्बंधित:

  • परिमित ऑटोमेटा द्वारा गैर-नियमित भाषाओं की अनुमानित मान्यता

    वे लगभग गुणा, और यादृच्छिक सत्यापन पर कुछ काम करते हैं, जो मुझे पूरी तरह से समझ में नहीं आता है।

  • math.SE: बिना गुणा किए दो गुणन की तुलना कैसे करें?
  • cab=c
  • क्या एक रेखीय-समय nondetermistic पूर्णांक गुणन एल्गोरिथ्म है? Http://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1be939399 देखें

    ओ (एन लॉग (एन) लॉग (लॉग (एन)) जटिलता जैसे कुछ के साथ एन-बिट संख्या को गुणा करने के लिए प्रसिद्ध एल्गोरिदम हैं। और हम O (n) से बेहतर नहीं कर सकते क्योंकि कम से कम हमें पूरे इनपुट को देखना होगा। मेरा प्रश्न है: क्या हम "nondeterministic" एल्गोरिदम के उपयुक्त वर्ग के लिए वास्तव में O (n) तक पहुँच सकते हैं?

    अधिक सटीक रूप से, एक एल्गोरिथ्म है जो दो एन-बिट बाइनरी नंबर "ए" और "बी" और 2 एन-बिट संख्या "सी" को स्वीकार कर सकता है और आपको ओ (एन) समय में बता सकता है कि क्या "ए * बी = सी"? यदि नहीं, तो क्या प्रमाण पत्र सी (ए, बी, सी) के कुछ अन्य रूप हैं जैसे कि एक एल्गोरिथ्म रैखिक समय में उत्पाद का परीक्षण करने के लिए इसका उपयोग कर सकता है? यदि रैखिक समय नहीं है, तो उत्पाद की गणना करने की तुलना में कम से कम स्पर्शोन्मुख रूप से आसान परीक्षण करने की समस्या है? इन पंक्तियों के साथ किसी भी ज्ञात परिणाम का स्वागत किया जाएगा।

    जॉन।

    -johnh4717


1

modmod 2mod 3q=k1a+k2b+k3c+k4d=kiakqO(|a|)

B:B=1ad>bca,b,c,dR4Bad=bc(a,b,c,d)q:|qa|=k1,

(इसे और अधिक सटीक कैसे बनाया जा सकता है?) घनाकार से सतह तक की दूरी सामान्य रूप से निर्बाध है, और इसलिए सतह को डिकेडर द्वारा गणना नहीं की जा सकती है


क्षमा करें, मैंने इस पर कोई प्रतिक्रिया नहीं दी। मुझे लगता है कि यह बस मेरी समझ से ऊपर हो सकता है, और मैं इस बीच खुद के संभावित जवाबों पर शोध करने में व्यस्त हूं।
रियलज स्लाव

1

अच्छा प्रश्न। क्या आप आत्मविश्वास के स्तर को स्वीकार करेंगे?

शायद अनुमानित विभाजन करते हैं। अर्थात

A / b के बाउंडिंग अनुमानित समतलों की गणना करने के लिए, दायें बदलाव को ceil (log_2 (b)) और फर्श (log_2 (b)) द्वारा भी करें। तब हम जानते हैं कि इन दोनों मूल्यों के बीच सटीक भागफल है।

फिर, चार पूर्णांकों के सापेक्ष आकार के आधार पर, कोई व्यक्ति कुछ मामलों को नियंत्रित करने में सक्षम हो सकता है, और 100% आत्मविश्वास प्राप्त कर सकता है।

मूलांक 2 के अलावा अन्य के लिए प्रक्रिया दोहरा सकते हैं, और इस तरह के संचालन के उत्तराधिकार से विश्वास का स्तर बढ़ जाता है, जब तक कि साइन / टाई-ब्रेक का परिवर्तन किसी भी तरह से नहीं देखा जाता है?

यह एक विधि का मेरा पहला मसौदा है।


O(n)O(nlogn)

ab=c

1

[महंगी] गुणाओं को पूर्वसूचक किए बिना विज्ञापन <cb तय करने का कोई तरीका है

ज़रूर।

विचार: दशमलव विस्तार की तुलना बिट द्वारा करें।

केवल बुरा सा यह है कि हमें पहले समानता को बाहर करना होगा क्योंकि अन्यथा हम समाप्त नहीं कर सकते।
पहले पूर्णांक भागों की तुलना करना उपयोगी है क्योंकि यह आसान है।

इस पर विचार करो:

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लूप को समाप्त करना है क्योंकि संख्या असमान हैं। हम नहीं जानते कि यह कब तक चलता है; यदि संख्या बहुत करीब है, तो यह थोड़ी देर हो सकती है।

10adcb

क्या यह उपवास है? शायद ऩही। बहुत सारे पूर्णांक विभाजन, मॉडुलोस और gdcएस की गणना करने के लिए हैं, और हमारे पास एक लूप है जिसकी पुनरावृत्तियों की संख्या हमारे द्वारा तुलना की गई संख्याओं के बीच की दूरी के आनुपातिक है।


सहायक विधि:

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

@ दाविदरिचरबी ह्म। मैं मुख्य रूप से ओवरफ्लो के बारे में सोच रहा था - यहां, बड़ी संख्या में संचालन की संभावना कम है।
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.