Показаны сообщения с ярлыком алгоритмы. Показать все сообщения
Показаны сообщения с ярлыком алгоритмы. Показать все сообщения

Как выбрать структуру данных

Если вы наперёд не знаете количество элементов, которые вы должны будете принять например, посредством ввода данных пользователем, то используйте связный список (linked list).

Если нужно обработать много элементов, среди которых некоторые важнее других то используйте очередь с приоритетом (priority queue). Например, сетевой трафик имеет разный приоритет. Некоторые данные важнее, например, голосовые коммуникации в режиме реального времени требуют более высокого уровня QoS чем резервное копирование данных в фоновом режиме. Если ваш компьютер посылает пакеты для VoIP телефоного соединения и в тоже время загружает ваши фотки с отпуска на Facebook, то вы естественно захотите чтобы в первую очередь передавался голос, потому что он более time-sensitive.

Если вам нужно брать данные с накопителя у которого медленный доступ, например стримера или диска, то нужно использовать B-tree. Древовидная иерархия позволяет хранить данные таким способом, что можно эффективно искать нужные данные загружая только необходимые для этого части дерева с накопителя в оперативную память.

SKILLS


Что такое хвостовая рекурсия?

Хвостовая рекурсия - это когда любой рекурсивный вызов является последней операцией перед возвратом из функции.

При каждом рекурсивном вызове функции создаётся новый набор её параметров и локальных переменных, который вместе с адресом возврата размещается в стеке, что ограничивает максимальную глубину рекурсии объёмом стека.

Если рекурсивный вызов является последней операцией перед выходом из вызывающей функции и результатом вызывающей функции должен стать результат, который вернёт рекурсивный вызов, сохранение контекста уже не имеет значения — ни параметры, ни локальные переменные уже использоваться не будут, а адрес возврата уже находится в стеке. Поэтому в такой ситуации вместо полноценного рекурсивного вызова функции можно просто заменить значения параметров в стеке и передать управление на точку входа. До тех пор, пока исполнение будет идти по этой рекурсивной ветви, будет, фактически, выполняться обычный цикл. Когда рекурсия завершится (то есть исполнение пройдёт по терминальной ветви и достигнет команды возврата из функции) возврат произойдёт сразу в исходную точку, откуда произошёл вызов рекурсивной функции. Таким образом, при любой глубине рекурсии стек переполнен не будет.

Напишите программу, которая решает систему линейных алгебраических уравнений методом Гаусса

Напишите программу, которая решает систему линейных алгебраических уравнений методом Гаусса.
Формат входных данных: 
В первой строке задаются два числа: количество уравнений n (n1) и количество неизвестных m (m1). Далее идут n строк, каждая из которых содержит m+1 число. Первые m чисел — это коэффициенты i-го уравнения системы, а последнее, (m+1)-е число — коэффициент bi, стоящий в правой части i-го уравнения.
Формат выходных данных:
В первой строке следует вывести слово YES, если решение существует и единственно, слово NO в случае, если решение не существует, и слово INF в случае, когда решений существует бесконечно много. Если решение существует и единственно, то во второй строке следует вывести решение системы в виде m чисел, разделенных пробелом.
Sample Input 1:
3 3
4 2 1 1
7 8 9 1
9 1 3 2
Sample Output 1:
YES
0.2608695652173913 0.04347826086956526 -0.1304347826086957

Sample Input 2:
2 3
1 3 4 4
2 1 4 5
Sample Output 2:
INF

Sample Input 3:
3 3
1 3 2 7
2 6 4 8
1 4 3 1
Sample Output 3:
NO

Как посчитать факториал на Java

public static BigInteger factorial(int value){
    if(value < 0){
        throw new IllegalArgumentException("Value must be positive");
    }

    BigInteger result = BigInteger.ONE;
    for (int i = 1; i <= value; i++) {
        result = result.multiply(BigInteger.valueOf(i));
    }

    return result;
}

http://stackoverflow.com/questions/891031/is-there-a-method-that-calculates-a-factorial-in-java

Как проверить, является ли число точной степенью двойки

Java
    Scanner in = new Scanner(System.in);
    System.out.print("Enter num: ");
    int n = in.nextInt();
 
    if((n > 0) && ((n & (n - 1)) == 0))
        System.out.println("YES");
    else
        System.out.println("NO");




C++
int isPow2(int a) { return !(a&(a-1)); }

Как работает PageRank

Примерно 95% текста в 25 млрд документов, проиндексированных Google, составлены из маленького словаря в десять тысяч слов. Это значит, что почти любой поисковый запрос выдаст миллионы документов. Таким образом, вычисление релевантности документа представляет собой нетривиальную математическую задачу.

Центральное место в системе ранжирования Google занимают алгоритмы PageRank.

Все мы знаем, что конечным результатом работы PageRank является некий показатель «важности» страницы PR, который принимает значения от PR0 до PR10 и вычисляется путем анализа входящих ссылок. Их количество и качество говорит о важности данной страницы для интернет-сообщества.

Показатель PR изменяется по логарифмической шкале, то есть значение PR5 на порядок больше, чем PR4.

Примеры работы генетического алгоритма



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

Источник: Genetic algorithm walkers