বিরতি ও জিরো সংখ্যা অনুসন্ধানের জন্য আপডেটের জন্য ডেটা স্ট্রাকচার


13

আমি একটি ডাটা স্ট্রাকচার যে একটি পূর্ণসংখ্যা টেবিল বজায় রাখা হবে খোঁজ করছি আকারের , এবং সময় নিম্নলিখিত অপারেশন যার ফলে ।n ( লগ এন )tnO(logn)

  • increase(a,b) , যা ।t[a],t[a+1],,t[b]
  • decrease(a,b) , যা হ্রাস পাবে ।t[a],t[a+1],,t[b]
  • support() , যা যেমন সূচকগুলির সংখ্যা ।টি [ i ] 0it[i]0

আপনার কাছে প্রতিশ্রুতি রয়েছে যে হ্রাসের প্রতিটি কল একই পরামিতিগুলির সাথে পূর্ববর্তী কলের সাথে মিলিত হতে পারে । আবেদন আমি মনে আছে একটি sweepline অ্যালগরিদম সময় গনা হয় ইউনিয়ন এন দেওয়া সরলরেখাগামী আয়তক্ষেত্র এলাকা।( এন লগ এন )a,bO(nlogn)

কোয়াড- আকার size , সুতরাং এটি কোনও সমাধান নয়। ফেনউইক বা ইন্টারভাল গাছগুলির সঠিক স্বাদ থাকে তবে উপরের ক্রিয়াকলাপকে সমর্থন করার জন্য কীভাবে সেগুলি প্রসারিত করা যায় তা আমি দেখছি না।Θ(n2)


ফেনউইক গাছগুলি এই প্রতিশ্রুতিটি ব্যবহার করবে না যে "হ্রাসের প্রতিটি কল একই পরামিতি a, b" এর সাথে বাড়ানোর জন্য পূর্ববর্তী কলের সাথে মিলিত হতে পারে, সুতরাং সেই প্রতিশ্রুতি ব্যবহার করে একটি সহজ সমাধান হতে পারে (তবে এটি এখনই আমার থেকে পালিয়ে যায়)।
জেরেমি

যেহেতু আপনার কাছে থাকা ইনপুট সংখ্যাটি সর্বাধিক (আপনি পুনরাবৃত্তিগুলি সনাক্ত করতে পারেন এবং ডেটা কাঠামোতে সন্নিবেশ করতে পারেন না) তাই আমরা এখনও সাধারণ পরিমাপ গাছের ডেটা কাঠামো ব্যবহার করে সম্পাদন করি। Cosy.sbg.ac.at/~ksafdar/data/courses/SeminarADS/… স্লাইড 47-52 দেখুন । ( লগ এন )n2O(logn)
চাও Xu

জেরমি এবং চাও জু। আপনার মন্তব্যের জন্য ধন্যবাদ। আমি এখন বুঝতে পারছি কীভাবে অন্তরবৃক্ষের পরিবর্তনগুলি একটি পরিবর্তিত ব্যবধানের ইউনিয়নের মোট দৈর্ঘ্য বজায় রাখতে ব্যবহার করা যেতে পারে। এটি আসলে খুব সুন্দর ডেটাস্ট্রাকচার।
ক্রিস্টোফ দার

সাধারণ ডেটা কাঠামো সমস্যার জন্য, সময়ে জন্য স্পেস যেখানে তালিকার আকারের আকার স্থানাঙ্কের সক্রিয় জোড়া। তবে আসলে এর সুইপলাইন অ্যালগরিদম for এর জন্য স্থানটি রৈখিক থাকে। সমস্যাটি এখনও চেয়ে ভাল স্থান সহ কোনও ডেটা স্ট্রাকচারের জন্য উন্মুক্ত রয়েছে , যখন । ( পি ) ( এন 2 ) পি পি ( এন ) ( পি ) পি ω ( এন )log(n2)O(log(n))O(p)O(n2)ppO(n)O(p)pω(n)
জেরেমি

2
এখানে একটি দুর্দান্ত লিঙ্ক যেখানে আপনি একই সমস্যার অন্যান্য সমাধানগুলির বিরুদ্ধে আপনার প্রয়োগগুলি পরীক্ষা করতে পারেন: spoj.com/OI/problems/NKMARS
সেগাল-হালেভি

উত্তর:


2

সেগমেন্ট ট্রি ব্যবহার করুন - এর পরিসীমাটিকে ছোট ছোট রেঞ্জগুলিতে পুনরাবৃত্ত করতে হবে । আপনার আপডেট অপারেশনের প্রতিটি অন্তর এই পুনরাবৃত্ত পার্টিশনের রেঞ্জগুলির বিভাজন করা যেতে পারে । প্রতিটি ব্যাপ্তির জন্য স্টোর:[ , ] ( লগ এন ) [ এক্স , ওয়াই ][1,n][a,b]O(logn)[x,y]

  • ব্যবধানের সংখ্যা যা বৃদ্ধি হয়েছে এবং হ্রাস হয়নি যেমন এমন একটি রেঞ্জ যেখানে বিভক্ত হয়েছে[ , ] [ এক্স , ওয়াই ] [ , ]c(x,y)[a,b][x,y][a,b]
  • বা পুনরাবৃত্তির নীচে থাকা বিরতিগুলির বিভাজনযুক্ত উপগ্রহের দ্বারা আচ্ছাদিত নয় এমন কক্ষগুলির সংখ্যা[ x , y ]u(x,y)[x,y]

