জাভা সংগ্রহ ফ্রেমওয়ার্ক বাস্তবায়নের জন্য বিগ-ও সংক্ষিপ্তসার? [বন্ধ]


164

আমি শিগগিরই একটি "জাভা ক্রাশ-কোর্স" শেখাচ্ছি। যদিও এটি অনুমান করা নিরাপদ যে শ্রোতা সদস্যরা বিগ-ও স্বরলিপিটি জানবেন, তবে এটি ধরে নেওয়া নিরাপদ নয় যে তারা বিভিন্ন সংগ্রহের বাস্তবায়নে বিভিন্ন ক্রিয়াকলাপের ক্রম কী তা তারা জানবেন।

আমি নিজে একটি সংক্ষিপ্ত ম্যাট্রিক্স উত্পন্ন করতে সময় নিতে পারতাম, তবে এটি ইতিমধ্যে অন্য কোথাও সর্বজনীন ডোমেইনে উপস্থিত থাকলে আমি অবশ্যই এটি পুনরায় ব্যবহার করতে চাই (অবশ্যই যথাযথ creditণ দিয়ে,)

কারও কোন পয়েন্টার আছে?


কিছু অতি সাধারণ জাভা বিষয়বস্তু এবং বিগ-ও স্বরলিপি ব্যবহার করে তাদের অপারেশনগুলির জন্য কত ব্যয় হয়েছে সে সম্পর্কে আলোচনা করার সময় আমি এখানে একটি লিঙ্কটি দরকারী বলে মনে করেছি। অবজেক্টস.ব্লগস্পট.com
নিক

যদিও পাবলিক ডোমেইনে না থাকলেও, মরিস নাফটালিন এবং ফিলিপ ওয়েডলারের দুর্দান্ত জাভা জেনারিকস এবং সংগ্রহগুলি বিভিন্ন অধ্যায়গুলির রানার সময়ের তথ্য সংক্ষিপ্তসারগুলি বিভিন্ন সংগ্রহের ক্লাসে তালিকাভুক্ত করে।
ফ্যাবিয়ান স্টেগ

1
এই পারফরম্যান্স বেঞ্চমার্ক কি কোনও কাজে আসবে?
হুমকি

উত্তর:


149

এই ওয়েবসাইটটি বেশ ভাল তবে জাভা সম্পর্কিত নয়: http://bigocheatsheet.com/ এই লিঙ্কটি কাজ করবে না এমন ক্ষেত্রে এখানে একটি চিত্র


27
এবং এই কারণেই আমরা URL হিসাবে উত্তর হিসাবে ব্যবহার করি না। সেই দস্তাবেজ / সার্ভার, যতদূর আমি বলতে পারি, আর উপলব্ধ নেই!
জেসন মক 16

1
@ বে জে লিঙ্কগুলি আর কাজ করছে না
বিকাশ ভি

ওয়েব সংরক্ষণাগার লিঙ্কগুলিও এখন ভেঙে গেছে।
মাইকএফএয়ে

নতুন কাজের URL যুক্ত হওয়া দেখে মনে হচ্ছে। চেষ্টা করার জন্য ধন্যবাদ, এটি খুব সহায়ক।
তেজাস সি

1
@ আন্দ্রেয়াজিলিও লিংকডলিস্ট.রেমোভ (অবজেক্ট) স্থির সময়, ধরে নিচ্ছেন আপনি ইতিমধ্যে প্রতিবেশীকে জানেন know আপনি যদি প্রতিবেশীকে চিনেন না, তবে এটি সন্ধানের লিনিয়ার সময়
পল ইভান্স

217

জাভা জেনেরিকস এবং সংগ্রহ বইয়ের এই তথ্য রয়েছে (পৃষ্ঠা: 188, 211, 222, 240)।

তালিকা বাস্তবায়ন:

                      get  add  contains next remove(0) iterator.remove
