Анон я самоучка и никогда не углублялся джаваскрипт поэтому прошу не кидаться говном, мне очень нужен код который быстро перебрал бы числовой массив из примерно 3000 элементов и оставил там только 2 эемента самый большой и самый маленький. Сам то я могу но скорее нужен оптимальный вариант от анона. с меня как всегда
>>199164420Тогда лучший complexity, что тебе светит - O(n log n). Берешь quicksort алгоритм, сортируешь при помощи его, затем просто возвращаешь array[0], array[len(array) - 1]
>>199164010 (OP)var array = [32,16,11,23,48,41,84,51,52]; //массив с 3000 элементовvar min = null;var max = null;for(var i=0; i<array.length; i++) { if(min == null || min > array) { min = array; } if(min == null || max < array) { max = array; }}console.log(min); //11console.log(max); //84
Я жыэс знаю поверхностно читай - нихуя не знаю, но неужели там нет функций типа min(твой_массив) и max(твой_массив). И просто берешь и пишешь в новый массив значения, которые эти две функции вернут.Ну или руками что-то типа этого псевдокода:max = massive(0)min = massive(0)for number in massive {if number > max {max = number} else if number < min {min = number}}Что-то такое. Вообще это азы, так что гугли
>>199164896Дуралей, нельзя при рандомной сортировке элементов сделать это быстрее, чем за O(n) так что это 100% решается только перебором.
>>199164836Прикольно, не знал. Типа как foreach в php. я php программист, а не js вообще, хули доебалсяА что с поддержкой браузерами? Старый синтаксис то точно все поддерживают.
>>199164992> я php программистСочувствую. А я питономакака. >А что с поддержкой браузерами?https://www.google.ru/search?q=es6+browser+support
>>199164726вижу выход в хранении максимального значения в бд (обосрите если что). Т.е. при внесении новой переменной сравниваем со значением текущего максимума, если новая переменная больше - заносим.мимо гуманитарий
>>199165136Зачем ты разговариваешь с пещерным человеком? Любая нормальная бэкенд макака хотя бы реакт знает и умеет собирать проект с помощью yarn\nmp.
>>199165342let array = [32,16,11,23,48,41,84,51,52];array = [Math.max(...array), Math.min(...array)]учу экмаскрипт неделю
>>199165648https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Нахуй вы пытаетесь вкатываться, если даже не можете самостоятельно найти минимальный и максимальный элемент в массиве?
Вы ебанутые? Какая сортировка нахуй, вы один раз совершаете проход по массиву и находите минимальный/максимальный элементы, всё. Не нужно ничего сортировать, шизики.
>>199165848Тут не стоит вопрос о том, КАК его найти. Тут вопрос про то, каким образом поступать в случаях с большими массивами.
>>199164010 (OP)>нужен код который быстро перебрал былогика тут у всех вариантов одинаковая будет, сколько бы мамкины погремусты-смузиеды не выебывались друг перед другом своими дохуя декларативными конструкциями у кого короче
>>199166134Нет лучшего варианта, кроме перебора всех значений в рандомном массиве и желательно сделать все в одном цикле
>>199166134>Тут вопрос про то, каким образом поступать в случаях с большими массивами.Ни в коем случае не записывать их в оперативную память целиком. Всё.
>>199166134Проходишься по массиву. Всё равно быстрее чем за O(n) и два стейта ты это не сделаешь.Можешь проходя заодно и чистить массив, потом в конце туда 2 стейта загонишь.с
ну по идее можно метод sort использовать, а потом взять первый и последний элемент в массиве, быстрее вроде никак, один хрен надо ведь все элементы массива сравнить друг с другом - значит и число операций не сократить никак
>>199166385>МожешьНе можешь, огромные массивы поступают как поток, а не куском в память.>>199166448facepalm
>>199166448Ты дурачок, ты из O(n) и O(1) по памяти предлагаешь превратить в O (n log n) и O(n) по памяти.Убей себя.
>>199166475>Не можешь, огромные массивы поступают как поток, а не куском в память.Да хоть в реактивном флаксе через редуцирование обрабатывай из бесконечного потока.Просто 2 стейта заводишь и сравниваешь, поиск максимума минимума на лету это блять в 7м классе изучают
>>199166673Спасибо, я знаю как найти минимум и максимум. Я про то чтобы на лету чистить массив. Bigdata поступает в виде readonly stream, по очевидным причинам. Либо чанками, но это другая история.
Хули? Константа МАКС = 0Получить массивЦикл с первого до последнего(до конца потока)Если значение > МАКС то МАКС=значение, следующая итерацияиначе следующая итерацияВсе
>>199166791Объявляешь переменную. Загоняешь в нее элемент. Дальше делаешь цикл, который загоняет в переменную след элемент, если он меньше предыдущего. Таким образом в конце останется самый маленький. Аналогично с большим.
>>199167968т.е. ты не смог сделать логического заключения, что я лишь пропустил букву. Иди в макдональдс.
>>199168340Я не люблю додумывать. Можно же сразу по нормальному написать?Я сам бекенд кодер, только на php.
>>199168424> Я не люблю додумывать.> Я сам бекенд кодерудачи. Честно, без наеба. С такой позицией нужно быть либо гением, либо долбоебом.
>>199164010 (OP)var arr = [11, 23, 4324, 23,234, 2343];var min = 0;var max = 0;for(var i =0; i < arr.length; i++){if(arr > max){max = arr;} else if(arr < min){min = arr;}i--;}
>>199168424из-за таких как ты бэкендеров у нас в стране нихуя не работает, представляю, какой ты говнокод хуяришь
>>199168901Ты - хуй, что будет если в массиве все числа больше нуля? Какой у тебя будет минимум, мм, уеба?
>>199168901Это же мой псевдокод, только под жопоскрипт! А что, у вас в языке нет ничего типа "for элемент in массив" или "foreach in массив"?
>>199168901лучше так:[code]{ Len-3000; for(i=0;i<=Len;i++) arr=round(); max=min=arr[0]; for(i=1;i<=Len;i++) { max=(arr<max) ? max : arr; min=(arr)>min) ? min : arr; } print "Max: ", max, "Min: " min;}[/code]
>>199170059Так выше расписали же что говнокод.Плюс там еще индексации массива внутри цикла нет, лол.Даже примитивная система типов не пропустила бы этот баг.
>>199170059>>199170143Там еще и декремент индекса перед инкрементом, ну что за говно.Я бы послал нахуй если бы у меня на работе такое написали.
Ведь как-то раньше можно было код постить. ОП, инициализируй свои минимаксы первым элементом массива, съэкономишь много времени при отладке{ Len=3000; for(j=0;j<=Len;j++) arr=round(); max=min=arr[0]; for(i=1;i<=Len;i++) { max=(arr[j]<max) ? max : arr[j]; min=(arr[j]>min) ? min : arr[j]; } print "Max: ", max, "Min: " min;}
>>199170466Ну окей, продолжаем обсирать говнокодеров ИТТ.Нахуя тебе два вложенных цикла? Это делается в один проход.
>>199165691>а может быть погромистов тред? Кстати да, как сравнить два графа на общность среуктуры топологии, расположение элементо и длины рёбер не важны
>>199170604Первый цикл у меня просто дя заполения рандомного массива, для чистоты эксперемента. А так конечно можно одним циклом обойтись и дже без массива, лол
>>199170679>Выделить структуру из каждого графа и сравнитьНа словах я тоже Лев Толстой. Как сравнивать топологию если сами элементы не важны? Я могу сранить связи между идентичными узлами, ОК, Но если эти узлы обезличить - меняем рандомно конечные узлы местами? Как? Я не математик, обычный инженегр перешедший в биоинформатику.
>>199164010 (OP)Ребятки, учим матчасть.let arr = [35,2,65,7,8,9,12,121,33,99];let min = Math.min.apply(null, arr);let max = Math.max.apply(null, arr);console.log("Max value is:", max, "\nMin value is:", min);
>>199171029Описываешь структуру как дерево у которого нет элементов.Пишешь функцию конвертации графа в нормализованное представление этой структуры.Рекурсивно сравниваешь две структуры.Что именно вызывает трудности?
>>199171085Я тут задал массив, но в твоем варианте, ОП, ты просто вместо arr укажи переменную своего массива и будет тебе счастье.
>>199171131О, понятно в какую сторону двигаться. Просто не пользовался деревьями с момента как учил С/С++ и структуры данных.
>>199164529>>199164712>>199168901>>199170466Залупа. На плюсах в одну строку делается std::minmax. Эх, макаки.
>>199164010 (OP)спешите видеть опа долбоеба, который не учил базовые алгоритмы и структуры данных.Классика.
>>199164010 (OP)не слушай всех этих кукаретиков, вот тебе самое оптимальное решениеconst random = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;const maximum = array => {__while(true) {____const max = array[random(0, array.length - 1)];____let found = false;____for(let i = 0; i < array.length; i++) {______if(array > max) {________found = true;________break;______}____}____if(found) {______continue;____}____return max;__}};const minimum = array => {__while(true) {____const min = array[random(0, array.length - 1)];____let found = false;____for(let i = 0; i < array.length; i++) {______if(array < min) {________found = true;________break;______}____}____if(found) {______continue;____}____return min;__}};const maximumMinimum = array => [maximum(array), minimum(array)];
>>199171550>изоморфизма графов это NP>Графы G и H являются изоморфными, если путём перестановки строк и столбцов матрицы смежности графа G удается получить матрицу смежности графа H. Однако перебор всех возможных перестановок характеризуется вычислительной сложностью O ( N ! ).И что мне с этим делать?
[code] public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6}; IntSummaryStatistics intSummaryStatistics = Arrays.stream(arr).summaryStatistics(); arr = new int[]{intSummaryStatistics.getMax(), intSummaryStatistics.getMin()}; System.out.println(Arrays.toString(arr)); }[/code]Вот вам на джаве.мимо синьор 300к/нс
>>199172311@SpringBootApplicationpublic class SpringBootConsoleApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(SpringBootConsoleApplication.class, args); } @Override public void run(String... args) { int[] arr = {1, 2, 3, 4, 5, 6}; IntSummaryStatistics intSummaryStatistics = getIntSummaryStatistics(arr); arr = new int[]{intSummaryStatistics.getMax(), intSummaryStatistics.getMin()}; System.out.println(Arrays.toString(arr)); }}
>>199165541Два раза массив гоняешьconst getMinAndMax = (arr) => { arr.reduce((accumulator, currentValue) => { return [Math.min(accumulator, currentValue), Math.max(accumulator, currentValue)] }, [arr[0], arr[0]]); };
>>199172661Если массив отсортирован или представлен ввиде дерева то О(2)+Const и О(log(n)) соотвественно
>>199165270Работает для одной последовательности, да и невыгодно делать это, слишком много записи для одной хуйни
>>199164010 (OP)var arr = [...];var mix = arr[0];var max = arr[0];for (var i = arr.length; i--; ) {var value = arr;if (value < min) min = value;if (value > max) max = value;};console.log(min, max);
>>199173012>Причём тут ес6 и зачем ты повторил код выше?это ты им рассказывай. Я тот, который хранить мин и макс в бд предлагал.
>>199164010 (OP)Не прокатит, это чисто институтская задачка, без практической пользы. Ссу тебе в ебальник, сам учись, это ничего сложного.
>>199164010 (OP)Первый проход: находишь максимум и минимум.Второй проход: выкидываешь элементы кроме максимума и минимума.
>>199173266Ну наебался в >var mix = arr[0];и>var value = arr;С кем не бывает. Это ж не ебучая консоль.
>>199173346Array.prototype.max = function() { return Math.max.apply(null, this);};Array.prototype.min = function() { return Math.min.apply(null, this);};let a = [3000,0,100000,300]console.log(a.min())console.log(a.max())Вот сразу видно кто учился в русских инстиках. Все, кто пытались императивку через цикл со счетчиком нарядить в духе паскала отправляются вон из профессии. Руснявый кодер = плохой кодер.
>>199173266>>199173451А это еще и не я наебался, а двощ половину съедает. В пизду вас, без перебора тут никак.
>>199173220>без практической пользыНу почему же, я входной массив о котором ничего не знаю заранее определяю мин/макс, далее задаю разрешение и заношу весь массив в таблицу, за время N создаётся гистограма, очень полезная хуета созданная на коленке.
>>199173324для самых отмороженных повторяю, юзай мускуль. у тебя, к примеру, 60к++ значений. Найди мне мин. Перебор каждый раз делать? - это полный зашквар. Объясните, если туплю.
>>199173633в реальности ты будешь в любом интерпретируемом языке делать стандартный встроенный метод array.sort() и получать потом 1 и -1 элемент. Благо такой метод везде есть, и это всегда будет быстрее, чем писать велосипед, который будет интерпретироваться непонятно во что.
>>199173558Так ты дебил, есть math min/max, а твое питоновское говно не поддерживается половиной старых проектов, где бы хуйца пососал со своем Es6.
>>199164010 (OP)std::minmax_element(array.begin(), array.end())Как это в ваших парашах делается в душе не ебу.
>>199173556>Вот сразу видно кто учился в русских инстиках. >>199173594>Вот. Без перебора.Лул, а оно там магией по массиву перебирается, да?Пиздец вы дауны, которые не могут без готовеньких функций и jquery - типикл мереканцы, на все готовенькое.
>>199173784Про скрытые не слышали, про неявные слышали. Да и хуй на них, неявные циклы почти всегда хорошо оптимизируются при интерпретации. Мерить надо, конечно, но мой скромный опыт намекает мне, что мы тольковыиграли по времени.
>>199173907Русская инстопараша закукарекала. Зачеточку не урони. Ну не получится эта императивная хуита с нормальной скоростью работы. Тогда уж хотя бы делал бы for each массиву, но по-бабушкински через счетчики в 2к19 даже не смешно, в джаваскрипте. Приехали.
>>199173855Как с вами даунами-джуниорами тяжело. Говорю, говно твое в es6 из питоши принесли и воспользоваться ты им сможешь только в своих провальных новеньких стартапах, т.к. в 90% реальных работ es6 ты не увидишь.
>>199173986>Въебал в прототип всех массивов левой хуйни.>Советует юзать медленный фор ич для массивов.>Что-то кукарекает про код.Ты даун, смирись. В твоих курсах с тытруба, криво переведенных, преподавали по ходу такие же дауны, которым нужен красивенький код, а не рабочий.Держу пари, что у тебя нет нормальной работы.
>>199173926>тольковыиграли по временипри написании, если сделал и забыл->получил зарпалту то не спорю, если сам разрабатываешь проект то хз, лично я динозавр по нынешним меркам, начинал писать когда даже про C не очень-то и слышали, писали на всяких PL-1/2 или Алгол-Фротран в 1984
>>199174102Он даун, не обращай внимания. Если ты ему расскажешь, что его Math.max - это тот же обход for, он ахуеет.
>>199174132Ну ты реальный динозавр, дядька. Моя первая программа на QBASIC была, я себя динозавром считаю. А тут прям совсем пиздец, меня в 1984 в проекте не было. Тебе простительно, из уважения к сединам так писать.
ЛУЧШЕЕ РЕШЕНИЕ ИТТe=[-1,0,1]e=e.reduce(([a,b],c,d,e)=>[Math.max(a,c),Math.min(b,c)],[e[0],e[0]])мимо джс сеньер транспилирую код в уме
>>199174202Нет, не охуею. А вот ты охуеешь, если увидишь во что она развернется, если осилишь с отладкой разобраться. Разница в том, что math.max разверентся гарантированно одним и тем же способом, а что там стрельнет в голову сделать с циклами ведает только контекст.
>>199174383не нравится трогать стандартные прототипы, отнаследуй и сделай свой, особый уличный тип массива. Кто тебе мешает?
напоминаю, оп-говноед пришел с проблемой, которую не смог объяснить. Много нюансов в вопросе. Канеш можно min-max заюзать, но это зашквар полный. Была бы логика, был бы ответ
>>199174413Блядь щас бы отнаследовать какой нибудь хуйни куда нибудь. Нет чтоб писать нормальные чистые функции как белый человек
>>199174102В ЖС императивный код может работать дольше. Просто потому что стандартные функции ускоряют, прекомпилируя их, встраивая куски кода на C и т.д. Я не удивлюсь, если стандартные методы выполняются вообще внешней библиотекой, и реального js-кода там не интерпретируется вообще. Но это не точно, я по пайтону больше угараю.
>>199174501Так можно всё на рекурсиях и тд писать, это же тоже будет не из стандартной библиотеки код, тоже будет дольше работать. Ты имел ввиду не циклы, наверное, а что лучше пользоваться стандартными средствами.
>>199174586Хвостовая рекурсия либо оптимизируется (разворачивается в обычный цикл), либо будет дольше. Речь шла ведь о конкретном случае. Спор о чем, будет быстрее написать на циклах или позвать стандартные паттерновые методы. Для интерпретируемых языков однозначно стоит выбирать второе. А вообще, в компилируемых языках, явные циклы конечно ВСЕГДА быстрее чем любые способы их описать косвенно. Над этим и издеваюсь, что быдлятина из сей понабежала, и начала нас учить как надо, пользуясь личным опытом из другой оперы.
>>199174734>удет быстрее написать на циклах или позвать стандартные паттерновые методы.Ну да, это понятно.>быдлятина из сей понабежалаБыдлятина потому что си или потому что советует в том языке, в котором не разбирается?
D = [i for i in range(2000)]num_min, num_max = 10000, 0for i in D: if i < num_min: num_min = i elif i > num_max: num_max = iprint('min: ' + str(num_min) + '\n' + 'max: ' + str(num_max))
>>199174586Я тебе больше скажу, мы позвали именно модуль math, потому что все скриптовые языки числодробилку люто биндят с голым C и оптимизируют до предела.
>>199174825>Быдлятина потому что си или потому что советует в том языке, в котором не разбирается?Второе, конечно. Сами по себе то кому си навредили? По-моему, сишников никто не хейтит, ядро ОС пока на джаваскрипте писать не научились.
>>199174833>>199174868# Добавь свои 2к чисел списком вместо генератораD = [i for i in range(2000)]print('min:', str(min(D)) + '\n' + 'max:', str(max(D)))
>>199174927Ну мало ли, всякие неадекватные фанбои жса есть.>>199174850Ну да, это понятно, я просто думал, что жс реально как-то рекурсию быстрее, чем цикл делает, интересно стало, а оказалось, что тут не про то речь, а про использование стандартных методов.
>>199174833Найс конечно дурачки завязывающиеся на каких-то константных значениях num_min num_max инишиал стейт.А ты думал что будет когда ты подашь пустой массив? Клоун. Перебать бы тебе по голове дайв инто питон, и послать алгоритмы учить.
>>199175014Dive into python на инглише написан, а я в него не разумею пока. Только Лутца читал.Можешь указать на ошибки и подробное объяснение последствий?ну называю я переменные num_min и num_max - проблема в том что они глобальные, или как?
>>199175112Во первых, ты должен инициализировать макс и мин первым элементом массива.Заодно можешь обдумать контракт при пустом массиве, можно выкидывать исключение, или ноль и ноль. Блять ты тупой или как, мне что может веслать за тебя?
>>199175014>когда ты подашь пустой массив?Помню как первый раз охуел при дебагинге в вижуастудио загянув в неинициализованный массив, не помню голый С или С++
>>199173667Хз что за ересь ты предлагаешь, при чем тут бд вообще, или ты думашь в бд как-то по другому без индекса искаться будет?
>>199173556https://github.com/v8/v8/blob/cd81dd6d740ff82a1abbc68615e8769bd467f91e/src/js/math.js#L93Но тебе же, долбоёбу, лень читать сырцы, да?
>>199173667Ну тебе физически придется делать перебор хотя бы один раз, потом ты можешь закешировать число, и при добавлении новых значений обновлять.
>>199175188В ТЗ не было речи об обработке исключения в виде пустого массива.ТЗ:>нужен код>быстрый перебор числового массива из 3000 элементов>оставить 2 элемента: самый большой и самый маленький.Ты меня обвиняешь в тупизне, а сам предлагаешь решать левую задачу? Он тебе черным по белому написал - массив из 3000 элементов. Окей, работаем с ним. А обработку пустого массива можно прогнать через дополнительное ветвление, и все - это вообще не проблема.
>>199174299>а что там стрельнет в голову сделать с циклами ведает только контекст.Пидорах, у тебя бочок потек, ты совсем не понял со своим пидорахинским, что тебе на твоей лгбтшной курсере рассказали.
>>199164010 (OP)x = min(array) y = min(a for a in array if a != max)Я хз как это работает в джс, но в путоне это будет иметь линейную сложность. Попробуй отсортировать массив и отрезать нужные элементы.
>>199176015Не городить алгоритмов на ровном месте - признак хорошего программиста. Это улучшает понимание работы программы другими программистами или самим собой через время.Любой ЯП позволяет делать императивно, давая низкоуровневые функции в руки разрабочику, но оно там для описания бизнес-логики нужно. Реализовывать существующие функции - признак пионера.
>>199177001Ебашить в прототип всякое говно это конечно признак мастера. Я че-т не заметил, чтобы ты это говно сделал неперечислимым хотя бы. Я тебе говорю, у тебя никогда не было нормальной работы, потому что ты даже не в состоянии понять, что тебе в поверхностных видосиках лгбтшной курсеры рассказывают под криво наваленным переводом таких же зумерков.
mov rax, (1-3000)4.loop: mov ecx, dword ptr [rax + array+(30004)] cmp dword ptr [rip + array], ecx jge .skip1 mov dword ptr [rip + array], ecx.skip1: mov ecx, dword ptr [rip + array] cmp ecx, dword ptr [rax + array+(30004)] jle .skip2 mov dword ptr [rax + array+(30004)], ecx.skip2: add rax, 4 jne .loop retarray: .long 32, 35...Проверять впадлу
>>199177260Ой блядь абу иди нахуй, спасибо mov rax, (1-3000)✶4.loop: mov ecx, dword ptr [rax + array+(3000✶4)] cmp dword ptr [rip + array], ecx jge .skip1 mov dword ptr [rip + array], ecx.skip1: mov ecx, dword ptr [rip + array] cmp ecx, dword ptr [rax + array+(3000✶4)] jle .skip2 mov dword ptr [rax + array+(3000✶4)], ecx.skip2: add rax, 4 jne .loop
>>199177339Читай сайт мозилы, учебники устаревают быстрее, чем выходят в печать, а уж тем более переводятся.
Интересно, а можно запараллелить поиск max, min? Наверное если хитро бить массив на диапазоны то какой нибудь sse ебово разгонится.
>>199164529>>199164582Ебаная ты вебмакака блятьvar min = 0, max = 0;for(var i = 0; i < array.length; i++) {if(array[min] > array) min = i;if(array[max] < array) max = i;}console.log(array[min]);console.log(array[max]);
>>199182614Ебаный ты дегенерат, блять. Неужели не понятно, что надо в скобках if к array добавить i в квадратных скобочках, т.к. его макакба сожрала? JS-макаки все такие тупые или только ты?
>>199184189Хуйло, иди бенчмарк прогони, посмотри, чей код быстрее. В нормальных языках твои макакские высеры не компилировало бы
console.log([].push(arr.reduce((a, b) => Math.max(a, b))).push(arr.reduce((a, b) => Math.min(a, b))));мимовкатывальщикесли нужен массив то const res = []res.push(arr.reduce((a, b) => Math.max(a, b)));res.push(arr.reduce((a, b) => Math.min(a, b)));console.log(res);
тьфу первая строчка неверная епт, не сработаетconsole.log(arr.reduce((a, b) => Math.max(a, b)), arr.reduce((a, b) => Math.min(a, b)));
>>199184326Ору с того как долбоебы пытаются сделать свой говнокод красивше и моднее, но по факту превращают его в нечитабельное дерьмище, к тому же еще и логика за этим дерьмищем неоптимальная.
>>199184410Напиши оптимальней этого >>199181047Там можно разве что for на do-while поменять (т.к. у вас, макак, нету do-until)
За 300 постов в треде только один >>199181047 адекватный ответ, и тот с некоторыми ошибками. Зато у всех зп 300к хули
блин нафиг мне редьюс>>199184363могу вообще в лог н проходов ептconst res = [];arr.sort((a, b) => a-b);res.push(arr[0]);res.push(arr[arr.length - 1]);console.log(res);
>>199184457Я про подобный вариант и писал. Единственное, что у тебя можно исправить - на es6 перевести, все-таки var и доисторический for это уже перебор.>>199184520Какая же макака господе, ты еще хуже сделал, лол
>>199184466Благодарю. Ошибки по вине шакабы, т.к. она кушает i в квадратных скобках (можешь сам попробовать написать).Если что, я к фронтэнду отношения не имею, т.к. я Pure C/C# программист, который дико дрочит на алгоритмы. JS знаю на базовом уровне, т.к. часто приходится высеры на ноде/чистом JS разбирать
>>199184557я знаю что это медленнее чем в два проходана практике я бы сделал так >>199184533>>199184410почитаемей того кторый в один проходвсе сразу ясно что он делает
>>199184617>я знаю что это медленнее чем в два прохода>на практике я бы сделал такПопробуй включить мозги и подумать, что кроется за магическими конструкциями Math.min, Math.maxнахуй я пытаюсь сделать из макаки человека, я съебываю, арибидерчи
>>199184557>Единственное, что у тебя можно исправить - на es6 перевести>1. let, const и блочная область видимости>Ключевое слово let позволяет объявлять переменные с ограниченной областью видимости — только для блока {...}, в котором происходит объявление. Это называется блочной областью видимости. Блять, жаваскриптеры догадались до идеи локальных переменных реализованной в 1972 году Ричи в Си?
>>199184728>можно сделать один если критично, обычно нетА потом сайты по 5-10 секунд прогружаются, занимая 100% процессорного времени из-за высеров подобных тебе макак. Просто выпились нахуй, макака ебучая. Лень ему 2 строчки дописать, блять
>>199184765Лол, var в JS это не локальная переменная? А, теперь ясно, почему сайт с функционалом уровня веб 1.0, но зато плавненькими говноанимациями и выскакивающими JS-формочками на популярных фреймворках по 40-50 мегабайт оперативы занимает
>>199184765Да, потихоньку js становится похож на язык для людей.Я вообще с# разработчик, но иногда имею дело с js, в том числе для личных небольших проектов, где нужно по-быстрому организовать ui без мозгоебли.>>199184848Не стоит недооценивать важность констант, особенно когда речь идет об огромных объемах данных.
>>199184848Сложность моего алгоритма - O(n), твоего O(2n).Алсо, макака: время, затраченное на выполнение алгоритма, зависит не от его сложности
>>199184942>зависит не от его сложностискажем так не только от его сложности но и от реализации и типа данных с которыми приходится работать - одно дело обсчитывать побитовые пиксели, другое какие-нибудь сложные структуры типа несортированных списков или вообще линейных массивов
>>199184872у нее функциональный скоуп т.е. в случае с циклом она может за него выскочить, а из функции вар не выскочит
>>199184876>где нужно по-быстрому организовать ui без мозгоеблиWPF чем не нравится? Или не на мокропиське сидишь/кроссплатформеность нужна? А для себя я вообще всегда пишу консолечку вместо GUI, т.к. в C# там можно такое творить, что для разработки GUI потребуется раза в 3 больше времени. Алсо, как вариант писать страницу на HTML+JS, а открывать с кода при помощи Browser из WPF, но тоже только под мокропиську (не смотрел, как там это в Mono реализовали, может и у них есть чего), да ещё и с особенностями движка JS в IE могут быть проблемы
>>199184942>Алсо, макака: время, затраченное на выполнение алгоритма, зависит не от его сложностизачем тогда парится лол
>>199185147Мне WPF вообще не вкатил, особенно XAML. Нужно было иконку в трей запилить, а нативной поддержки нет, надо тянуть с WinForms, короче залупа и таких нюансов дохуя. Стилизация элементов неудобная и громоздкая, стили темплейты всякие создавать, плодить вьюмодели для биндинга. Одним словом, мозгоебля. В JS всё как-то более органично в этом плане.Кроссплатформенность тоже играет роль, безусловно.Меня вот заинтересовал Blazor, который запускает .NET с помощью WebAssembly, но он пока в превью, ждемс.
>>199164010 (OP)var a = [-10, 52, 22, 72, 144]var mx = -99999var mn = 99999for (var i = 0; i < a.length; ++i) { if (a < mn) { mn = a } if (a > mx) { mx = a }}console.log('min: ', mn, 'max: ', mx)
>>199185660фикс. [ i ] за тег принимается макакойvar a = [-10, 52, 22, 72, 144]var mx = -99999var mn = 99999for (var i = 0; i < a.length; ++i) { if (a[ i ] < mn) { mn = a[ i ] } if (a[ i ] > mx) { mx = a[ i ] }}console.log('min: ', mn, 'max', mx)
>>199185062Смотри, в этой строчке:>console.log(Math.max(...arr), Math.min(...arr));Делается два прохода по массиву (первый для нахождения Math.min, второй для Math.max). В моем алгоритме оно делает только один проход по массиву.>>199185136Понял. В C# такое можно реализовать как минимум двумя методами:1. С помощью IDisposable, но там сахар идет такой:using(/объявление и инициализация переменной/) {} //после закрытия скобки автоматически вызывает метод Dispose к переменной в скобках ()2. С помощью анонимных методов (функций):{int x = 5;return x + 5;} //после закрытия скобки все локальные переменные утилизируютсяА ещё можно с помощью локальных (вложенных) функций, да>>199185535У меня есть глупая привычка - путать названия WPF и WinForms, так что я изначально подразумевал WinForms. XAML я тоже не люблю, из-за этого им не пользуюсь. Алсо видел библиотеки с сахаром к WinForms для нескольких скриптовых языков, было забавно писать GUI с их помощью, но тащить к скриптопараше DLL на компилируемых языках для скорости и надежности ещё хуже, чем написать пару лишних строчек на C#. Повсеметсного введения WebAssembly на сайтах я уже где-то год жду, всё никак не дождусь
>>199185982>return x + 5;>} //после закрытия скобки все локальные переменные утилизируютсяА если я возвращаю объект, он не утилизируется в этот момент деструктором как в С++?
>>199164010 (OP)arr = arr.reduce(([min, max] , el) => { if (el < min) min = el; if (el > max) max = el; return [min, max], [Number.Infinity, -Number.Infinity]);
>>199186293представил хоть сколько-нибудь большой проект на таком говнокоде и охуелтысячи файлов и в каждом сотни, а то и тысячи строк такого "чуда", бляяя
>>199186293Хорошая попытка. Мне нравится, что ты используешь только один вызов редуса, а не два, что будет существенно дольше.
>>199164010 (OP)Пиздец вы ебанутые, я весь тред охуеваю, тут куча программистов сидят и не могут написать простейший перебор циклом массива. Ещё и срут друг на друга, хули вообще вы может тут сделать? В любом случае надо по всем элементам пройти. Ну 3 тысячи и чего? 3 тысячи итераций это очень мало, особенно когда внутри тупо сравнение мимо программированием занимался только в школе и только олимпиадным
>>199187191> По о нотации О(к×н) =О(н)Если ты делаешь задачу в институте, в условии которой написано "выполнить за О(н)", то да, за такое решение ты получишь зачет.Но в реальной жизни писать код, который будет работать почти в к раз медленнее очевидного решения - признак непрофессионализма.
>>199187286> 3 тысячи итераций это очень мало, особенно когда внутри тупо сравнениеТы не знаешь, какие это элементы и насколько сложно в них определено сравнение.
как правильно записывать о нотацию с константой программазаурусы епт, вы там 8к нерублей получаете должны знать
>>199186293> arr = arr.reduce(([min, max] , el) => { if (el < min) min = el; if (el > max) max = el; return [min, max], [Number.Infinity, -Number.Infinity]);Ебанулись совсем с функциональщиной.const findMinMax = (arr) => { let min = arr[0]; let max = arr[0]; for (let i = 0; i < arr.length; i++) { if (arr > max) { max = arr; } if (arr < min) { min = arr; } } return {min, max};}const {min, max} = findMinMax([6, 0, -10, 10, 12, 4]);console.log(min);console.log(max);И работать будет быстрее чем ваше говнище раз в 15.
>>199187389Ну давай, сравни 3 тысячи чисел со своими двумя не сделая 3 тысячи итераций >>199187366А что хорошего в этом решении? Вместо одного цикла два, ещё и тянут за собой вес модуля math с кучей лишнего(не знаю, как там в жс, у меня на нём опыта нет, но внутри max и min есть как минимум куча лишнего кода про сравнение чисел)
>>199187530Хотя я так сейчас подумал, что в max и min особо лишнего кода нет, но в любом случае модуль math и два цикла вместо одного
>>199187530>куча лишнего кода про сравнение чисела ведь иногда сравнивают не только числа но и структуры, лол
>>199186178Я, может, немного непонятно написал про анонимные методы. Это, по сути, обычный метод, используемый для делегации (по сути то же, что pointer на функцию в C/++). При возвращении (return) переменной методом value-type переменные копируются, а reference-type переменные возвращаются. Объекты - reference-type переменные, т.е. непосредственно при возвращении деструктор (который в C# называется финализатор - finalizer) вызван не будет. Если же ты имеешь ввиду вызов финализатора, когда объект в методе не возвращается (т.е. стандартная утилизация локальных переменных) - он будет вызван сборщиком мусора (через неопределенное количество времени) либо может быть вызыван вручную (при помощи метода Finalize)
>>1991875301. Math это часть __стандартной__ библиотеки и она тянется __всегда__2. Этот модуль должен быть оптимизирован просто пиздец как. Я не удивлюсь что он не на js а нативный3. Два подхода это просто плата за удобство
>>199187450Я не за 8к работаю, но преподаю на педпрактике в универе, давай тебе расскажу> как правильно записывать о нотацию с константойО-нотация - это грубейшая оценка и константу там указывать не принято.Тета-нотация более точная, и там можно указать константу, если она несет какую-то информацию об алгоритме, а можно и опустить.>>199187504Разная семантика немного. Ты в своем коде явно указываешь перебор в явном порядке одним ядром , а редус показывает, что ты хочешь получить максимальное и минимальное значение, каким образом и в каком порядке что с чем сравнивать - неважно. Возможно, что редус будет параллельный и в работает в p раз быстрее твоего варианта, где p - число процессоров.
>>199187715Не знаю, что там входит в их функции сравнения, но если это модуль math, то скорее всего он берет или числа или массив чисел. Но вообще хз. >>199187804Ну 2n итераций вместо n в любом случае
>>199187889> Возможно, что редус будет параллельный и в работает в p раз быстрее твоего варианта, где p - число процессоров.Ты не прав.1) Reduce просто декларативней.2) Он не делит поиск на несколько потоков или дай боже ядер. Все уже посчитали до тебя https://github.com/dg92/Performance-Analysis-JS3) Если автор хочет классной производительности, чтобы страничка не тормозила, пусть отделяет от отдельного потока сервис воркер и считает в нем, тогда действительно будет задействовано второе ядро, но судя по вопросу, ему еще до воркеров как до китая раком.
>>199187887Я сомневаюсь, что его нативность перекроет увеличение итераций в два раза. Оптимизировать там тоже вроде как нечего, что такого ты сделаешь с простейшим проходом по массиву?
>>199188256> 1) Reduce просто декларативней.Нет. Обход цикла идет в явном порядке, а редус не определяет какой-то особенный порядок обхода. Это играет особое значение в нетранзитивных операциях. Вобщем, редус и обход цикла может дать разные результаты, потому что у них разная семантика.> Он не делит поиск на несколько потоков или дай боже ядер.Это особенность реализации, а я говорю про концепцию редуса в принципе. Например, в openmpi он, очевидно, делит работу на несколько ядер и даже машин в нетривальном порядке.
>>199188308Хуй знает, братюнь, я в этом плане смотрю только с точки зрения практики. А она говорит мне как то так:1. Модуль стандартный, значит оверхэда от импорта не будет и всем насрать2. Модуль старый и хорошо проверенный 3. 3000 элементов это очень маленькая цифра, две итерации вместо одной будут совершенно незаметны4. Сам по себе js говорит от том что дела на фронтэнде делаются и там ничего тяжелого из вычислений быть не может (в идеале конечно), поэтому тем более насратьПо всем вменяемым кейсам выходит насрать. Ну а если оно юзается на очень больших данных и(или) в браузере могу предположить что автор ССЗБ и уменьшение итераций до одной тут не поможет особо. Зато скорость написания кода и читаемость ебически повышаются, менеджеры могут порадоваться
>>199188668> Нет. Обход цикла идет в явном порядке, а редус не определяет какой-то особенный порядок обхода. Это играет особое значение в нетранзитивных операциях. Вобщем, редус и обход цикла может дать разные результаты, потому что у них разная семантика.По твоей логике, если я напишу код вроде:const some = [-12, 0, 4, 5, 14, 13].reduce((acc, el) => { console.log(el)}, 0); в консоль должны падать элементы в разном порядке, но этого не происходит.
Развести срач на 300 тредов из за простейшего задания? Только двачеры так умеют. кто действительно думает что нужно сортировать массив - умрите
>>199188951Двачую, простого перебора со сравнением с max=arr[0] и min=arr[0] достаточно. Тред не читал. мимо тимлид[/i]
>>199189346Ну очевидно, что если в массиве 4000 элементов,два Math.max, Math.min — 8000 операций чтения.один луп - 4000 операций чтения.Для современных ПЭК — похуй, так как рост сложности остается линейный, но перфекционисты в треде негодуют
>>199164010 (OP)Если ты самоучка делай везде проверку к числам. тип 1>0 2>0 3>0 и тд и тп. Соотвественно в зависимости от того что надо. А потом уже ищи способы делать это все без такой хуиты.
>>199189697Стандартный луп быстрее функции из math, лол, вот тебе пиздецовая оптимизация и нативность.
>>199190764И там и там два прохода, смотри на картинку, там стандартные лупы в один не объединены, как мы хотели, и всё равно быстрее, чем вызов функций из math
>>199190189ДВАЧЕР ТРАТИТ ПОЛТОРА ДНЯ НА ПОИСК НАИБОЛЕЕ ОПТИМАЛЬНОЕ РЕШЕНИЕ, ПРОВЕЛ ТЕСТЫ НА СРАВНЕНИЕ@ЕБУТ В ОЧКО ЗА ПРОЕБ КУЧИ ВРЕМЕНИ@ПИЗДА ПЕТРОВНА ХУЯРИТ ЗА 5 МИНУТ ПИКРЕЛЕЙТЕД, ПОЛУЧАЕТ ПРЕМИЮ, ВСЯ КОМАНДА ДОВОЛЬНА, МАНАГЕР ДОВОЛЕНвас рыночек порешал давно, долбоебы, какие нахуй O(n) vs O(2n) в жс
Охуеваю с зумеров, которые пишут свои let, const и прочие фичи, которые добавлены в спецификацию вчера, и поддерживаются только в одном из браузеров. Как вы будете писать кроссбраузерный код, который должен поддерживать старые браузеры (да, в IE нет автоапдейтов)? Будете писать вторую версию библиотеки, чтобы браузер об синтаксис не ломался? Вы совсем дауны?
>>199187137Ага, только увеличь размер массива, и у тебя будет валиться с ошибкой кол-ва аргументов, не говоря уже про двойную сложность
>>199164010 (OP)Пошёл нахуй, это элементарное задание, никто твою домашку делать не будет.>>199191825Старые браузеры не нужны, аутист. Если какая-то контора использует конкретный старый ie, то это будет в тз. Остальные некроёбы не нужны и идут нахуй.
>>199191825ебанашка, твой обоссаный ие почти нигде не нужен, а где нужен все решается бабелом и полифилами.
>>199192233>>199192262Вижу, вы никогда не делали массовые продукты. Тем более, огромное количество корпоративных пользователей сидит с IE. А полифиллы свои можешь себе в задницу засунуть.
>>199192360То есть, ты пишешь новый модный код, а потом конвертируешь его в говно, но которое будет работать на всех браузерах? Тебе самому не смешно?
>>199192797То есть ты сразу пишешь говно, но которое будет работать во всех браузерах? Поверь, компилятор намного умнее тебя.
>>199192366тупой ебанат, поддержка конкретных браузеров всегда обсуждается, если у вас требуется поддержка ие, то вы ебошите через бабел или тупо пишете на нужной версии ес, в чем проблема? Твой пердеж это хуета уровня ПОСОНЫ НА МОЕЙ ТЫРПРАЙЗ ГАЛЕРЕ ПИШУТ НА ДЖАВА 5, НАХУЯ ВАМ 8>>199192797Не мода, а удобства, ты какой-то неосилятор, если считаешь, что let и const просто модная хуета, а не удобные и важные вещи, которые в любом языке есть.
>>199182614Долбаеб присвоил минимуму и максимуму 0. Минимуму присваивай максимально возможное значение в массиве, максимуму минимальное. Так конечно не будет работать.
>>199193334>Минимуму присваивай максимально возможное значение в массиве, максимуму минимальное.А как их со старта то узнать? плюс минус INF? Не проще ли взять первый элемент?мимо
>>199193430Да, можно первый элемент тоже, но обычно присваивают границы значений. Если не в курсе про них, присваивай первый.
>>199190394С учетом того насколько маленькая там разница в скорости при сокращении объема исходника я, пожалуй, повторюсь - вообще насрать
>>199192109>> Зависит от браузера, как я понимаю, у меня сломалось где-то на 600к>> У меня где-то около 125640 всё поломалосьБратюнь, если кто то будет что то считать на фронтэнде в таких объемах то сломавшийся Math это меньшая из его / ее проблем имхо
>>1991956701. У webgl под капотом не js же. Хотя я в этом вопросе не компетентен2. Если речь о ноде на бэке то вероятнее всего все эти вычисления в фоне идут а там +-5% тоже не критичныА вообще имхо это глупый срач на тему удобство написания vs скорость выполнения. It depends же. В изначальной задаче оп вообще про 3000 объектов писал, под эти цифры пойдёт. Под что то люто большое нужно будет изъебнуться, это норма
>>199196252>У webgl под капотом не js жеДа пофиг, что там под капотом, работать с api то из js.>Если речь о ноде на бэке то вероятнее всего все эти вычисления в фоне идут а там +-5% тоже не критичныЧел, тут квиксорты предлагают, это уже совсем не 5 процентов. И да оно не тупит, оно падает с ошибкой.>у меня сломалось где-то на 600кмного аргументов>около 125640 всё поломалосьстековерфлоу
>>199196407>> Чел, тут квиксорты предлагают, это уже совсем не 5 процентов. И да оно не тупит, оно падает с ошибкой.А я с этим и не спорю>> В изначальной задаче оп вообще про 3000 объектов писал, под эти цифры пойдёт. Под что то люто большое нужно будет изъебнуться, это нормаТрэд просто ушел в русло "какой алгоритм быстрее в принципе"
>>199196883>Трэд просто ушел в русло "какой алгоритм быстрее в принципе"Потому что это двач, а не бложик ОП-а хуя
>>199196883PS>Сам то я могу но скорее нужен оптимальный вариант от анона>какой алгоритм быстрее в принципеДостаточно близкая тема. И да, нет никаких около 3000. Есть 0 и много
>>199196407>Чел, тут квиксорты предлагаютникто квиксорт всерьез не предлагал там сразу была написана более высокая сложность -_-