fix: converted single to triple backticks (#36228)
This commit is contained in:
@@ -25,20 +25,23 @@ localeTitle: بحث ثنائي
|
||||
|
||||
بالتفصيل ، كم مرة يمكنك قسمة N على 2 حتى يكون لديك 1؟ هذا هو القول الأساسي ، قم بإجراء بحث ثنائي (نصف العناصر) حتى تجده. في صيغة هذا سيكون هذا:
|
||||
|
||||
`1 = N / 2x
|
||||
`
|
||||
```
|
||||
1 = N / 2x
|
||||
```
|
||||
|
||||
اضرب 2x:
|
||||
|
||||
`2x = N
|
||||
`
|
||||
```
|
||||
2x = N
|
||||
```
|
||||
|
||||
الآن القيام log2:
|
||||
|
||||
`log2(2x) = log2 N
|
||||
x * log2(2) = log2 N
|
||||
x * 1 = log2 N
|
||||
`
|
||||
```
|
||||
log2(2x) = log2 N
|
||||
x * log2(2) = log2 N
|
||||
x * 1 = log2 N
|
||||
```
|
||||
|
||||
هذا يعني أنه يمكنك تقسيم سجل N مرة حتى يتم تقسيم كل شيء. مما يعني أنه يجب عليك تقسيم السجل N ("القيام بعملية البحث الثنائي") حتى تعثر على العنصر الخاص بك.
|
||||
|
||||
@@ -114,44 +117,46 @@ _O_ ( _log 2 N_ ) يكون هكذا لأنه في كل خطوة نصف العن
|
||||
|
||||
في ما يلي تطبيق آخر في جافا سكريبت:
|
||||
|
||||
`function binary_search(a, v) {
|
||||
function search(low, high) {
|
||||
if (low === high) {
|
||||
return a[low] === v;
|
||||
} else {
|
||||
var mid = math_floor((low + high) / 2);
|
||||
return (v === a[mid])
|
||||
||
|
||||
(v < a[mid])
|
||||
? search(low, mid - 1)
|
||||
: search(mid + 1, high);
|
||||
}
|
||||
}
|
||||
return search(0, array_length(a) - 1);
|
||||
}
|
||||
`
|
||||
```Javascript
|
||||
function binary_search(a, v) {
|
||||
function search(low, high) {
|
||||
if (low === high) {
|
||||
return a[low] === v;
|
||||
} else {
|
||||
var mid = math_floor((low + high) / 2);
|
||||
return (v === a[mid])
|
||||
||
|
||||
(v < a[mid])
|
||||
? search(low, mid - 1)
|
||||
: search(mid + 1, high);
|
||||
}
|
||||
}
|
||||
return search(0, array_length(a) - 1);
|
||||
}
|
||||
```
|
||||
|
||||
### تطبيق روبي
|
||||
|
||||
`def binary_search(target, array)
|
||||
sorted_array = array.sort
|
||||
low = 0
|
||||
high = (sorted_array.length) - 1
|
||||
|
||||
while high >= low
|
||||
middle = (low + high) / 2
|
||||
|
||||
if target > sorted_array[middle]
|
||||
low = middle + 1
|
||||
elsif target < sorted_array[middle]
|
||||
high = middle - 1
|
||||
else
|
||||
return middle
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
`
|
||||
```ruby
|
||||
def binary_search(target, array)
|
||||
sorted_array = array.sort
|
||||
low = 0
|
||||
high = (sorted_array.length) - 1
|
||||
|
||||
while high >= low
|
||||
middle = (low + high) / 2
|
||||
|
||||
if target > sorted_array[middle]
|
||||
low = middle + 1
|
||||
elsif target < sorted_array[middle]
|
||||
high = middle - 1
|
||||
else
|
||||
return middle
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
```
|
||||
|
||||
### مثال في C
|
||||
|
||||
@@ -187,18 +192,19 @@ _O_ ( _log 2 N_ ) يكون هكذا لأنه في كل خطوة نصف العن
|
||||
|
||||
### تنفيذ بايثون
|
||||
|
||||
`def binary_search(arr, l, r, target):
|
||||
if r >= l:
|
||||
mid = l + (r - l)/2
|
||||
if arr[mid] == target:
|
||||
return mid
|
||||
elif arr[mid] > target:
|
||||
return binary_search(arr, l, mid-1, target)
|
||||
else:
|
||||
return binary_search(arr, mid+1, r, target)
|
||||
else:
|
||||
return -1
|
||||
`
|
||||
```Python
|
||||
def binary_search(arr, l, r, target):
|
||||
if r >= l:
|
||||
mid = l + (r - l)/2
|
||||
if arr[mid] == target:
|
||||
return mid
|
||||
elif arr[mid] > target:
|
||||
return binary_search(arr, l, mid-1, target)
|
||||
else:
|
||||
return binary_search(arr, mid+1, r, target)
|
||||
else:
|
||||
return -1
|
||||
```
|
||||
|
||||
### مثال في C ++
|
||||
|
||||
@@ -249,8 +255,9 @@ _O_ ( _log 2 N_ ) يكون هكذا لأنه في كل خطوة نصف العن
|
||||
|
||||
} العودة -1 ؛ }
|
||||
|
||||
`Iterative approach!
|
||||
`
|
||||
```
|
||||
Iterative approach!
|
||||
```
|
||||
|
||||
C ++ - نهج تكراري int binarySearch (int arr \[\]، int start، int int، int x) { بينما (تبدأ <= النهاية) { int mid = start + (end-start) / 2؛ إذا (arr \[mid\] == x) عودة منتصف ؛ إذا (arr \[mid\] <x) start = mid + 1؛ آخر end = mid - 1؛ } العودة -1 ؛ } \`\` \`
|
||||
|
||||
|
||||
@@ -17,71 +17,72 @@ O (سجل (N)) كثيرًا ما يتم الخلط بسبب الاسم ، ويت
|
||||
|
||||
# الشفرة
|
||||
|
||||
`// C++ program to find an element x in a
|
||||
// sorted array using Exponential search.
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int binarySearch(int arr[], int, int, int);
|
||||
|
||||
// Returns position of first ocurrence of
|
||||
// x in array
|
||||
int exponentialSearch(int arr[], int n, int x)
|
||||
{
|
||||
// If x is present at firt location itself
|
||||
if (arr[0] == x)
|
||||
return 0;
|
||||
|
||||
// Find range for binary search by
|
||||
// repeated doubling
|
||||
int i = 1;
|
||||
while (i < n && arr[i] <= x)
|
||||
i = i*2;
|
||||
|
||||
// Call binary search for the found range.
|
||||
return binarySearch(arr, i/2, min(i, n), x);
|
||||
}
|
||||
|
||||
// A recursive binary search function. It returns
|
||||
// location of x in given array arr[l..r] is
|
||||
// present, otherwise -1
|
||||
int binarySearch(int arr[], int l, int r, int x)
|
||||
{
|
||||
if (r >= l)
|
||||
{
|
||||
int mid = l + (r - l)/2;
|
||||
|
||||
// If the element is present at the middle
|
||||
// itself
|
||||
if (arr[mid] == x)
|
||||
return mid;
|
||||
|
||||
// If element is smaller than mid, then it
|
||||
// can only be present n left subarray
|
||||
if (arr[mid] > x)
|
||||
return binarySearch(arr, l, mid-1, x);
|
||||
|
||||
// Else the element can only be present
|
||||
// in right subarray
|
||||
return binarySearch(arr, mid+1, r, x);
|
||||
}
|
||||
|
||||
// We reach here when element is not present
|
||||
// in array
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int arr[] = {2, 3, 4, 10, 40};
|
||||
int n = sizeof(arr)/ sizeof(arr[0]);
|
||||
int x = 10;
|
||||
int result = exponentialSearch(arr, n, x);
|
||||
(result == -1)? printf("Element is not present in array")
|
||||
: printf("Element is present at index %d", result);
|
||||
return 0;
|
||||
}
|
||||
`
|
||||
```
|
||||
// C++ program to find an element x in a
|
||||
// sorted array using Exponential search.
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int binarySearch(int arr[], int, int, int);
|
||||
|
||||
// Returns position of first ocurrence of
|
||||
// x in array
|
||||
int exponentialSearch(int arr[], int n, int x)
|
||||
{
|
||||
// If x is present at firt location itself
|
||||
if (arr[0] == x)
|
||||
return 0;
|
||||
|
||||
// Find range for binary search by
|
||||
// repeated doubling
|
||||
int i = 1;
|
||||
while (i < n && arr[i] <= x)
|
||||
i = i*2;
|
||||
|
||||
// Call binary search for the found range.
|
||||
return binarySearch(arr, i/2, min(i, n), x);
|
||||
}
|
||||
|
||||
// A recursive binary search function. It returns
|
||||
// location of x in given array arr[l..r] is
|
||||
// present, otherwise -1
|
||||
int binarySearch(int arr[], int l, int r, int x)
|
||||
{
|
||||
if (r >= l)
|
||||
{
|
||||
int mid = l + (r - l)/2;
|
||||
|
||||
// If the element is present at the middle
|
||||
// itself
|
||||
if (arr[mid] == x)
|
||||
return mid;
|
||||
|
||||
// If element is smaller than mid, then it
|
||||
// can only be present n left subarray
|
||||
if (arr[mid] > x)
|
||||
return binarySearch(arr, l, mid-1, x);
|
||||
|
||||
// Else the element can only be present
|
||||
// in right subarray
|
||||
return binarySearch(arr, mid+1, r, x);
|
||||
}
|
||||
|
||||
// We reach here when element is not present
|
||||
// in array
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int arr[] = {2, 3, 4, 10, 40};
|
||||
int n = sizeof(arr)/ sizeof(arr[0]);
|
||||
int x = 10;
|
||||
int result = exponentialSearch(arr, n, x);
|
||||
(result == -1)? printf("Element is not present in array")
|
||||
: printf("Element is present at index %d", result);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
# معلومات اكثر
|
||||
|
||||
|
||||
@@ -57,19 +57,20 @@ localeTitle: بحث خطي
|
||||
|
||||
### مثال في روبي
|
||||
|
||||
`def linear_search(target, array)
|
||||
counter = 0
|
||||
|
||||
while counter < array.length
|
||||
if array[counter] == target
|
||||
return counter
|
||||
else
|
||||
counter += 1
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
`
|
||||
```ruby
|
||||
def linear_search(target, array)
|
||||
counter = 0
|
||||
|
||||
while counter < array.length
|
||||
if array[counter] == target
|
||||
return counter
|
||||
else
|
||||
counter += 1
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
```
|
||||
|
||||
### مثال في C ++
|
||||
|
||||
@@ -103,26 +104,27 @@ localeTitle: بحث خطي
|
||||
|
||||
يحتوي هذا الصفيف على 3 مرات من 5s ونريد إرجاع الفهارس (حيث توجد في المصفوفة) لجميعهم. وهذا ما يسمى بالبحث الخطي العالمي ، وستحتاج إلى ضبط شفرتك لإرجاع مصفوفة من نقاط الفهرسة التي يعثر فيها على عنصر الهدف. عند العثور على عنصر فهرس يطابق الهدف ، ستتم إضافة نقطة الفهرس (العداد) في مصفوفة النتائج. إذا لم يتطابق مع الرمز ، فستستمر في الانتقال إلى العنصر التالي في الصفيف بإضافة 1 إلى العداد.
|
||||
|
||||
`def global_linear_search(target, array)
|
||||
counter = 0
|
||||
results = []
|
||||
|
||||
while counter < array.length
|
||||
if array[counter] == target
|
||||
results << counter
|
||||
counter += 1
|
||||
else
|
||||
counter += 1
|
||||
end
|
||||
end
|
||||
|
||||
if results.empty?
|
||||
return nil
|
||||
else
|
||||
return results
|
||||
end
|
||||
end
|
||||
`
|
||||
```ruby
|
||||
def global_linear_search(target, array)
|
||||
counter = 0
|
||||
results = []
|
||||
|
||||
while counter < array.length
|
||||
if array[counter] == target
|
||||
results << counter
|
||||
counter += 1
|
||||
else
|
||||
counter += 1
|
||||
end
|
||||
end
|
||||
|
||||
if results.empty?
|
||||
return nil
|
||||
else
|
||||
return results
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## لماذا البحث الخطي غير فعال
|
||||
|
||||
|
||||
Reference in New Issue
Block a user