{"id":119,"date":"2023-11-11T02:52:05","date_gmt":"2023-11-10T23:52:05","guid":{"rendered":"http:\/\/www.cuneytbayrak.com\/?p=119"},"modified":"2025-02-21T00:44:48","modified_gmt":"2025-02-20T21:44:48","slug":"binary-search-vs-interpolation-search","status":"publish","type":"post","link":"http:\/\/www.cuneytbayrak.com\/?p=119","title":{"rendered":"Binary Search vs Interpolation Search"},"content":{"rendered":"<p>Acaba bu iki arama algoritmas\u0131ndan hangisi daha efektif.<\/p>\n<p>Binary Search hakk\u0131nda bilgi i\u00e7in\u00a0<a href=\"http:\/\/www.cuneytbayrak.com\/?p=96\" target=\"_blank\" rel=\"noopener\">buraya<\/a>, Interpolation Search hakk\u0131nda bilgi i\u00e7in de\u00a0<a href=\"http:\/\/www.cuneytbayrak.com\/?p=114\" target=\"_blank\" rel=\"noopener\">\u015furaya<\/a>\u00a0bak\u0131n\u0131z.<\/p>\n<p><strong>Binary Search Algoritmam:<\/strong><\/p>\n<p>&nbsp;<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\"># \u0130kili Arama Algoritmas\u0131\r\nimport time\r\n\r\n# Zaman \u00f6l\u00e7\u00fcm\u00fc ba\u015flang\u0131c\u0131\r\nst = time.time()\r\n\r\n# Dizi uzunlu\u011fu ve di\u011fer de\u011fi\u015fkenler\r\nn = 1000000\r\na = [0] * n\r\nsayac = 0\r\n\r\n# Dizi olu\u015fturma\r\nfor i in range(n):\r\n    a[i] = i * i + 2 * i + 7\r\n\r\n# Aranacak de\u011fer\r\nx = 1007\r\n\r\n# \u0130kili arama ba\u015flang\u0131c\u0131\r\nilk = 0\r\nson = n - 1\r\no = (ilk + son) \/\/ 2\r\n\r\nwhile x != a[o] and son - ilk &gt; 1:\r\n    sayac += 1\r\n    if x &lt; a[o]:\r\n        son = o\r\n    else:\r\n        ilk = o\r\n    o = (ilk + son) \/\/ 2\r\n\r\n# Aranan de\u011feri kontrol etme\r\nif x == a[ilk]:\r\n    print(f\"Aranan {x} de\u011feri dizinin i\u00e7indedir, {ilk} indis de\u011ferli say\u0131ya e\u015fittir.\")\r\nelif x == a[son]:\r\n    print(f\"Aranan {x} de\u011feri dizinin i\u00e7indedir, {son} indis de\u011ferli say\u0131ya e\u015fittir.\")\r\nelif x == a[o]:\r\n    print(f\"Aranan {x} de\u011feri dizinin i\u00e7indedir, {o} indis de\u011ferli say\u0131ya e\u015fittir.\")\r\nelse:\r\n    print(\"Aranan de\u011fer dizide bulunmamaktad\u0131r.\")\r\n\r\n# Zaman \u00f6l\u00e7\u00fcm\u00fc biti\u015fi\r\net = time.time()\r\nelapsed_time = et - st\r\n\r\n# Sonu\u00e7lar\u0131n yazd\u0131r\u0131lmas\u0131\r\nprint('Execution time:', elapsed_time, 'seconds')\r\nprint(\"D\u00f6ng\u00fc say\u0131s\u0131:\", sayac)\r\n<\/pre>\n<\/div>\n<p><strong>\u0130nterpolation Search Algoritmam:<\/strong><\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\"># Interpolation Arama Algoritmas\u0131\r\nimport time\r\n\r\n# Zaman \u00f6l\u00e7\u00fcm\u00fc ba\u015flang\u0131c\u0131\r\nst = time.time()\r\n\r\n# Dizi uzunlu\u011fu ve di\u011fer de\u011fi\u015fkenler\r\nn = 1000000\r\na = [0] * n\r\nsayac = 0\r\n\r\n# Dizi olu\u015fturma\r\nfor i in range(n):\r\n    a[i] = i * i + 2 * i + 7\r\n\r\n# Aranacak de\u011fer\r\nx = 1007\r\n\r\n# Interpolation arama ba\u015flang\u0131c\u0131\r\nilk = 0\r\nson = n - 1\r\nif a[ilk] &lt;= x &lt;= a[son]:  # x'in dizide olma ihtimalini kontrol et\r\n    o = ilk + int(((x - a[ilk]) * (son - ilk)) \/ (a[son] - a[ilk]))\r\n\r\n    while x != a[o] and son &gt; ilk:\r\n        sayac += 1\r\n        if x &lt; a[o]:\r\n            son = o - 1\r\n        else:\r\n            ilk = o + 1\r\n\r\n        # Yeni o hesaplama\r\n        if a[son] != a[ilk]:  # B\u00f6lme s\u0131f\u0131r olmamal\u0131\r\n            o = ilk + int(((x - a[ilk]) * (son - ilk)) \/ (a[son] - a[ilk]))\r\n        else:\r\n            break\r\n\r\n    # Aranan de\u011ferin kontrol\u00fc\r\n    if x == a[o]:\r\n        print(f\"Aranan {x} de\u011feri dizinin i\u00e7indedir, {o} indis de\u011ferli say\u0131ya e\u015fittir.\")\r\n    else:\r\n        print(\"Aranan de\u011fer dizide bulunmamaktad\u0131r.\")\r\nelse:\r\n    print(\"Aranan de\u011fer dizide bulunmamaktad\u0131r.\")\r\n\r\n# Zaman \u00f6l\u00e7\u00fcm\u00fc biti\u015fi\r\net = time.time()\r\nelapsed_time = et - st\r\n\r\n# Sonu\u00e7lar\u0131n yazd\u0131r\u0131lmas\u0131\r\nprint('Execution time:', elapsed_time, 'seconds')\r\nprint(\"D\u00f6ng\u00fc say\u0131s\u0131:\", sayac)\r\n<\/pre>\n<\/div>\n<p><strong>Binary Search Sonucu (kuadratik a[i]=i*i+2*i+7):<\/strong><\/p>\n<p>Aranan de\u011fer dizide bulunmamaktad\u0131r.<br \/>\nExecution time: 0.29457950592041016 seconds<br \/>\nD\u00f6ng\u00fc say\u0131s\u0131: 19<\/p>\n<p><strong>Interpolation Search Sonucu (kuadratik a[i]=i*i+2*i+7):<\/strong><\/p>\n<p>Aranan de\u011fer dizide bulunmamaktad\u0131r.<br \/>\nExecution time: 0.2633037567138672 seconds<br \/>\nD\u00f6ng\u00fc say\u0131s\u0131: 32<\/p>\n<p>Sonu\u00e7lara bakacak olursak; 100.000 adet bir veri seti i\u00e7in binary search 19 defa orta de\u011fer g\u00fcncellemesi yapm\u0131\u015f (yani 19 d\u00f6ng\u00fcde bulmu\u015f) ve 0,2946 saniye i\u00e7inde \u00e7\u00f6z\u00fcme ula\u015fm\u0131\u015f. Interpolation Search ise 32 defa orta de\u011fer g\u00fcncellemesi yapm\u0131\u015f ve 0,2633 saniye i\u00e7inde \u00e7\u00f6z\u00fcme ula\u015fm\u0131\u015f. Oysa beklenen \u015fey Interpolation aramas\u0131n\u0131n daha az d\u00f6ng\u00fcde sonucu bulmas\u0131 idi. Bunun tek nedeni veri setinin (a[i]=i*i+2*i+7) kuadratik bir \u015fekilde olu\u015fturulmas\u0131. Oysa veri seti lineer bir \u015fekilde olu\u015fturulmu\u015f olsayd\u0131 Interpolation Search \u00e7ok daha h\u0131zl\u0131 sonu\u00e7 verecekti. Ancak, d\u00f6ng\u00fc say\u0131s\u0131n\u0131n artm\u0131\u015f olmas\u0131na ra\u011fmen Interpolation Search saniye olarak gene de h\u0131zl\u0131. Bunun nedeni ne olabilir? Fikirlerinizi yazarsan\u0131z sevinirim.<\/p>\n<p>\u015eimdi fonksiyonumuzu lineer hale getirip sonu\u00e7lar\u0131 yeniden test edelim.<\/p>\n<p><strong>Binary Search Sonucu (lineer a[i]=2*i+7):<\/strong><\/p>\n<p>Aranan 1007 de\u011feri dizinin i\u00e7indedir, 500 indis de\u011ferli say\u0131ya e\u015fittir.<br \/>\nExecution time: 0.1947474479675293 seconds<br \/>\nD\u00f6ng\u00fc say\u0131s\u0131: 19<\/p>\n<p><strong>Interpolation Search Sonucu (lineer a[i]=2*i+7):<\/strong><\/p>\n<p>Aranan 1007 de\u011feri dizinin i\u00e7indedir, 500 indis de\u011ferli say\u0131ya e\u015fittir.<br \/>\nExecution time: 0.1947193145751953 seconds<br \/>\nD\u00f6ng\u00fc say\u0131s\u0131: 0<\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi veri seti lineer hale gelince Interpolation Search algoritmas\u0131 tek d\u00f6ng\u00fcde sonucu buldu.<\/p>\n<p>Fakat ger\u00e7ek hayatta veri setleri lineer bir da\u011f\u0131l\u0131m g\u00f6stermez \u00e7o\u011fu defa. Buradan \u00e7\u0131kan sonu\u00e7 veri setimiz hakk\u0131nda bilgi sahibi olmak hangi arama algoritmas\u0131n\u0131 kullanmam\u0131z gerekti\u011fi konusunda bize ipu\u00e7lar\u0131 sunacakt\u0131r.<\/p>\n<p>&nbsp;<\/p>\n<p>Kolay gele&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Acaba bu iki arama algoritmas\u0131ndan hangisi daha efektif. Binary Search hakk\u0131nda bilgi i\u00e7in\u00a0buraya, Interpolation Search hakk\u0131nda bilgi i\u00e7in de\u00a0\u015furaya\u00a0bak\u0131n\u0131z. Binary Search Algoritmam: &nbsp; # \u0130kili Arama Algoritmas\u0131 import time #&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"http:\/\/www.cuneytbayrak.com\/?p=119\">Devam\u0131n\u0131 Oku<span class=\"screen-reader-text\">Binary Search vs Interpolation Search<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":1,"footnotes":""},"categories":[2],"tags":[34],"class_list":["post-119","post","type-post","status-publish","format-standard","hentry","category-algoritmalar","tag-binarysearchvsinterpolationsearch","excerpt"],"_links":{"self":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=119"}],"version-history":[{"count":4,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/119\/revisions"}],"predecessor-version":[{"id":161,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/119\/revisions\/161"}],"wp:attachment":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}