ArrayList             O(1) O(1) O(n)     O(1) O(n)      O(n)
LinkedList            O(n) O(1) O(n)     O(1) O(1)      O(1)
CopyOnWrite-ArrayList O(1) O(n) O(n)     O(1) O(n)      O(n)

প্রয়োগগুলি সেট করুন:

                      add      contains next     notes
HashSet               O(1)     O(1)     O(h/n)   h is the table capacity
LinkedHashSet         O(1)     O(1)     O(1) 
CopyOnWriteArraySet   O(n)     O(n)     O(1) 
EnumSet               O(1)     O(1)     O(1) 
TreeSet               O(log n) O(log n) O(log n)
ConcurrentSkipListSet O(log n) O(log n) O(1)

মানচিত্র বাস্তবায়ন:

                      get      containsKey next     Notes
HashMap               O(1)     O(1)        O(h/n)   h is the table capacity
LinkedHashMap         O(1)     O(1)        O(1) 
IdentityHashMap       O(1)     O(1)        O(h/n)   h is the table capacity 
EnumMap               O(1)     O(1)        O(1) 
TreeMap               O(log n) O(log n)    O(log n) 
ConcurrentHashMap     O(1)     O(1)        O(h/n)   h is the table capacity 
ConcurrentSkipListMap O(log n) O(log n)    O(1)

সারি বাস্তবায়ন:

                      offer    peek poll     size
PriorityQueue         O(log n) O(1) O(log n) O(1)
ConcurrentLinkedQueue O(1)     O(1) O(1)     O(n)
ArrayBlockingQueue    O(1)     O(1) O(1)     O(1)
LinkedBlockingQueue   O(1)     O(1) O(1)     O(1)
PriorityBlockingQueue O(log n) O(1) O(log n) O(1)
DelayQueue            O(log n) O(1) O(log n) O(1)
LinkedList            O(1)     O(1) O(1)     O(1)
ArrayDeque            O(1)     O(1) O(1)     O(1)
LinkedBlockingDeque   O(1)     O(1) O(1)     O(1)

জন্য javadoc নীচে java.util প্যাকেজ কিছু ভাল লিঙ্ক উপস্থিত রয়েছে:


3
আপনি যদি চিহ্নিত করতে চান যে ক্ষেত্রে কোন পরিস্থিতিতে এই চিত্রগুলি দেখা যায়, উদাহরণস্বরূপ, অ্যারেলিস্ট থেকে মুছলে ও (এন) লাগতে পারে, যদি আপনি উপাদানটি মাঝখানে বা অ্যারের শেষে মুছেন।
পোপিয়ে

@ পোপিয়ে কি সাধারণত সবচেয়ে খারাপ পরিস্থিতি হয় না?
ইয়াসিন হাজাজ

@ পোপিয়ে উল্লেখ করেছেন, উত্তরটি কী ক্ষেত্রে হবে সে সম্পর্কে একটি পরিষ্কার বর্ণনা থাকতে হবে। সময়ের জটিলতার জন্য কেসটি হয় গড় / সবচেয়ে খারাপ। দেখে মনে হচ্ছে উত্তরটি সমস্ত ডিএসের জন্য একটি "গড়" কেসকে বোঝায়।
যশউইন মুনসাদওয়ালা

12

প্রতিটি সংগ্রহ শ্রেণীর জন্য সূর্যের জাভাদোকগুলি সাধারণত আপনাকে যা চান তা বলবে। উদাহরণস্বরূপ হ্যাশম্যাপ :

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

ট্রি ম্যাপ :

এই বাস্তবায়নটি অন্তর্ভুক্তকারীর জন্য গ্যারান্টিযুক্ত লগ (এন) সময় ব্যয় সরবরাহ করে, অপারেশনগুলি পান, পাবেন এবং রাখুন remove

ট্রিসেট :

এই প্রয়োগটি গ্যারান্টিযুক্ত লগ সরবরাহ করে (এন) মৌলিক ক্রিয়াকলাপগুলির জন্য সময় ব্যয় (যোগ করুন, সরান এবং এতে থাকে)।

