Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 20

Хабра, на дворе уже начинает подходить к концу 2025 год. Можно уже флаг "Это нагавнокопипастено ИИ", и за пять минусов такого типа сразу в профилактический бан на недельку?

И промт в конце статьи

Уважаемый вы так умны)) Что тут накопипастено ?? Вы значение накопипастено вообще понимаете ???? Это когда копи - с одного места и паст в другое, а это исключительно мои труды. По вашему нейросети могут генерировать такие сложный алгоритмы ?? Покажите мне хоть одну такую ИИ.
Так что еще большой вопрос кого бы из на нас в бан на недельку))

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

И кстати если это копипаст - ссылку в студию если вы не пустослов ?

Ну посмотрел Ваш профиль у вас тут репутация и вес дела - но это не как не делает вас правым в данной ситуации.
Я бы добавил кнопку ОСПОРИТЬ сюда, что бы таких как вы кто предположения свои выдает за дейсвительное и не сможет подтвердить - банить или вешать ярлык - провокатор и троль)

И еще если вы такой умный готов посоревноваться с вами на любой задаче в Алгоритмическом дуэле, можете использовать любую ИИ (Она не поможет там не чем кроме сокращения времени написаня кода) - но если вы не придумаете верный алгоритм ИИ вам не поможет)

Чувак, твоя статья, мягко выразится - какашка.

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

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

В твоей статье нет нити рассуждений. Она состоит из разрозненных копипаст промптов и ответов нейронке. Это не делает её статьёй. Это просто набор слов, который выглядит как статья.

Хорошая статья имеет определённую цель, с которой она написана и нить рассуждений, которая приводит к этой цели.

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

Твоя статья не делает что-то лучше.

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

В то же время, карма улетает в туалет, вслед за статьёй, которой в этом туалете и место.

А значение накопипащеного из нейронки я понимать не собираюсь. Это не было написано человеком. Значит, что в этом нет какой-то конкретной мысли, которую хочет донести человек. (Это кстати видно по тому, как меняется стиль оформления текста. Эта статья - просто набор копипаст с разных спросов чату ГПТ.) Это значит, что в этом нет какого-либо конкретного контекста или мысли.

Если бы ты действительно сел и разобрался в своём решении, и показал бы его плюсы и минусы, а потом описал бы его сам (а ГПТ использовал для правок ошибок и стилистики слов), то из этого что-то да вышло-бы.

Сейчас-же, это просто набор букв, на который никто не будет тратить время.

Запустил предоставленный в качестве решения код на двух кейсах ниже. Результат неверный.

  • [3,4,3,3,3,5,3,3,3]

  • [1,1,1,1,1,1,1,3,1]

Мог не заморачиваться. Даже для остальных случаев, кроме подозрительно удачно выбранных для разбора A и D, решение не дает верный результат. Ощущение, будто код не проверялся в принципе.

  • Пример B: heights = [1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]. Наш алгоритм вернул 9... Алгоритм успешно справился и с этой ситуацией.

А разве нет ? это басеин между любой 9 и 9 стеной которые стоят рядом, не может быть между левым и правым краем перегородка равная или выше самой высоты воды в басейне.
Так же и тут

  • [1,1,1,1,1,1,1,3,1]
    результат 7 обсалютно верный

    везде по 1 денницы воды - между 1 и 1 и 1 и 1 и 1 и 1 и 1 и 3

    Надеюсь доходчиво объяснил)

В условиях задачи контейнер формируется по выбранным двум сторонам и оси X — ни о каких перегородках речи не идёт. Можно не верить мне на слово, достаточно было запустить код. На leetcode не все задачи одинаково хорошо покрыты тестовыми кейсами, из-за чего я изначально ошибочно предложил, что в вашем конкретном случае неверное решение было принято. Здесь же, судя по всему, решение не было проверено даже на имеющихся кейсах.

При чем здесь штраф за удаление от боковых стенок? Нам важно, чтобы наиболее высокие находились максимально широко друг от друга, при этом если массив огромный, у нас может быть очень асимметричный бассейн, он может даже не пересекать центр. Если рассматривать массивы с огромным количеством разнообразных элементов и "высотой" больше чем от 1 до 10, то ситуаций получается намного больше и сравнивать придется случаи находящиеся на разных концах, пересекающиеся, смежные и т.п.

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

Найти две такие стенки (столбцы), которые, если между ними налить воду (по нижней границе — полу), смогут удержать наибольшее количество воды.💧 Объём воды между двумя столбцами рассчитывается так:• Высота воды ограничена меньшей из двух стенок — потому что вода не может быть выше, чем самая низкая из них (иначе вытечет).• Ширина — это расстояние между этими двумя столбцами (в индексах).объём = (индекс_правой − индекс_левой) × min(высота_левой, высота_правой)

Тот кто учил матанализ, не будет говорить про воду, стенки и т.д. Имеем на плоскости несколько точек с положительными координатами [X.Y] Найти среди них 2 такие для которых произведение ABS(X2-X1) на MIN(Y1,Y2) будет максимальным. Для SQL стандартно простая задача. Может чего-то не понимаю, притащили ведь с литкода, а там кодеры - ого-го.

А как это решить в SQL за О(N) без императивного кода?

