All streams
Search
Write a publication
Pull to refresh
178
1

Человек

Send message

Палитесь. Написали бы честно - "Кризис лишил нас работы — и мы купили Мой Склад, который зарабатывает миллиарды" - и то лучше было бы. Ну или Славе Рюмину занесите денюжку - у него такие истории лучше получаются.

А начальное значение удобно находить через рациональную аппроксимацию, например

Которая получена например аппроксимацией Паде (здесь в точке 100).

навели меня на мысль что тут явно что-то не так

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

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

Спасибо за статью! Тоже слышал эту новость, но в оригинальную статью вникать даже и не пытался, ибо не настоящий математик. А вот в вашу повникаю с большим интересом. Через пару месяцев вникания оставлю повторный комментарий, получилось обрести понимание или нет.

Давайте переформулирую: выигрыш от уменьшения количества шагов может быть нивелирован временными затратами на выполнение самого алгоритма, и по факту результат может оказаться не лучше, а хуже. Именно поэтому при оценке сложности алгоритмов множители отсутствуют.

Не, не решает. Ускорение в несколько раз достигается просто обычной программной оптимизацией. Мой личный рекорд - ускорение в 40 раз, используя ассемблер. И в целом ради ускорения в 2-3 раза я за оптимизацию не берусь.

Ну и практическую значимость имеет разложение не на два множителя, а на их произвольное количество. И сравнивать результат надо не с самым простым алгоритмом по количеству итераций, а с его реализаций в популярных мат.пакетах. Если ваш алгоритм разложит число на множители в 10 раз быстрее (по секундомеру), чем например Mathematica - вот тогда да, атмосфера в комментариях будет совсем другой.

Хорошая статья. Но вы здесь (наряду с классиками) рассматриваете идеи лишь применительно к материальному, в то время как есть же ещё социум. В котором обитают такие идеи как "релокация", "замутить стартап", "сколотить рок-группу", "доказать теорему Ферма без смс и регистрации", "выйти замуж за миллионера" и всё такое. Идеи, которым некоторые не могут противостоять и которые непосредственно управляют нашей жизнью.

Этак и вы любую программу назовёте не конечным автоматом.

Ну назовите это как "асинхронный конечный автомат", суть от этого не меняется. Состояния явно прописаны, их количество конечно, в один момент времени существует только одно детерминированное состояние.

Маленький не получится, для этого придётся какой-то игрушечный пример придумывать.

Ну вот например у меня есть объект для вывода звука одновременно на несколько устройств, и у него есть такие состояния, которые должны проходить последовательно:

STOPPED,
ENUMERATE_RUNTIME_MODULES,
INIT_DEVICES,
START_DEVICES,
WAIT_FOR_BUFFERS,
STOP_DEVICES,
FREE_DEVICES

Запросы на изменение состояния обрабатывается в начале каждого. И если запрос на остановку приходит при переходе с INIT_DEVICES на START_DEVICES - то состояния WAIT_FOR_BUFFERS и STOP_DEVICES можно пропустить и переходить сразу на FREE_DEVICES. А в состояниях STOPPED, STOP_DEVICES и FREE_DEVICES его отслеживать не имеет смысла.

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

Тут разница в том, что в одном случае нерадивый коллега дёргает стоп-кран, а в другом случае - вежливо просит машиниста поезда остановиться. А машинист поезда может его так же вежливо послать ждать следующей остановки.

А вы говорите, зачем нужно ООП. Чтобы State снаружи нельзя было изменять, вот зачем. Я конечные автоматы тоже предпочитаю делать в отдельном потоке, а управление через методы типа bool Stop() {must_stop=true;}, где must_stop - это приватный флаг и будет обработан там, где надо.

Это не лапласиан

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

Или так: "Умные учатся на своих ошибках, а дураки не учатся вообще".

Это же и главный критерий, по которой я пропускаю подобные статьи не читая (не в обиду автору). Настоящие математики называют свои работы по сути, а остальное делает уже история и признание других математиков. Например, оригинальная работа Чебышева про его знаменитые многочлены называется не "Многочлены Чебышева", а "О функциях, наименее уклоняющихся от нуля".

Спасибо, но я про это вот всё не просто читал - у меня был курс по СУБД в университете, по которому я курсовую работу писал, защищал и защитил на "отлично". И обёртку эту писал тоже сам. А там, где нужна более сложная логика в SQL - предпочитаю хранимые процедуры. Чтобы на уровне бизнес-логики всё по-прежнему помещалось в одну строчку.

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

Могу поспорить, в вашем коде-баттле примут участие ровно ноль человек. Потому что тема с графическим редактором банальная, избитая, прекрасно реализуется без ООП и ничего не доказывает.

Фишка ООП же не в мантре "наследование/инкапсуляция/полиморфизм". Фишка ООП в возможности разделять низкоуровневый код от высокоуровнего и структурировать его по логике бизнес-процессов. Например, когда мне надо работать с базой данных, я пишу

var db = new Database(connectionstring);
int count = db.Execute("select count(*) from users");

Я не выбираю драйвер ODBC, OleDb, OpenClient или ещё что-то. Мне это вообще не интересно. Объект db сам определит драйвер по строке подключения.

Я не вызывает Connect(). Объект db имеет внутреннее состояние и сам вызывает Connect() при необходимости.

Я не делаю явных преобразований типов и не уточняю их при запросе. Метод Execute() возвращает тип QueryResult, который умеет в неявное преобразование типов.

Я не отлавливаю исключения, потому что прерывать бизнес-логику в произвольном месте выполнения плохая идея. Вместо этого используются значения по умолчанию - пустая таблица например.

Если надо обрабатывать ошибку на месте - то у QueryResult есть поле Error, а у Database есть LastQuery.

Если ошибки надо логгировать - у то Database есть событие OnError, на которое можно подписаться и делать это в отдельном месте или в отдельном потоке.

А если забыл вызвать Disconnect() - ничего страшного, при финализации db сам это сделает.

Может, в этом и суть, что кому-то важнее индекс цитирования, а не качество публикации? Даже если это цитирование носит негативный оттенок, типа "вопреки статье А мы получили результаты Б, которые полностью нивелируют выводы из статьи Ц".

Information

Rating
1,748-th
Location
Россия
Works in
Registered
Activity