/bin/dev - IT Lounge

Полная версия: Бинарный поиск — теория и реализация на Golang
Вы просматриваете упрощённую версию нашего контента. Просмотр полной версии с полным форматированием.
Я наконец закончил первую статью из своего планируемого цикла статей для погромистов и не только. 

В ней я подробно разобрал, что такое «бинарный поиск» и как оно работает — с картинками, блок-схемами и так далее, а также написал пример его реализации на Golang.

Полностью копировать сюда всю статью не стану, но покажу пару ее частей. Например, блок-схема бинарного поиска выглядит так:


[Изображение: binary_poisk_block-scheme.png]
А его полная реализация на Go так:

Код:
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var elems, lookingFor int

    fmt.Print("Number of elements? ")
    fmt.Scan(&elems)

    var array = make([]int, elems)

    fmt.Print("Generated array: ")
    for i := 0; i < elems; i++ {
        array[i] = i
        fmt.Print(strconv.Itoa(i) + " ")
    }
    fmt.Println()

    fmt.Println("What are we looking for:")
    fmt.Scan(&lookingFor)

    var assumption, result = binarySearch(&array, lookingFor)
    if result {
        fmt.Println("Found: " + strconv.Itoa(assumption))
    } else {
        fmt.Println("Nothing found!")
    }
}

func binarySearch(array *[]int, lookingFor int) (int, bool) {
    fmt.Println("Looking for...")
    var mid, assumption int

    min := 0
    high := len(*array) - 1

    for min <= high {
        mid = (min + high) / 2
        assumption = mid
        if assumption == lookingFor {
            return assumption, true
        }
        if assumption > lookingFor {
            high = mid - 1
        } else {
            min = mid + 1
        }
    }
    return 0, false
}

В статье подробно рассмотрен принцип действия этого алгоритма и обоснована его необходимость как такового. За подробностями добро пожаловать на страничку статьи на моем блоге. Комментариям и прочему буду рад и там, и тут.
Хм, а почему бы не опубликовать весь текст на биндев и внизу указать ссылку?
Это самореклама?

Публикуйте хотя-бы до середины, чтоб интригу оставить и захотелось перейти в Ваш блог.

 обрезать на самом начале - уже не интересно, да и не уважительно к читателям. Не на "Швабре" же, да и там полные посты публикуют всегда.
(15.08.2022 19:Aug)doesm Написал: [ -> ]обрезать на самом начале - уже не интересно
Поддерживаю. В данном виде пост даже не интригует, чтобы перейти по ссылке. Это больше тянет на "список интересных статей", состоящий из одного элемента. @Zhbert, хоть бы интригу создал, что ли. ☺
(15.08.2022 19:Aug)doesnm Написал: [ -> ]Хм, а почему бы не опубликовать весь текст на биндев и внизу указать ссылку?

С точки зрения SEO один и тот же текст постить на двух площадках — очень нехорошо. Снижает рейтинг в поиске и вообще может кучку проблем создать. Поэтому полное копирование текста не вариант. Да и во второй раз мне было бы лень все заново оформлять, т.к. при копировании форматирование слетело бы стопудово.

(15.08.2022 19:Aug)mord0d Написал: [ -> ]Поддерживаю. В данном виде пост даже не интригует, чтобы перейти по ссылке. Это больше тянет на "список интересных статей", состоящий из одного элемента. @Zhbert, хоть бы интригу создал, что ли. ☺

Мы вроде в чатике пару недель назад обсуждали, что вариант с ссылкой на оригинал будет норм. 

Окей, больше не буду сюда приносить свои статьи.
Да ладно, нормально. Тем более что в статье по ссылке есть ссылка на форум.

Пусть будет.
Кстати, по поводу копирования текстов еще. На крупных площадках с модерацией, например, на «Типичном Программисте» или на зарубежном "Better Programming", есть требование уникальности текста на 80% минимум, это проверяется перед публикацией на стадии модерации. Говорю по опыту — пока на Тпрогера оформлял статью, задолбался переписывать самого себя, потому что части стать гуглились с меня на Хабре.
аа
(16.08.2022 09:Aug)Zhbert Написал: [ -> ]Мы вроде в чатике пару недель назад обсуждали, что вариант с ссылкой на оригинал будет норм. 

Окей, больше не буду сюда приносить свои статьи.
Не-не-не, ты не понял посыла. Я не предлагаю выкладывать полностью (всё же это твоя статья), но заинтересуй посетителя этого треда пройти по ссылке. Не обязательно скопировав больший кусок статьи, добавь сюда от себя что-нибудь, что даст понять что по ссылке интересно/полезно/котики. ☺
(16.08.2022 12:Aug)mord0d Написал: [ -> ]аа
(16.08.2022 09:Aug)Zhbert Написал: [ -> ]Мы вроде в чатике пару недель назад обсуждали, что вариант с ссылкой на оригинал будет норм. 

Окей, больше не буду сюда приносить свои статьи.
Не-не-не, ты не понял посыла. Я не предлагаю выкладывать полностью (всё же это твоя статья), но заинтересуй посетителя этого треда пройти по ссылке. Не обязательно скопировав больший кусок статьи, добавь сюда от себя что-нибудь, что даст понять что по ссылке интересно/полезно/котики. ☺

Так норм? Smile
(16.08.2022 14:Aug)Zhbert Написал: [ -> ]
(16.08.2022 12:Aug)mord0d Написал: [ -> ]аа
(16.08.2022 09:Aug)Zhbert Написал: [ -> ]Мы вроде в чатике пару недель назад обсуждали, что вариант с ссылкой на оригинал будет норм. 

Окей, больше не буду сюда приносить свои статьи.
Не-не-не, ты не понял посыла. Я не предлагаю выкладывать полностью (всё же это твоя статья), но заинтересуй посетителя этого треда пройти по ссылке. Не обязательно скопировав больший кусок статьи, добавь сюда от себя что-нибудь, что даст понять что по ссылке интересно/полезно/котики. ☺

Так норм? Smile

Агонь! Пошёл читать (заодно узнаю почему выбран именно Go). :3
(16.08.2022 16:Aug)mord0d Написал: [ -> ]Агонь!

Ну тогда и следующие так же принесу Smile

(16.08.2022 16:Aug)mord0d Написал: [ -> ]заодно узнаю почему выбран именно Go

Та все просто — я щас больше на нем пишу, чем на Java. А произошло это, потому что у нас все на Go, и странно было бы тащить туда и Java еще.

Но, кстати, он мне больше импонирует как-то. Хотя бы тем, что собирается в один бинарник как сишка, а не требует еще и джавамашин всяких.