কোনও তালিকা কীভাবে সাজানো হয় তা পরিমাপ করার কোনও উপায় আছে?


161

কোনও তালিকা কীভাবে সাজানো হয় তা পরিমাপ করার কোনও উপায় আছে?

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

উদাহরণ স্বরূপ,

  • যদি কোনও তালিকার আইটেমগুলি ক্রমবর্ধমান ক্রমে থাকে তবে তার হার 1.0 হবে

  • যদি তালিকাটি সাজানো বাছাই করা হয় তবে এর হার -1.0 হবে

  • তালিকাটি যদি প্রায় আরোহণের অনুসারে বাছাই করা হয় তবে এর হারটি 0.9 বা কিছু মান 1 এর কাছাকাছি হবে।

  • তালিকাটি যদি কিছুটা বাছাই না করা হয় (এলোমেলো), তবে এর হার 0 এর কাছাকাছি হবে

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



4
এই তালিকাটি সাজানোর জন্য আদর্শ অ্যালগরিদম নির্ধারণ করতে ব্যবহার করা হবে? উদাহরণস্বরূপ 0 এর নিকটবর্তী মানগুলির জন্য, কুইকসোর্টটি আদর্শ হতে পারে তবে স্কেলের উভয় প্রান্তের মানগুলি (প্রায় বাছাই করা বা প্রায় বিপরীত সাজানো), মার্জসোর্টটি আরও দ্রুত হবে, যেহেতু QC ও (O N 2)-তে রূপান্তরিত হয়।
ড্যারেল হফম্যান

8
"সর্টের অনুপাত" এর জন্য +1
0x499602D2

1
@ ফুহরম্যানেটর অ্যালগরিদমের স্টোকাস্টিক সংস্করণটিকে বাছাইয়ের সম্ভাব্যতা অনুমানের জন্য পৌঁছানোর জন্য বাছাই করতে হবে না। এটি কেবলমাত্র যদি আপনি কোনও সঠিক পরিমাপ পেতে চান যা আপনাকে কোনও সাজানোর কাজ করতে হবে।
তীমথিয় শিল্ডস

1
ব্যঙ্গাত্মক তবে মজাদার প্রথম প্রবৃত্তি: আপনি তালিকাটি সারণি করতে এবং এটি দেখতে যে কতক্ষণ সময় নেয় তা দেখতে পারা যায় এবং তারপরে এটি এখনকার সাজানো (বর্তমানে সাজানো) তালিকা এবং এর বিপরীতে তুলনামূলকভাবে তুলনা করতে পারে।
kqr

উত্তর:


142

আপনি কেবল তালিকার বিপরীতে সংখ্যা গণনা করতে পারেন।

বিপর্যয়

টাইপের উপাদানগুলির ক্রমের একটি বিপর্যয় Tহ'ল ক্রম উপাদানগুলির একটি জুড়ি যা সেগুলির সেটগুলির কিছু ক্রম অনুযায়ী ক্রম <থেকে বেরিয়ে আসে T

উইকিপিডিয়া থেকে :

আনুষ্ঠানিকভাবে, সংখ্যার A(1), A(2), ..., A(n)ক্রম হতে দিন n
যদি i < jএবং A(i) > A(j), তবে এই জুটিটিকে(i,j) একটি বিপরীতমুখী বলা হয় A

বিপর্যয় সংখ্যা একটি ক্রম তার sortedness এক সাধারণ পরিমাপ।
আনুষ্ঠানিকভাবে, বিপর্যয় সংখ্যাটি বিবর্তনের সংখ্যা হিসাবে সংজ্ঞায়িত করা হয়,

সংজ্ঞা

এই সংজ্ঞাগুলি আরও পরিষ্কার করার জন্য, উদাহরণ ক্রমটি বিবেচনা করুন 9, 5, 7, 6। এই ক্রম হয়েছে inversions (0,1), (0,2), (0,3), (2,3) এবং বিপর্যয় সংখ্যা 4

যদি আপনি 0এবং এর মধ্যে একটি মান চান তবে আপনি 1উল্টোটি নম্বরটি ভাগ করে নিতে পারেন N choose 2

তালিকাটি কীভাবে সাজানো হয়েছে তার জন্য এই স্কোরটি গণনা করতে আসলে একটি অ্যালগরিদম তৈরি করতে আপনার কাছে দুটি পন্থা রয়েছে:

পন্থা 1 (নির্ধারক)

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

