एक टुकड़ा में एक तत्व की गिनती के लिए एक सरणी (RMQ में कमी)?


11

यह देखते हुए एक सरणी प्राकृतिक संख्याओं का कश्मीर , जहां कश्मीर एक निरंतर है, मैं में जवाब देने के लिए चाहते हे ( 1 ) फार्म के प्रश्नों: "कितनी बार करता मीटर सूचकांकों के बीच सरणी में दिखाई देते हैं मैं और जे ”?1,...,nहे(1)मैंजे

सरणी को रैखिक समय में पूर्वप्रक्रमित किया जाना चाहिए। विशेष रूप से मैं यह जानना चाहूंगा कि क्या रेंज न्यूनतम क्वेरी में कमी है।


यह उस स्थिति में RMQ के बराबर है जहां और आप एक अंतराल के भीतर लोगों की संख्या को क्वेरी करना चाहते हैं। इसलिए हम उपयोग कर सकते हैं यहएसई की सीमा के कारण मैं अपने प्रश्न का उत्तर नहीं दे सका।=1


आप अपनी समस्या के लिए (रैखिक समय में) तत्व विशिष्टता को कम कर सकते हैं। शायद एक मॉडल के बारे में बात करना क्रम में है?
आर्यभट्ट

@ आर्यभट्ट वास्तव में तत्व विशिष्टता समस्या क्या है? अब मैं इसे पढ़ रहा हूं: en.wikipedia.org/wiki/Range_Queries
andy

यह RMQ की तुलना में बहुत आसान है। संकेत: क्योंकि k एक स्थिर है, प्रीप्रोसेसिंग घुटने के लिए आनुपातिक समय बिता सकता है और यह अभी भी रैखिक समय के रूप में गिना जाता है।
त्सुयोशी इतो

@ आर्यभट्ट: जिस कमी के बारे में मुझे लगता है कि आप जिस बारे में बात कर रहे हैं वह काम नहीं करता है क्योंकि k इस समस्या में एक स्थिर है।
त्सुयोशी इतो

बस के मामले में, अगर सरणी शुरुआत में दी गई है और बाद में अपडेट नहीं की गई है, तो आरएमक्यू एक ओवरकिल है, जैसा कि मैंने अपनी पिछली टिप्पणी में सुझाव दिया था।
त्सुयोशी इतो

जवाबों:


4

0 ..0<n0 ..nहे(n)=हे(n)count[pos][elem] = occurences of 'elem' in the indices 0..posहे(n)मैं,जे

preprocessing

initialise count[pos][elem] to 0 for all elem, pos
for pos=0 to n
  for num=0 to k
      count[pos][num] = (0 if pos==0 else count[pos-1][num])
  count[pos][arr[pos]] ++

सवाल

(मानता है, मैं दोनों समावेशी सीमाएं हैं)

if i == 0
  return count[j][m]
else
  return count[j][m] - count[i-1][m]

countहे(लॉगn)हे(लॉगn)

इस जवाब के साथ किसी भी मुद्दे के लिए माफी, यह मेरी पहली है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.