তারপরে যদি পুনরাবৃত্তভাবে এবং বিভক্ত হয় তবে আমাদের কাছে যাতে আমরা প্রতিটি মান স্থির সময়ে আপডেট করতে পারি যখন অন্যান্য ডেটার জন্য একটি পরিসীমা পরিবর্তন। প্রতিটি সমর্থন ক্যোয়ারীর উত্তর দেওয়া যেতে পারে ।[x,y][x,z][z+1,w]

u(x,y)={0if c(x,y)>0u(x,z)+u(z+1,y)otherwise
u(x,y)u(1,n)

বৃদ্ধি কর্ম সঞ্চালন করার জন্য অপারেশন পার্টিশন মধ্যে রেঞ্জ, বৃদ্ধি এই রেঞ্জ প্রত্যেকের জন্য, এবং পুনঃগণনা উপরে সূত্র ব্যবহার এই প্রতিটি রেঞ্জ এবং তাদের পূর্বপুরুষদের প্রত্যেকের জন্য। হ্রাস অপারেশন একটি বৃদ্ধির পরিবর্তে হ্রাস সঙ্গে একই।[ , ] ( লগ এন ) সি ( এক্স , ওয়াই ) ইউ ( এক্স , ওয়াই )(a,b)[a,b]O(logn)c(x,y)u(x,y)


আমি মনে করি না আমি আপনার দ্বিতীয় বুলেটটি বুঝতে পেরেছি। রট লেবেলযুক্ত সাবট্রিতে , কোন কোষগুলিকে এ অন্তর্ভুক্ত বিভাজনযুক্ত উপগ্রহ দ্বারা আচ্ছাদিত করা হয় না ? পুরো পরিসরটি কভার করা হয়নি, তাই ? [ x , y ] [ x , y ] আপনি ( x , y ) = 0[x,y][x,y][x,y]u(x,y)=0
jbapple

এটি নির্ভর করে আপনি কোনটি বাড়িয়েছেন operations প্রাথমিকভাবে এগুলি সমস্ত অনাবৃত হয়, তবে আপনি যখন মধ্যে একটি ছোট ব্যবধান বৃদ্ধি করেন (বা এর মধ্যে শুরু হওয়া বা শেষ হওয়া কোনও বিরতি বা এর পার্টিশনে অন্তর্ভুক্ত থাকে )) এটি হ্রাস পায়। [x,y][ এক্স , ওয়াই ][x,y][x,y]
ডেভিড এপস্টিন

আপনি একটি উদাহরণ দিতে পারেন?
jbapple

মনে করুন আপনার ব্যবধানটি সংখ্যা [1,8]। এটি পুনরাবৃত্তভাবে [1,4], [4,8], তারপর [1,2], [3,4], [5,6] এবং [7,8] এ বিভক্ত হয়, তারপরে সমস্ত এক-উপাদান উপাদান হয় ran প্রথমদিকে, সমস্ত কিছু উন্মুক্ত, সমস্ত সি [x, y] = 0, এবং প্রতিটি পরিসরের ইউ = এর দৈর্ঘ্য। তবে তারপরে, ধরুন আপনি [2,6] অপারেশন করছেন। ও (লগ এন) সর্বাধিক পরিসীমা যেখানে [২,6] পচা যায় [২,২], [৩,৪], এবং [৫,6], সুতরাং আমরা এই তিনটির জন্য সি [এক্স, ওয়াই] সেট করে রেখেছি আমার উত্তরের সূত্র অনুসারে, এই তিনটি ব্যাপ্তির জন্য আপনি [x, y] হয়ে যান 0 টিও হন u ইউ [1,2] 1 হয়ে যায়, ইউ [1,4] এছাড়াও 1 হয়, আপনি [ 5,8] = 2, এবং আপনি [1,8] = 1 + 2 = 3
ডেভিড এপস্টিন

0

আপনি সমর্থন করতে পারে না এবং মধ্যে এবং মধ্যে সময়। হ্রাস হে ( increasedecrease(1)O(nlogn)supportO(1)মূল ধারণাটি হ'ল size গোষ্ঠীতে টেবিলটি ভাঙ্গা । তারপরে প্রতিটি সংশোধনকারী অপারেশন ( বা ) সর্বাধিক গোষ্ঠীতে পরিচালিত হয় এবং কেবলমাত্র এর পরিসীমা ( এবং , আপনার গঠনে) এর কাছাকাছি অবস্থিত নিতে সময়।Θ()সমর্থন করুনবৃদ্ধিহ্রাসহে(Θ(n)increasedecreaseএকটিω(লগএন)O(n)abω(logn)


কেন এই পদ্ধতির সীমাতে নেওয়া হবে না। q বালতিগুলিতে বালতি দেওয়ার পরিবর্তে আমরা এর পরিবর্তে এর মতো একটি গাছ তৈরি করতে পারি: 1 / \ 2 3 / \ / 5 4 5 6 7 আপডেটের মাধ্যমে আপনি নেন সমস্ত ক্রিয়াকলাপের জন্য। (লগএন)O(n)O(logn)
এস পেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.