আপনি যদি এই রুটটি নিয়ে যান তবে সচেতন হন যে এটি "অদলবদল" গণনার মতো সহজ নয়। Mergesort, উদাহরণস্বরূপ, সবচেয়ে খারাপ পরিস্থিতি O(N log N), তবুও যদি এটি সাজানো ক্রম অনুসারে সাজানো তালিকায় চালানো হয় তবে এটি সমস্ত N choose 2বিপর্যয় সংশোধন করবে । এটা O(N^2)সংশোধন inversions O(N log N)অপারেশন। সুতরাং কিছু ক্রিয়াকলাপ অবশ্যই একযোগে একাধিক বিপরীতকে সংশোধন করবে। আপনার প্রয়োগের ক্ষেত্রে আপনাকে যত্নবান হতে হবে। দ্রষ্টব্য: আপনি O(N log N)জটিলতার সাথে এটি করতে পারেন , এটি কেবল কৌশল।

সম্পর্কিত: একটি অনুচ্ছেদে "বিপর্যয়" সংখ্যা গণনা করা

পন্থা 2 (স্টোকাস্টিক)

  • এলোমেলোভাবে নমুনা জোড়া (i,j), যেখানেi != j
  • প্রতিটি জোড়ার জন্য, নির্ধারণ করুন list[min(i,j)] < list[max(i,j)](0 বা 1)
  • এই তুলনাগুলির গড় গণনা করুন এবং তারপরে স্বাভাবিক করুন N choose 2

আপনার ব্যক্তিগততার প্রয়োজন না থাকলে আমি ব্যক্তিগতভাবে স্টোকাস্টিক পদ্ধতির সাথে যাব - কেবলমাত্র যদি এটি প্রয়োগ করা এত সহজ।


আপনি যা চান তা যদি (সাজানো অবতরণ) থেকে (সাজানো বাছাই z') এর মধ্যে একটি মান ( ) হয় তবে আপনি কেবল এই সূত্রটি ব্যবহার করে এই সীমাটিতে (সাজানো বাছাই করা ) এবং (সাজানো অবতরণ) এর মধ্যে থাকা উপরের মানটিকে মানচিত্র করতে পারেন which :-11z01

z' = -2 * z + 1

2
এটি আমার কাছে এক ধরণের আকর্ষণীয় যে তালিকাটি বাছাই করা (সাধারণত) ও (এন * লগন), এবং কম্পিউটিং ইনভার্ভার্সের নিষ্পাপ / স্পষ্ট পদ্ধতি হ'ল (এন ^ 2)। আমি ভাবছি যদি সেখানে বিবর্তনের সংখ্যা গণনার জন্য আরও ভাল অ্যালগরিদম থাকে?
মার্ক বেসে

5
এই এসও প্রশ্নে বেশ কয়েকটি আকর্ষণীয় পন্থা রয়েছে: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 6523712/… মূলত, কতগুলি বিপর্যয় রয়েছে তা নির্ধারণ করার জন্য এগুলি অ্যারে বাছাই করার পরিমাণ।
মার্ক বেসে

4
আমি নির্লজ্জভাবে ভেবেছিলাম আপনি কেবল সংলগ্ন সংলগ্ন জোড়া গণনা করতে পারেন। তবে এটি গুরুতরভাবে গণনা করা হবে: 1 2 3 1 2 3 কেবল একটি সংলগ্ন বিপরীতমুখী রয়েছে, তবে এটি 50% আরও সঠিক পরিমাপ দ্বারা বিপরীত।
বার্মার

2
@ বারমার আমি মনে করি যে তালিকাটি 1 2 3 1 2 3 বাছাই করা বাছাই হিসাবে যোগ্য হতে হবে ;-)
স্কানলিফ

2
@ টিমোথিশিল্ডস, ভাল, না, তা নয়। তবে আমি বিন্দু বুলব না। অপ্রচলিত সংজ্ঞাটি যুক্ত করার জন্য কেবলমাত্র একটি পরামর্শ যা কম প্রতীকী ঝুঁকিতে আরও অ্যাক্সেসযোগ্য।
ক্রিস কালো

24

একটি তালিকা (বা অন্যান্য অনুক্রমিক কাঠামো) কীভাবে সাজানো হয়েছে তার traditionalতিহ্যগত পরিমাপ হ'ল বিপর্যয়ের সংখ্যা।

বিপর্যয়ের সংখ্যাটি <b&B a এর জোড় (ক, খ) স্ট্যান্ড ইনডেক্স <<। এই উদ্দেশ্যে <<আপনি আপনার নির্দিষ্ট সাজানোর জন্য যে কোনও অর্ডারিং সম্পর্ক চয়ন করেন তা প্রতিনিধিত্ব করে।

সম্পূর্ণরূপে বাছাই করা তালিকার কোনও বিপরীত নেই এবং সম্পূর্ণ বিপরীত তালিকায় সর্বাধিক সংখ্যক বিপর্যয় রয়েছে।


5
প্রযুক্তিগতভাবে, 5 4 3 2 1সম্পূর্ণরূপে বাছাই করা হয়েছে যেহেতু আদেশ নির্দিষ্ট করা হয়নি, তবে আমি
পেডেন্টিক হচ্ছি