(জোর আমার)


আমি হ্যাশম্যাপ অংশের সাথে একমত নই। আমি সূর্যের অবস্থান জানি, কিন্তু ... উদাহরণস্বরূপ পেতে হবেজেজ.একুইলস (কী), যা এতে থাকা সামগ্রীর আকারের ক্ষেত্রে লিনিয়ার হতে পারে। এই তুলনা করার জন্য আপনাকে সাধারণত ক্ষেত্রগুলি পড়তে হবে তা বিবেচনা করুন। ব্যতিক্রমগুলি পূর্ণসংখ্যা বা স্ট্রিংগুলি হবে (অভ্যন্তরীণ) ???
ওভারফ্লাউন

প্রথমত, যদি সেগুলি ভুল হয়ে থাকে, তবে ধ্রুবক সময়ের পারফরম্যান্সকে অস্বীকার করে এমন একটি কেস কেস তৈরি করা আপনার পক্ষে খুব কঠিন হওয়া উচিত নয়? দ্বিতীয়ত, আপনি যদি হ্যাশম্যাপের উত্স কোডটি দেখেন তবে এটি মানচিত্রের প্রতিটি কী-এর বিপরীতে () সমান কল করে না - কেবল যখন হ্যাশকোডগুলি সমান হয়।
মাদ্রি বি

5
আপনি যদি উপরের উদ্ধৃতিটি পড়ে থাকেন তবে এটি বলছে এটি ধ্রুবক সময় "ধরে নেওয়া হ্যাশ ফাংশনটি বালতিগুলির মধ্যে উপাদানগুলিকে সঠিকভাবে ছড়িয়ে দেয়"। সিএস তত্ত্ব থেকে, হ্যাশ টেবিলগুলিতে ধ্রুবক সময় কাজ করা হয় যখন হ্যাশ ফাংশনটি "ভাল" হয় (যা গড়ে হয়), তবে সবচেয়ে খারাপ ক্ষেত্রে লিনিয়ার সময় নিতে পারে।
newacct

4
@ ওভারফ্লাউন - প্রযুক্তিগতভাবে, জটিলতার দৃষ্টিভঙ্গি থেকে কতক্ষণ অবজেক্ট.এক্কালস () গ্রহণ করবে তা বিবেচনাধীন নয়, কারণ এটি সংগ্রহে আইটেমের সংখ্যার সাথে সম্পর্কিত "ধ্রুবক" অংশ মাত্র।
মাইকেরা

6

উপরের লোকটি হ্যাশম্যাপ / হ্যাশসেট বনাম ট্রিআম্যাপ / ট্রিসেটের জন্য তুলনা করেছে।

আমি অ্যারেলিস্ট বনাম লিংকডলিস্ট সম্পর্কে কথা বলব:

ArrayList:

  • হে (1) get()
  • স্বতন্ত্র হে (1) add()
  • যদি আপনি মাঝখানে একটি উপাদান usingোকান বা মুছলে ListIterator.add()বা Iterator.remove()এটি ব্যবহার করেন তবে নীচের সমস্ত উপাদানগুলি স্থানান্তর করা ও (এন) হবে

যোজিত তালিকা:

  • চালু) get()
  • হে (1) add()
  • আপনি যদি মাঝখানে একটি উপাদান ব্যবহার করে ListIterator.add()বা Iterator.remove()সরিয়ে ফেলেন বা এটি ব্যবহার করেন তবে এটি O (1) হবে

1
if you insert or delete an element in the middle using ListIterator.add() or Iterator.remove(), it will be O(1) কেন? প্রথমে আমাদের মাঝখানে উপাদান খুঁজে পাওয়া দরকার, তবে এটি ও (এন) নয় কেন?
MyTitle

@ মাইটাইটিল: এটি আবার পড়ুন। "ব্যবহার ListIterator.add()বা Iterator.remove()" আমাদের একটি পুনরাবৃত্তি রয়েছে।
newacct
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.