এখানে ছদ্ম-কোড যা কোনও প্রক্রিয়াগত ভাষায় রূপান্তরিত হওয়া উচিত:
array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
number = 112
print closest (number, array)
def closest (num, arr):
curr = arr[0]
foreach val in arr:
if abs (num - val) < abs (num - curr):
curr = val
return curr
এটি কেবল প্রদত্ত সংখ্যা এবং প্রতিটি অ্যারে উপাদানগুলির মধ্যে নিখুঁত পার্থক্যগুলি নিয়ে কাজ করে এবং আপনাকে সর্বনিম্ন পার্থক্য সহ একটিকে ফিরিয়ে দেয়।
উদাহরণস্বরূপ মানগুলির জন্য:
number = 112 112 112 112 112 112 112 112 112 112
array = 2 42 82 122 162 202 242 282 322 362
diff = 110 70 30 10 50 90 130 170 210 250
|
+-- one with minimal absolute difference.
ধারণার প্রমাণ হিসাবে, পাইথন কোডটি এখানে আমি এটি ব্যবহার করে দেখিয়েছিলাম:
def closest (num, arr):
curr = arr[0]
for index in range (len (arr)):
if abs (num - arr[index]) < abs (num - curr):
curr = arr[index]
return curr
array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
number = 112
print closest (number, array)
এবং, আপনার যদি জাভাস্ক্রিপ্টে সত্যিই এটির প্রয়োজন হয় তবে একটি সম্পূর্ণ এইচটিএমএল ফাইলের জন্য নীচে দেখুন যা কার্যক্রমে কার্য সম্পাদন করে:
<html>
<head></head>
<body>
<script language="javascript">
function closest (num, arr) {
var curr = arr[0];
var diff = Math.abs (num - curr);
for (var val = 0; val < arr.length; val++) {
var newdiff = Math.abs (num - arr[val]);
if (newdiff < diff) {
diff = newdiff;
curr = arr[val];
}
}
return curr;
}
array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
number = 112;
alert (closest (number, array));
</script>
</body>
</html>
এখন মনে রাখবেন উন্নত দক্ষতার সুযোগ থাকতে পারে যদি উদাহরণস্বরূপ, আপনার ডেটা আইটেমগুলি বাছাই করা হয় (এটি নমুনা ডেটা থেকে অনুমান করা যেতে পারে তবে আপনি এটি স্পষ্টভাবে বিবরণ দেন না)। উদাহরণস্বরূপ, আপনি নিকটতম আইটেমটি খুঁজতে বাইনারি অনুসন্ধান ব্যবহার করতে পারেন।
এছাড়াও আপনি মনে রাখা উচিত যে, যদি না আপনি এটা করতে প্রয়োজন অনেক প্রতি সেকেন্ডে বার দক্ষতা উন্নতি যদি না আপনার ডেটা সেট পেতে বেশিরভাগই unnoticable হতে হবে অনেক বড় করা হয়েছে।
আপনি যদি না এটা যে পথ চেষ্টা (এবং নিশ্চিত করতে পারে না অ্যারের আরোহী অনুক্রমে সাজানো হয়) চান, এই একটি ভাল শুরু হয়:
<html>
<head></head>
<body>
<script language="javascript">
function closest (num, arr) {
var mid;
var lo = 0;
var hi = arr.length - 1;
while (hi - lo > 1) {
mid = Math.floor ((lo + hi) / 2);
if (arr[mid] < num) {
lo = mid;
} else {
hi = mid;
}
}
if (num - arr[lo] <= arr[hi] - num) {
return arr[lo];
}
return arr[hi];
}
array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
number = 112;
alert (closest (number, array));
</script>
</body>
</html>
এটি মূলত প্রতিটি পুনরাবৃত্তির জন্য সমাধানের স্থানটিকে অর্ধেক করে হ্রাস করতে মধ্যম মানেরটি ব্র্যাকটিং এবং চেকিং ব্যবহার করে, একটি ক্লাসিক O(log N)
অ্যালগরিদম যেখানে উপরের ক্রমিক অনুসন্ধানটি ছিল O(N)
:
0 1 2 3 4 5 6 7 8 9 <- indexes
2 42 82 122 162 202 242 282 322 362 <- values
L M H L=0, H=9, M=4, 162 higher, H<-M
L M H L=0, H=4, M=2, 82 lower/equal, L<-M
L M H L=2, H=4, M=3, 122 higher, H<-M
L H L=2, H=3, difference of 1 so exit
^
|
H (122-112=10) is closer than L (112-82=30) so choose H
যেমনটি বলা হয়েছে, এটি ছোট ডেটাসেটের জন্য বা এমন জিনিসগুলির ক্ষেত্রে খুব বেশি পার্থক্য করা উচিত নয় যেগুলি অন্ধভাবে দ্রুত করার দরকার নেই , তবে এটি এমন একটি বিকল্প যা আপনি বিবেচনা করতে চাইতে পারেন।
x
, একের পর এক অ্যারে দিয়ে যান, অ্যারেরi
বর্তমান সংখ্যার সাথে তুলনা করুন , যদি এর মধ্যে পার্থক্য থাকে এবংi
বর্তমান মানের চেয়ে ছোট হয় তবে বর্তমান অ্যারে সংখ্যায়x
সেট করুনx
। শেষ হয়ে গেলে অ্যারের থেকে সবচেয়েx
কাছের নম্বরটি রয়েছেi
।