7
@ প্যাক্সিডিয়াবল এটি এর সংজ্ঞা উপর নির্ভর করে <
মার্সিন

@paxdiablo, ভাল এক 0 নিকটতম বা inversions সংখ্যা থেকে দুরত্ব sortedness পরিমাপ করতে পারে n choose 2
Huon

17

আপনি প্রকৃত সম্পর্ক ব্যবহার করতে পারেন।

মনে করুন সাজানো তালিকার প্রতিটি আইটেমে আপনি শূন্য থেকে শুরু করে একটি পূর্ণসংখ্যার র‌্যাঙ্ক অর্পণ করেন। নোট করুন যে উপাদানের অবস্থান সূচক বনাম র‌্যাঙ্কের একটি গ্রাফ একটি সরলরেখায় বিন্দুগুলির মতো দেখাবে (অবস্থান এবং র‌্যাঙ্কের মধ্যে 1.0 এর সম্পর্ক)।

আপনি এই তথ্য সম্পর্কিত একটি পারস্পরিক সম্পর্ক গণনা করতে পারেন। বিপরীত সাজানোর জন্য আপনি -1 ইত্যাদি পাবেন।


1
আমি দুঃখিত, তবে আপনি পূর্ণসংখ্যাকে কীভাবে নির্ধারণ করেন তার মতো এটি খুব বেশি অব্যক্ত না হয়।
মার্সিন

2
পূর্ণসংখ্যাগুলি নির্ধারণ করতে আপনার বাছাই করা তালিকাটি প্রয়োজন; তারপরে এটি আইটেমের কেবল একটি গণনা।
কাজ

1
ঠিক আমি কি পরামর্শ দিতে যাচ্ছি। মূল তালিকার অবজেক্টের অবস্থান এবং সাজানো তালিকার অবস্থানের মধ্যে পারস্পরিক সম্পর্ক নির্ধারণ করুন। খারাপ খবরটি হ'ল পারস্পরিক সম্পর্কের রুটিনগুলি সম্ভবত ও (এন ^ 2) এ চলে; সুসংবাদটি হ'ল এগুলি সম্ভবত আপনার পরিবেশের জন্য রয়েছে the
পিটার ওয়েব


আমি কৌতূহলী ... এই পদ্ধতিরটি কি বিপরীত সংখ্যার গণনা মাপার সমতুল্য?
ক্লেটন স্ট্যানলি

4