А зачем надо решать то, чего нет в условии задачи? Может там всего тысяча-другая точек? Не вопрос, прогнал T-SQL скрипт на своем совсем не быстром компьютере (2.2 гигагерц, 10 ядер 10-летнего возраста) - чуть больше 1000 случайных пар значений - задумался на какую-то долю секунды. SQL Server Express и SQL Server Management Studio, если че, только что установил, типа поприкалываться слегка. Скриптик простецкий:

;WITH PairScores AS (
SELECT
P1.Id AS Id1, P1.X AS X1, P1.Y AS Y1,
P2.Id AS Id2, P2.X AS X2, P2.Y AS Y2,
ABS(P2.X - P1.X)
CASE WHEN P1.Y < P2.Y THEN P1.Y ELSE P2.Y END AS Score
FROM Points P1
JOIN Points P2 ON P1.Id < P2.Id -- avoid duplicates and self-pairing
)
SELECT TOP 100

FROM PairScores
ORDER BY Score DESC;

А зачем надо решать то, чего нет в условии задачи?

Алгоритмические задачи предполагают нахождение оптимального решения, а не любого, которое работает. Иначе, конечно, любой пример это "простая задача", чего тут решать. У вас, в частности, сложность O(N^2), что совсем не оптимально.

 прогнал T-SQL скрипт на своем совсем не быстром компьютере, чуть больше 1000 случайных пар значений  

Так оценку алгоритма и производительности решения никогда не делают.

Может чего-то не понимаю

Получается так.

Алгоритмические задачи предполагают нахождение оптимального решения, а не любого, которое работает. 

Это вы скажите Joe Celko’s автору "SQL Puzzles and Answers or SQL Practice Problems." и еще не одному десятку авторов соизмеримого калибра.

Задачи предполагают нахождение решения удовлегворяющего условиям задачи. И все. Это как договор, что написано - то и надо. Чего-либо иного предполагать можно, но как правило не нужно. Если оптимизация нужна, она будет прописана в условиях.

И вообще, где вы видели несколько тысяч вертикальных стенок из которых потом будут делать бассейн, с этим количеством даже мой маломощный компьютер справляется легко. Подозреваю, что MS SQL команда возможно и заложила уже какую-то оптимизацию на такого типа случай.

В формулировке текущей задачи есть слово most - то есть задача на оптимизацию. Your argument is invalid.

В формулировке текущей задачи есть слово most - то есть задача на оптимизацию. 

Формулировка задачи на русском языке приводится ниже. Там нет слова most. Как вам не стыдно, взрослый же человек. В заголовке есть - поиск максимального объема, но ни слова чтобы сделать это минимальным количеством шагов. Вот так это происходит на Хабре, вместо чтобы признать неточность пишут откровенный бред в стиле "грузите апельсины бочками" и дружно сливают карму и рейтинг. А потом все удивляются - Зимбабве посадила лунный модуль в заданной точке, а мы со стократным бюджетом только частично и не совсем в заданной точке.

💧 Условие задачи: «Аквариум» (Container With Most Water)Представим, что нам дан массив целых чисел — например:[1, 8, 6, 2, 5, 4, 8, 3, 7]Каждое число в этом массиве символизирует высоту вертикальной стенки — как будто это столбец, воткнутый вертикально в пол. Все столбцы стоят на одной горизонтальной линии, то есть на «полу» (ось x), и находятся на равном расстоянии друг от друга.📦 Теперь представим, что между этими столбиками можно налить воду — как будто мы смотрим на 2D-аквариум сбоку.🧠 Цель задачиНайти две такие стенки (столбцы), которые, если между ними налить воду (по нижней границе — полу), смогут удержать наибольшее количество воды.💧 Объём воды между двумя столбцами рассчитывается так:• Высота воды ограничена меньшей из двух стенок — потому что вода не может быть выше, чем самая низкая из них (иначе вытечет).• Ширина — это расстояние между этими двумя столбцами (в индексах).объём = (индекс_правой − индекс_левой) × min(высота_левой, высота_правой)Массив: [1, 8, 6, 2, 5, 4, 8, 3, 7]Индексы: 0 1 2 3 4 5 6 7 8Столбцы (высоты): вертикальные стенкиПол: горизонтальная база (ось x)Вода: заливается между двумя стенками и держится на уровне самой низкой из них.

Цель задачиНайти две такие стенки (столбцы), которые, если между ними налить воду (по нижней границе — полу), смогут удержать наибольшее количество воды

(emphasis mine)
И где это его нет? Как вам не стыдно, взрослый же человек. Естественно, в русском тексте нет английского слова, зато есть русское с таким же значением. Про "наименьшее количество шагов" говорится вне задачи, так как алгоритмы, которые решают такую задачу за O(n^2), слишком быстро становятся непригодными. То есть, нужно понижать сложность. Мало того, стандартный (гуглящийся) алгоритм для этой задачи имеет сложность уже O(n), её логически понизить некуда, так как массив из n элементов за меньше чем O(n) не перебрать. Алгоритм из статьи имеет сложность O(n), но кривой, то есть решает задачу неверно, ваш алгоритм с выбором на SQL имеет сложность "в лоб" O(n^2) а значит неоптимален. С этим и спорят, и вполне обоснованно.

Сама таблица с точками

CREATE TABLE Points (
Id INT IDENTITY(1,1) PRIMARY KEY,
X INT,
Y INT
);

Не совсем то что в условии, более общее, пардон.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации