Вопросы по тегу: algorithm

(18)

Можно ли упростить (x == 0 || x == 1) в одну операцию?

Итак, я пытался записать n-е число в последовательности Фибоначчи в максимально компактной функции:public uint fibn ( uint N ) { return (N == 0 || N == 1) ? 1 : fibn(N-1) + fibn(N-2); } Но мне интересно, смогу ли я сделать это еще более компактным и эффективным, изменив (N == 0 || N == 1) в одно сравнение. Есть ли какая-то причудливая операция сдвига битов, которая может это сделать?
u

user6048670

6 лет назад

Ответов: 14

В обучающей нейронной сети появляются очень маленькие значения или значения NaN.

Я пытаюсь реализовать архитектуру нейронной сети на Haskell и использовать ее в MNIST.Я использую пакет hmatrix для линейной алгебры. Моя структура обучения построена с использованием пакета pipe.Мой код компилируется и не дает сбоев. Но проблема в том, что определенные комбинации размера слоя (скажем, 1000), размера мини-пакета и скорости обучения приводят к значениям NaN в вычислениях. После некоторого осмотра я вижу, что в активациях в конечном итоге появляются чрезвычайно маленькие значения (порядка 1e-100). Но даже когда этого не происходит, обучение все равно не работает. Нет никаких улучшений по сравнению с его потерей или точностью.Я проверил и перепроверил свой код, и я не понимаю, в чем может быть корень проблемы.Вот тренировка обратного распространения ошибки, которая вычисляет дельты для каждого слоя:backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) lf - функция потерь, n - сеть (вес матрица и смещение вектор для каждого слоя), out и tar - это фактический выход сети и target (желаемый) выход, а das - производные активации каждого уровня.В пакетном режиме out, tar - это матрицы (строки - это выходные векторы), а das - список матриц.Вот фактическое вычисление градиента: grad lf (n, (i,t)) = do -- Forward propagation: compute layers outputs and activation derivatives let (as, as') = unzip $ runLayers n i (out) = last as (ds) tr (δ <> a)) ds (i:init as) -- Gradients for weights return $ GradBatch ((recip r .*) gs, (recip r .*) squeeze ds) Здесь lf и n такие же, как указано выше, i - вход, а t - целевой выход ( как в пакетной форме, так и в виде матриц).squeeze преобразует матрицу в вектор путем суммирования по каждой строке. То есть ds - это список матриц дельт, где каждый столбец соответствует дельтам для строки мини-пакета. Таким образом, градиенты смещений - это среднее значение дельт по всем минипакетам. То же самое для gs, что соответствует градиентам для весов.Вот актуальный код обновления:move lr (n, (i,t)) (GradBatch (gs, ds)) = do -- Update function let update = (\(FC w b af) g δ -> FC (w + (lr).*g) (b + (lr).*δ) af) n' = Network.fromList $ zipWith3 update (Network.toList n) gs ds return (n', (i,t)) lr - скорость обучения.FC - конструктор слоя, а af - функция активации для этого слоя.Алгоритм градиентного спуска гарантирует передачу отрицательного значения скорости обучения. Фактический код для градиентного спуска - это просто цикл вокруг композиции grad и moveс параметризованным условием остановки.Наконец, вот код для функции потерь при среднеквадратической ошибке:mse :: (Floating a) => LossFunction a a mse = let f (y,y') = let gamma = y'-y in gamma**2 / 2 f' (y,y') = (y'-y) in Evaluator f f' Evaluator просто связывает функцию потерь и ее производную (для вычисления дельты выходного слоя).Остальной код размещен на GitHub: NeuralNetwork.Итак, если у кого-то есть понимание проблемы или хотя бы просто проверка здравомыслия, что я правильно реализую алгоритм, я был бы благодарен.
C

Charles Langlois

5 лет назад

Ответов: 1

Как проверить, состоит ли строка полностью из одной и той же подстроки?

Мне нужно создать функцию, которая принимает строку, и она должна возвращать true или false в зависимости от того, состоит ли ввод из повторяющейся последовательности символов. Длина данной строки всегда больше, чем 1, и последовательность символов должна иметь хотя бы одно повторение."aa" // true(entirely contains two strings "a") "aaa" //true(entirely contains three string "a") "abcabcabc" //true(entirely containas three strings "abc") "aba" //false(At least there should be two same substrings and nothing more) "ababa" //false("ab" exists twice but "a" is extra so false) Я создал следующую функцию: проверка работы (str) { если (! (str.length && str.length - 1)) return false; let temp = ''; for (let i = 0; i Проверка этого - часть реальной проблемы. Я не могу позволить себе такое неэффективное решение. Прежде всего, это цикл по половине строки.Вторая проблема заключается в том, что он использует replace () в каждом цикле, что замедляет его работу. Есть ли лучшее решение по производительности?
M

Maheer Ali

3 года назад

Ответов: 13

Учитывая строку из миллиона чисел, верните все повторяющиеся трехзначные числа

Несколько месяцев назад у меня было собеседование с хедж-фондом в Нью-Йорке, и, к сожалению, я не получил предложения о стажировке в качестве инженера по данным / программному обеспечению. (Они также попросили, чтобы решение было на Python.)Я сильно облажался с первой задачей собеседования ... Вопрос: Учитывая строку из миллиона чисел (например, Пи), напишите функция / программа, которая возвращает все повторяющиеся трехзначные числа и количество повторение больше 1 Например: если строка была: 123412345123456, тогда функция / программа вернет:123 - 3 times 234 - 3 times 345 - 2 times Они не дали мне решения после того, как я провалил собеседование, но они сказали мне, что временная сложность решения была постоянной 1000, поскольку все возможные результаты находятся между:000 -> 999Теперь, когда я думаю об этом, я не думаю, что возможно придумать алгоритм постоянного времени. Это?
i

its.david

4 года назад

Ответов: 13

Котлин - идиоматический способ удалить повторяющиеся строки из массива?

Как удалить дубликаты из Array в котлине?
j

jturolla

5 лет назад

Ответов: 1

Почему при вычислении середины массива предпочтительнее start + (end - start) / 2 вместо (start + end) / 2?

Я видел, как программисты использовали формулуmid = start + (end - start) / 2 вместо использования более простой формулыmid = (start + end) / 2 для поиска среднего элемента в массиве или списке.Почему они используют первый?
P

Pallavi Chauhan

5 лет назад

Ответов: 4

React Page рекомендует держать логику на высоком уровне

В последнее время я прочитал довольно много вещей, пытаясь научиться реагировать и передовым практикам, и я неоднократно сталкивался с предложениями, в которых говорилось бы «постарайтесь держать свою логику как можно выше в цепочке».Я не особо понимаю, почему это предложение . Я понимаю, что это немного упрощает код, но я не понимаю, как это обязательно будет хорошей практикой для проектов, которые становятся большими и сложными. Я также понимаю, что за реакцией стоит идеология: «dom is slow javascript is fast», и что переписывание теневого DOM и «diff'ing it» ускоряет повторный рендеринг в DOM, но это просто кажется огромной тратой вычислений. время. Когда проект становится более интерактивным и более динамичным, кажется, что он будет пересчитывать что-то, что потенциально может быть длинным списком, скажем, более 1000 элементов, и будет тратить центральный процессор вместо того, чтобы просто проверять (добавлять, перемещать, удалять и т. Д.) .), что резко сократит объем процессора.Есть ли причина, по которой Facebook использует рекомендуемый алгоритм?
A

Andrew

6 лет назад

Ответов: 1

Как представить кластеры в MATLAB?

Предположим, у меня есть следующие наборы данных:A: 1 8 9 12 2 1 0 35 7 0 0 23 B:6 3 1 9 0 7 Я хочу для каждой строки в B найти наименьшее значение и получить индекс столбца, в котором оно появляется. Например, для строки 1 из Bнаименьшее значение 3, которое берется из столбца 2. Поэтому добавьте строку 1 из A в Cluster 2.Для строки 2 из Bнаименьшее значение 1, которое берется из столбца 1. Поэтому добавьте строку 2 из A в Cluster 1. И так далее ...Теперь я хочу создать массив с именем C (это будут мои кластеры) с двумя элементами. Элемент 1 содержит матрицу всех строк из A, которые должны быть в кластере 1, а элемент 2 содержит матрицу всех строк из A, которые должны быть в кластере 2. Вот тут у меня проблемы. Это моя текущая попытка: function clusterSet = buildClusters(A, B) clusterSet = zeros(size(B, 2)); % Number of clusters = number of columns in B for i = 1:size(A, 1) [value, index] = min(B(i,:)); % Get the minimum value of B in row i, and its index (column number) clusterSet(index) = A(i,:); % Add row i from A to its corresponding cluster's matrix. end end Я получаю следующую ошибку в последней строке (примечание: это явно не относится к моим наборам данных 'A' и 'B', а говорит об общих A и B):In an assignment A(I) = B, the number of elements in B and I must be the same. If the minimum value of B in row 1 comes from column 2, then row 1 from A should be added to a matrix Cluster 2 (row of B corresponds to which row of A to add to the cluster, and the column of B represents which cluster to add it to). This is what I want that line to do but I get the above error. Есть предложения?
e

eyes enberg

6 лет назад

Ответов: 1

В чем сложность этой функции?

I'm practising in Codeacademy and I have to make the following function:Определите функцию с именем anti_vowel, которая принимает одну строку, текст, в качестве входных данных и возвращает текст с удаленными всеми гласнымиЭто мое решение.def anti_vowel(text): md = "" for ch in text: if ch not in "aeiouAEIOU": md = md + ch return md Работает хорошо, но мне интересно, в чем сложность функции.Я думаю, это O (nk), где n: = "длина текста" и k: = "длина" aeoiuAEIOU "". Я беру один элемент текста и сравниваю его с все гласные, что занимает O (k) раз. Но я повторяю это n раз, поэтому я делаю все это за O (nk). Верен ли мой анализ? Как я могу улучшить свою функцию? Может ли это быть линейным?
G

GniruT

6 лет назад

Ответов: 2

какова цель переменной i минус 1 в методе подкачки? Действительно ли - 1 необходим для честной рандомизации?

Я видел этот код в документации Oracle.В документации говорится: «Приведенный ниже метод перемешивания, в отличие от большинства наивных попыток перемешивания, справедлив (все перестановки происходят с равной вероятностью, предполагая беспристрастный источник случайности)».У меня вопрос: какова цель переменной i минус 1 в методе подкачки? Действительно ли - 1 необходим для честной рандомизации?public static void shuffle(List list, Random rnd) { for (int i = list.size(); i > 1; i--) swap(list, i - 1, rnd.nextInt(i)); }
T

Thor

6 лет назад

Ответов: 3

Сумма отдельных элементов в диапазоне

Рассмотрим массив (индекс 0), мне нужно найти сумму отдельных элементов из всех возможных диапазонов[i,n], где 0Пример:arr={1,2,1,3} sum_range[0,3]={1,2,3}=6 sum_range[1,3]={1,2,3}=6 sum_range[2,3]={1,3}=4 sum_range[3,3]={3}=3 О(n^2) решение является одним из возможных решений, и я читал, что постоянное сегментное дерево также может сделать это, хотя я не могу найти хороший учебник.Можно ли решить ее менее чем за O(N^2) времени?Если кто-то указывает на постоянное дерево сегментов, пожалуйста, объясните или дайте какую-нибудь хорошую ссылку?
n

nil96

6 лет назад

Ответов: 2

Как написать программу для получения всех методов получения 2016 года, используя числа от 9 до 1?

Вы можете добавить любой оператор (включая круглые скобки и + - * / ** ) между 9 8 7 6 5 4 3 2 1. Например, 98*76-5432*1=2016 9*8*7*(6+5-4-3)*(2-1)=2016Я написал подобную программуfrom __future__ import division s = ['+','-','*','/','','(',')'] def calc(s): a=s.split() return eval(''.join(a)) a=['','9','','8','','7','','6','','5','','4','','3','','2','','1.',''] def test(tmp): if tmp == 20: try: z = eval(''.join(a)) if z == 2016: print ''.join(a) except: pass return for i in s: #print a a[tmp] = i test(tmp+2) for j in s: a[0] = j test(2) Но это неправильно, потому что между числами может существовать несколько операторов.
J

Jason

6 лет назад

Ответов: 1

Как обновить ошибку на скрытом узле с помощью обратной пропогации, учитывая ошибку на выходных узлах и веса

Я изучаю NN, и я хочу вручную закодировать back-propogation, чтобы понять, как она работает, но у меня возникают трудности с алгоритмом. Я пытаюсь решить вопрос 30 из этой статьи (чтобы у меня был пример того, как это работает).Краткая версия вопроса: если кто-то может показать мне, как это сделать, чтобы найти ошибку для H2, я буду благодарен за это (ответ должен быть A; -0.0660).Длинная версия вопроса заключается в том, правильно ли я рассуждаю (чтобы найти ошибку с помощью обратного распространения в H2): Ошибка (из вопроса 29) для I1, I2 и I3 составляет 0,1479, -0,0929 и 0,1054, соответственно. Архитектура сети такова: Весы: Так что я подумал, что мне нужно сделать: Найдите общую сумму весов, которые привели к каждой ошибке на выходе (я взял абсолютные значения, чтобы получить общую сумму ошибок, это правильно?): E1 = 1.0 + 3.5 => 4.5 E2 = 0.5 + 1.2 => 1.7 E3 = 0,3 + 0,6 => 0,9 Затем я вычислил долю каждого веса, приходящуюся на интересующий меня узел (y2): E1 = 3,5/4,5 = 0,777 E2 = 1,2/1,7 = 0,71 E3 = 0.6/0.7 = 0.86 А затем я вычислил долю ошибки, которая возникла из-за этой доли веса: E1 => (0.14/100)*14 = 0.01078 E2 => (-0.09/100)*71 = -0.0639 E3 => (0.1054/100)*86 = 0.090644 Если кто-то может показать мне, где я ошибаюсь (потому что, как уже говорилось выше, я знаю, каким должен быть правильный ответ), я буду благодарен. Также, как упоминалось выше, я добавил ссылку на оригинальный вопрос 30 на оригинальном экзамене, если это поможет (это было 17 лет назад, не экзамен, который я делаю, просто пытаюсь понять его). Я знаю, что могу просто использовать TensorFlow/Keras для автоматической реализации этого, но я пытаюсь понять, как все это работает.
S

Slowat_Kela

год назад

Ответов: 1

обновление массива объектов с помощью useEffect в React Hooks

У меня есть следующий массив, который включает объекты, использующие React, этот массив отображает данные полей пользователей на определенной странице.Каким образом правильно обновить этот компонент с помощью useEffect, а именно массив при загрузке страницы до отрисовки данных, чтобы включить:новый элемент для вставки в массив(при загрузке страницы)userData.splice(3, 0, { key: "gender", label: "DFR", }, ); Инициальный массив const userData = [ { key: "first_name", label: "XYZ", }, { key: "last_name", label: "XYYZ", }, { key: "username", label: "ABC", }, { key: "age", label: "ABCC", }, { key: "nationality", label: "EDP", }, ]; Я попробовал следующее, но по какой-то причине это не работает: useEffect(() => { userData.splice(3, 0, { key: "gender", label: "DFR", }, ); }), []; P.S: Как вы видите, я не собираюсь использовать push.
J

John D

год назад

Ответов: 3

Напишите функцию, которая получает количество квадратов и возвращает, сколько целых чисел используется в качестве квадрата

Напишите функцию getNumberOfSquares(int n) (C) / get_number_of_squares, которая возвращает, сколько целых (начиная с 1, 2...) чисел, возведенных в степень 2 и затем сложенных, меньше некоторого числа, заданного в качестве параметра. Например, 1: Для n = 6 результат должен быть 2, потому что 1^2 + 2^2 = 1 + 4 = 5 и 5 Для приведенной выше функции я написал программу, но тестовая программа выдала ошибку, то есть при вводе getNumberOfSquares(100000) функция должна вернуть 66, но моя возвращает 403. Вот мое решение:int getNumberOfSquares(int n){ int sum=0; int limit=0; for (int i = 1; i sum; ++i) { sum += i*i; ++limit; if(sum>=n){ sum -= i*i; --limit; } } return limit; }
m

mustafalinan

год назад

Ответов: 2

10-мерное подмножество с максимальной суммой меньше K

Вопрос:Учитывая массив плавающих чисел (размер N Пример (для простоты используются инты).ВВОД:array = [1,2,3,4,5,6,7,8,9,10,11,12,13] K = 60 OUTPUT:subset = [1,2,3,4,5,6,7,8,10,13] # sum of 59 Я пробовал искать на G4G, но не нашел ничего, что учитывало бы размер подмножества M = 10. Я пытаюсь решить эту проблему с помощью Python 3, но любые ссылки или источники будут очень признательны.
A

Andrew Shi

год назад

Ответов: 1

'Суммирование простых' занимает слишком много времени

Я не знаю, почему это занимает вечность для больших чисел Я пытаюсь решить задачу 10 в Project Euler (https://projecteuler.net/problem=10). Кто-нибудь может мне помочь? Она находит первое простое число и перебирает все его факторы, затем переходит к следующему простому числу и так далее.long sum=0; int howmanyChecked = 1; int target = 1000000; int index = -1; List numbers = new List(target); List Isprime = new List(target); for(int i=2;i 0) { index = Isprime.IndexOf(true, index + 1); int Selected = numbers[index]; howmanyChecked++; sum += Selected; //Console.WriteLine($"selected prime number is {Selected}"); //int startfrom =numbers.IndexOf(Selected * Selected); if (Selected >= target / 2) { Console.WriteLine("ss"); for(int i=index+1;i
a

aaarianme

год назад

Ответов: 3

Как выбрать наилучшее совпадение строки в нескольких документах, где оценка равна для обоих документов?

Я реализовал алгоритм в Elm, где я сравниваю предложение (пользовательский ввод) с другими несколькими предложениями (данными). Алгоритм работает таким образом, что пользовательский ввод и данные преобразуются в слова, а затем я сравниваю их по словам. Алгоритм отмечает любое предложение из данных, в котором больше всего слов, чем в пользовательском вводе, как наилучшее совпадение.При первом запуске первое предложение из данных будет засчитано как лучшее совпадение, затем перейдем ко второму предложению и поищем совпадения. Если количество совпадений больше, чем предыдущее, то второе предложение будет считаться лучшим, в противном случае - предыдущее.В случае, если в двух предложениях есть одинаковые совпадения, то в данный момент я сравниваю размер этих двух предложений и выбираю то, которое имеет меньший размер, как лучшее совпадение.В данном случае нет семантического значения, поэтому является ли это лучшим способом выбора наилучшего соответствия, которое имеет меньший размер в данном случае? Или есть другие лучшие варианты? Я пытался найти какие-либо научные ссылки, но не смог найти ни одной.Редактировать:Подводя итог, если вы хотите сравнить одно предложение с двумя другими предложениями на основе встречаемости слов, если в обоих предложениях есть одинаковое количество слов, которые также есть в сравниваемом предложении, то какое из них можно отметить как наиболее похожее? какие методы используются для определения этого сходства?
H

Hefaz

год назад

Ответов: 2

2022 WebDevInsider