দুর্দান্ত উত্তর এসেছে, এবং আমি সম্পূর্ণতার জন্য একটি গাণিতিক দিক যুক্ত করতে চাই:

  • তালিকাটি বাছাই করা হয় কী করে তা পরিমাপ করতে পারেন এটি একটি সাজানো তালিকার সাথে কতটা সম্পর্কযুক্ত। এটি করার জন্য, আপনি র‌্যাঙ্কের সম্পর্ক (সর্বাধিক পরিচিত স্পিয়ারম্যান'স ) ব্যবহার করতে পারেন যা সাধারণ পারস্পরিক সম্পর্কের তুলনায় হুবহু একই, তবে এটি তালিকাগুলির আইটেমগুলির অ্যানালগ মানগুলির পরিবর্তে তালিকার উপাদানগুলির র‌্যাঙ্কটি ব্যবহার করে।

  • অনেকগুলি এক্সটেনশান বিদ্যমান রয়েছে যেমন একটি পারস্পরিক সম্পর্কের সহগ (সঠিক সাজানোর জন্য +1, সঠিক বিপর্যের জন্য -1)

  • এটি আপনাকে এই পরিমাপের জন্য পরিসংখ্যানগত কেন্দ্রীয় সীমাবদ্ধ উপপাদির মতো পরিসংখ্যানগত বৈশিষ্ট্যগুলি রাখতে দেয় যা আপনাকে এলোমেলো তালিকার জন্য এই পরিমাপের বন্টন জানতে দেয় know


3

সংখ্যার তালিকার জন্য বিপর্যয় গণনা ছাড়াও, বাছাই করা রাজ্য থেকে বর্গফুট দূরত্ব কল্পনাযোগ্য:

#! ruby
d = -> a { a.zip( a.sort ).map { |u, v| ( u - v ) ** 2 }.reduce( :+ ) ** 0.5 }

a = 8, 7, 3, 4, 10, 9, 6, 2, 5, 1
d.( a ) #=> 15.556
d.( a.sort ) #=> 0.0
d.( a.sort.reverse ) # => 18.166 is the worrst case

আমি মনে করি এটি স্ট্যান্ডার্ড রিলেশন ফাংশনের বর্গক্ষেত্র, en.wikedia.org/wiki/Crerelation_ratio দেখুন । এবং সংখ্যাসূচক তালিকায় সমানভাবে প্রযোজ্য; যে দুটি মান তুলনা করা হয় তা হ'ল দুটি তালিকার মধ্যে বস্তুর অবস্থান।
পিটার ওয়েব

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

1

আমি "সেরা" পদ্ধতির বিষয়ে নিশ্চিত নই, তবে একটি সরলতমটি হ'ল প্রতিটি উপাদানকে তার পরের সাথে তুলনা করা, এলিমেন্ট 2> উপাদান 1 (বা আপনি যা যা পরীক্ষা করতে চান) যদি কোনও কাউন্টার বাড়িয়ে তোলেন এবং তারপরে মোট সংখ্যা দ্বারা ভাগ করুন উপাদান। এটি আপনাকে শতাংশ দিতে হবে।


1

আমি তুলনাগুলি গণনা করব এবং এটিকে তুলনার মোট সংখ্যায় ভাগ করব। এখানে একটি সাধারণ পাইথনের উদাহরণ।

my_list = [1,4,5,6,9,-1,5,3,55,11,12,13,14]

right_comparison_count = 0

for i in range(len(my_list)-1):
    if my_list[i] < my_list[i+1]: # Assume you want to it ascending order
        right_comparison_count += 1

if right_comparison_count == 0:
    result = -1
else:
    result = float(right_comparison_count) / float((len(my_list) - 1))

print result

0

কিভাবে ভালো কিছু সম্পর্কে?

#!/usr/bin/python3

def sign(x, y):
   if x < y:
      return 1
   elif x > y:
      return -1
   else:
      return 0

def mean(list_):
   return float(sum(list_)) / float(len(list_))

def main():
   list_ = [ 1, 2, 3, 4, 6, 5, 7, 8 ]
   signs = []
   # this zip is pairing up element 0, 1, then 1, 2, then 2, 3, etc...
   for elem1, elem2 in zip(list_[:-1], list_[1:]):
      signs.append(sign(elem1, elem2))

   # This should print 1 for a sorted list, -1 for a list that is in reverse order
   # and 0 for a run of the same numbers, like all 4's
   print(mean(signs))

main()

2
এটি কেবল সংলগ্ন বিপরীতে গণনা করে। অন্যান্য উত্তরগুলি লক্ষ্য করলে আপনি দেখতে পাবেন যে এটি অপর্যাপ্ত।
কনরাড রুডলফ

1
@ কনরাড রুডল্ফ: আমি মনে করি এই উত্তরটি জিজ্ঞাসা করা প্রশ্নটি সন্তুষ্ট করে। অন্যান্য উত্তরগুলি আরও বিস্তৃত হওয়ার অর্থ এই নয় যে এটি উত্তর অপর্যাপ্ত; এটি ওপি'র প্রয়োজনীয়তার উপর নির্ভর করে।
LarsH

0

আপনি আপনার তালিকা নেওয়া তাহলে সেই তালিকায় মূল্যবোধের পদমর্যাদার নিরূপণ এবং পদমর্যাদার তালিকা কল Yএবং অন্য তালিকা, Xযা থেকে পূর্ণসংখ্যার রয়েছে 1করার length(Y), আপনি গণনা করে ঠিক sortedness পরিমাপ যে আপনি খুঁজছেন পেতে পারেন পারস্পরিক সম্পর্কের সহগের ,, rদুটি তালিকার মধ্যে।

r = \frac{\sum ^n _{i=1}(X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum ^n _{i=1}(X_i - \bar{X})^2} \sqrt{\sum ^n _{i=1}(Y_i - \bar{Y})^2}} 

একটি সম্পূর্ণ সাজানো তালিকার জন্য, r = 1.0একটু উল্টা-সাজানো তালিকার জন্য, r=-1.0এবং rsortedness ডিগ্রী তারতম্য জন্য এই সীমা মধ্যে পরিবর্তিত হয়।

প্রয়োগের উপর নির্ভর করে এই পদ্ধতির সাথে একটি সম্ভাব্য সমস্যা হ'ল তালিকার প্রতিটি আইটেমের র‌্যাঙ্ক গণনা করা বাছাই করার সমতুল্য, সুতরাং এটি একটি ও (এন লগ এন) অপারেশন।


তবে এটি বক্ররেখাটিকে অগ্রাহ্য করবে না। যদি তার অ্যারে বাছাই করা হয়, তবে, বলুন, তাত্পর্যপূর্ণভাবে বৃদ্ধি পাওয়া মানগুলি থাকে তবে পারস্পরিক সম্পর্কটি ছোট হবে যেখানে তিনি চান এটি 1.0 হয়।
লি ড্যানিয়েল ক্রকার

@ লিডানিয়েল ক্রকার: হ্যাঁ, এটি একটি ভাল বিষয়। আমি মূল্যবোধের পদক্ষেপ গ্রহণ করে এর সমাধানের জন্য আমার উত্তরটি সংশোধন করেছি।
সাইমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.