LINUX.ORG.RU
ФорумTalks

Задача разгрузки коммуникационных каналов, habrahabr и глупость масс

 , , , ,


1

3

Пишу сюда по трем причинам: (i) не могу молчать, (ii) думаю вам должно быть интересно, (iii) это еще один пример зачем нетривиальная математика бывает нужна программисту.

Используя хабр максимум как источник новостей про всякие андройды и прочий мир pop-IT, я всегда поражался несостоятельностью тамошних статей на хоть сколько-то околонаучные темы(взять хотя бы трендовые нейронные сети и «ИИ»). Но вот сейчас наткнулся я на пост «Как я завалил собеседование в Twitter», где рассказана кулстори парня, который не решил задачку «заполнения водой дискретной сутпеньки». Если пройдете по ссылке, то сможете лицезреть десятки постов в стиле «зачем это программисту надо уметь решать», или «что за глупое собеседование, он же в Твиттер интервьюировался, а не в канализацию», ну и прочие народные хохомы, о том что гад интервьюеры такие дураки, задают олимпиадные задачи, которые не позволяют судить о реальном уровне программистов.

Но никто не упомянул, что этот метод на самом деле называется «water-filling», который есть решение задачи оптимальной разгрузки коммуникационных каналов, которая ставится следущим образом

max_x \sum log(a_i + x_i),
s.t.    x_i >= 0,     \sum x_i = 1.

И решение выписывается через ККТ условия.

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



Последнее исправление: ymn (всего исправлений: 1)

зачем твитеру специалист, который хотя бы знал, что это задача разгруки информационных каналов

Да, видимо они хотят найти хотя бы одного такого

buddhist ★★★★★
()
Ответ на: комментарий от fornlr

на лоре тоже есть толпа дебилов, которые вопят «ненужно» и «больше жизни» когда дело касается собеседования.

Rastafarra ★★★★
()

Твитор ненужен.

Xellos ★★★★★
()

«что за глупое собеседование, он же в Твиттер интервьюировался, а не в канализацию»

Ну почему, надо же кому-то разгрести тонны написанного туда говна.

cipher ★★★★★
()

Знаешь, я обычный плюсовик-быдлокодер.
Но, в своё время, мне приходилось писать серверы.
И довольно-таки нагруженные. И эти серверы работали.
Но я не любитель олимпиадных задач. Я люблю нетривиальные полезные задачи, но не люблю олимпиадные. И не интересуюсь ими.
Я впервые слышу о «задаче разгрузки информационных каналов».
Наверное я и мои серверы суть говно?

решение выписывается через ККТ условия.

Через что? Через, судя по гуглу, Казахстанско-Китайский Трубопровод?
Вау! Я настолько туп, что не знаю какой-то узкоспециальной аббревиатуры.
Таких не берут в космонавты.
Таких надо вообще в газвагене катать.

Короче! Кончай элитничать.

Stahl ★★☆
()
Ответ на: комментарий от Stahl

Я впервые слышу о «задаче разгрузки информационных каналов».

если ты не сталкивался с какой-то проблемой, значит её не существует или она не существенна?

Браво!

Знаешь, я обычный плюсовик-быдлокодер.

И нет ни малейшего желания узнать что-то ещё по своей профессии?

yyk ★★★★★
()
Ответ на: комментарий от yyk

если ты не сталкивался с какой-то проблемой, значит её не существует или она не существенна?

Ну и где ты эту мысль у меня прочитал? А?
Ты, видимо, ещё не проснулся:)

Stahl ★★☆
()
Ответ на: комментарий от zinfandel

Много вокруг тебя людей, знакомых с «Karush — Kuhn — Tucker conditions»?
Я вот, например, до этого момента о такой штуке не знал.
Да и сейчас не знаю. Статья на википедии какая-то за 3 минуты неосиливаемая. Осиливание этой штуки, думаю, займёт время.
Возможно эти самые «условия» широко известны и вообще являются базовыми знаниями в каком-то узком круге.
А может кто-то перечитался дискретки и пухнет от ЧСВ?

Stahl ★★☆
()
Ответ на: комментарий от Stahl

Ну и где ты эту мысль у меня прочитал? А?

в твоём мутном потоке негатива:

«Я впервые слышу о «задаче разгрузки информационных каналов». Наверное я и мои серверы суть говно?» «А может кто-то перечитался дискретки и пухнет от ЧСВ?»

yyk ★★★★★
()

что это задача разгруки информационных каналов, и мог бы ее решить(точнее просто заимплементить само решение).

в каких университетских курсах она упоминается? А что если человек не слышал про неё раньше, но в принципе способен её решать, изучив матчасть? ;)

Harald ★★★★★
()

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

snaf ★★★★★
()

Ну вот прихожу я на собеседование в твиттер, мне дают такую задачку, а о «разгрузке информационных каналов» не слышал(сегодня в первый раз, спасибо maggotroot).

И решаю её простым и крайне неэффективным способом:


in = [1,7,3,4,3,7,1,2]
   _       _
  | |     | |
  | |     | |
  | |  _  | |
  | |_| |_| |
  |         |  _
 _|         |_| | 
|1 7 3 4 3 7 1 2|

1) сначала предполагаем что все заполнено водой, строим матрицу(X - стенки)

1, X, 1, 1, 1, X, 1, 1
1, X, 1, 1, 1, X, 1, 1
1, X, 1, 1, 1, X, 1, 1
1, X, 1, X, 1, X, 1, 1
1, X, X, X, X, X, 1, 1
1, X, X, X, X, X, 1, X
X, X, X, X, X, X, X, X

2) проходим слева-направо. Если слева от элемента есть вода или стенка, не выливаем ничего, иначе выливаем.

0, X, 1, 1, 1, X, 1, 1
0, X, 1, 1, 1, X, 1, 1
0, X, 1, 1, 1, X, 1, 1
0, X, 1, X, 1, X, 1, 1
0, X, X, X, X, X, 1, 1
0, X, X, X, X, X, 1, X
X, X, X, X, X, X, X, X

3) та же ерунда, только справа-налево, а а условие проверяется для элементов справа

0, X, 1, 1, 1, X, 0, 0
0, X, 1, 1, 1, X, 0, 0
0, X, 1, 1, 1, X, 0, 0
0, X, 1, X, 1, X, 0, 0
0, X, X, X, X, X, 0, 0
0, X, X, X, X, X, 1, X
X, X, X, X, X, X, X, X

Тадам! На коленке, без раздумий, мы эту задачу решили. Эффективность O(m*n), никакая кароче, + по памяти швах.

Внимание вопрос: вот после такого решения меня твиттор на работу возьмет?

RedPossum ★★★★★
()
Смотрю, как студенты понтуются, кто из них больше ни фига не делал и всё сдал.
Эх...
Когда я был студентом, я сдавал право одной очень милой женщине. Она была практикующим юристом, и я ожидал, что такой специалист меня сейчас будет гонять от и до по всему конспекту.
Она посмотрела на меня и, ничего не спрашивая, поинтересовалась:
- Оценку вам какую ставить?
- Э... Пять хотелось бы
- Отлично, - сказала она, и стала писать в зачётке
- А вы что, даже ничего спрашивать не будете? - удивился я.
Она оторвалась от заполнения зачётки, внимательно посмотрела на меня и сказала:
- Запомните, молодой человек, чем меньше вы знаете, тем более ценна я как специалист.
Эта фраза мне запомнилась на всю жизнь и больше я не страдал фигнёй во время занятий.
И сейчас самое время мне, уже доценту и одновременно практикующему проектировщику зданий, повторить то же самое:
Господа студенты, не учитесь, пожалуйста! Старайтесь как можно больше получить на халяву! Чем меньше вы знаете по окончании института, тем более ценен я как специалист и тем большую зарплату я могу потребовать за свои услуги!
true_admin ★★★★★
()
Ответ на: комментарий от true_admin

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

//Ой, да, забросил я с сестрой таланта развлекаться, надо снова начать, время свободное есть, вроде.

RedPossum ★★★★★
()
Ответ на: комментарий от RedPossum

Внимание вопрос: вот после такого решения меня твиттор на работу возьмет?

Я тоже решил, а меня даже за еду работать не берут((

snaf ★★★★★
()
Ответ на: комментарий от true_admin

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

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

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от RedPossum

что твиттеру надо

Никто не знает кому что надо. Есть 100500 историй когда отказывали мощным чувакам и брали чуваков слабее. Короче, всегда есть шанс зафейлить. Никому не гарантирован 100% успех.

Основная идея в том чем ты мощнее тем меньше у тебя фейлов.

true_admin ★★★★★
()
Ответ на: комментарий от RedPossum

Так у тебя решение покошернее моего будет

Над ним пришлось посидеть. Я три месяца к собеседованиям готовился. Результат превзошёл все ожидания.

true_admin ★★★★★
()
Ответ на: комментарий от RedPossum

Если кратко, то наверно не возьмут, потому что сложность твоего решения на самом деле экспоненциальная. То есть как ты будешь лоадить очень толстые с очень тонкими каналами? Более подробно, тебе дано m чисел, максимальное из которых равно n. Если ты решил задачу алгоритмом за O(n*m), то, вообще говоря это экспоненциальная сложность! То есть, как только у тебя в оценку сложности входит число равное _значению_ входного параметра, а не кол-ву входных параметров, то это экспонента на самом деле(такая же штука например в алгоритмах поиска макс потока\мин разреза — есть простые алгоритмы, и они зависят от значения максимального ребра), причина этому, кроется в том, что любая сложность посчитаная в «числах», должна равняться сложности посчитаной в «битах», а чтобы представить входное число, тебе нужно 2^p бит.

maggotroot
() автор топика

Не так страшна статья как ее камменты.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Stahl

Нет, это ничего не говорит о тебе, и требовать от кого-то конкретно эти знания было глупо. Факт(о разгрузке каналов), действительно, не тривиальный и не во многих курсах его рассказывают. А вот, что во всем комьюнити их не нашлось человека, который бы это знал и указал всем, вот это кое что говорит. Мораль в том, что там устроили групповой самоотсос и стадом решили признать что это нинужно, и остались как и раньше при своем хамстве: не знают, но опускают тех кто это требует.

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

maggotroot
() автор топика
Ответ на: комментарий от maggotroot

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

RedPossum ★★★★★
()
Ответ на: комментарий от Harald

Задача разгрузки информационных каналов, наверно в некоторых курсах обработки сигналов, теории кодирования, и как пример в методах оптимизации. Но да, согласен, что редко о ней упомянают.

А что если человек не слышал про неё раньше, но в принципе способен её решать,

Еще раз, тут скорее смысл в том, что в таком массовом обсуждении поста, в «самом крупном IT коммюнити в РФ» не нашлось человека, который этого бы знал.

Я понимаю что это очень специализированные знания, но тогда если слушать швабр, получается что нам нужны только кодеры, а заниматься ничем другим никто не хочет, то есть продавать «сырье» на рынке IT и выносить в РФ фиговый аутсорс типа клепания окошек. И эти же люди критикуют правительство за сырьевую политику :)

maggotroot
() автор топика
Ответ на: комментарий от true_admin

Результат превзошёл все ожидания.

Делись историей успеха. Что подтягивал, что пригодилось, где в итоге оказался

RedPossum ★★★★★
()
Ответ на: комментарий от maggotroot

Я думаю те кому было что сказать просто не стали влезать в этот стандартный срач на темы «меня не ценят», «мне недоплачивают» и «я не обязан это знать».

true_admin ★★★★★
()
Ответ на: комментарий от maggotroot

ну из методов оптимизации у меня только линейная оптимизация в голове более-менее осела, а в курсе теории кодирования точно такого не упоминалось

Harald ★★★★★
()
Ответ на: комментарий от RedPossum

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

Это всё что я хотел сказать.

true_admin ★★★★★
()
Ответ на: комментарий от Harald

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

Про ККТ систему, условия Слейтера и двойственные задачи много где говорят.

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

maggotroot
() автор топика
Ответ на: комментарий от RedPossum

И не слушай тех кто говорит что у тебя ничего не получится.

13 лет назад мне говорили что я не смогу зарабатывать на линуксе, 10 лет назад мне коллеги говорили что я не дорасту до админа, 7 лет назад на лоре говорили что я не найду работы с python... Ну ты понял идею :). Собаки лают, караван идёт.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Так я же так и не понял в какой город ты уехал и куда пошел работать. В гугл что ли?) Ну я сам работаю не там, у меня много знакомых в местном отделении работают. Так что требую уточнения информации, но смотри сам.

maggotroot
() автор топика
Ответ на: комментарий от maggotroot

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

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Может, правда у меня сейчас дичайший завал по статье, но вроде я его разгребаю. Энивей если нужна помощь сориентироваться тут по всяким формальностям: видам на жительство, страховка, итд итп, то пиши, что-то смогу по-быстрому рассказать. Ну и что-то более подробно субъективно могу рассказать. Например по почте maggotroot@gmail.com .

maggotroot
() автор топика
Ответ на: комментарий от maggotroot

Спасибо. Напишу когда появится необходимость.

true_admin ★★★★★
()

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

Bad_ptr ★★★★★
()
Ответ на: комментарий от true_admin

7 лет назад на лоре говорили что я не найду работы с python...

На твой взгляд, какая ситуация с питоном будет еще через 7 лет? Не холивара ради.

aristocraft
()
Ответ на: комментарий от aristocraft

Я не знаю. Но я надеюсь что к тому времени я буду прогать на чём-нить получше :).

В любом случае это неплохая инвестиция в будущее, но не надо себя ограничивать. Я сейчас сосредотачиваюсь на сути программирования (что бы это ни значило), а не на конкретном синтаксисе. Впрочем, синтаксис я считаю одним из важнейших элементов ЯП — код должен не только рабочим, но и красивым и лаконичным. Но это мои персональные предпочтения, java-программистам меня не понять :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Впрочем, синтаксис я считаю одним из важнейших элементов ЯП — код должен не только рабочим, но и красивым и лаконичным.

Считается, что нет ничего красивее мысли, выраженной предложением на диалекте английского языка. :))

java-программистам меня не понять

Что так?

iZEN ★★★★★
()
Ответ на: комментарий от aristocraft

примерную совокупность знаний, приобретенных за 7 лет?

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

Но если ты каждый день делаешь одну и ту же фигню то и через 10 лет не видать позиции в твитере.

Ну а я вообще всё делал вопреки. Старался заниматься только тем что нравится. На сколько всё получилось узнаем только через пол года, я пока должен завершить дела на старом месте.

true_admin ★★★★★
()

Круто, похлопал в ладоши(сарказм).

Теперь вопросы:

1) Кем работаешь? Компания? Город? 2) Какой оклад(на руки)? 3) С чего ты взял, что заучивание редких и крайне узко специализированных даже не алгоритмов, а математических методов - не то что основной, а вообще хоть сколько-нибудь важный навык на ниве Software Engineering и Software Architecture, да и вообще, в индустрии IT?

Хотел сначала сам же ответить на эти вопросы, но очень уж стало интересно, что скажет автор.

lovesan ★★
()

Задачка хорошая. Вроде, решил. Правда, при чём тут задача с логарифмом - не понял.

Про условия ККТ знал, но не знал, что они называются ККТ.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Решение (работает за O(длина)):

{-# LANGUAGE Rank2Types #-}
module Water where
import Control.Monad.ST
import Control.Monad.State
import Data.Array.ST
runWithList :: (forall s. STArray s Int a -> ST s b) -> [a] -> b
runWithList f as = runST $ newListArray (0, length as - 1) as >>= f
findPeak :: STArray s Int Int -> ST s Int
findPeak ground =
    do (from, to) <- getBounds ground
       initMax <- readArray ground from
       liftM fst $ foldM updatePeak (from, initMax) [from+1..to] where
           updatePeak acc pos =
               do candidate <- readArray ground pos
                  return $ if candidate > snd acc then (pos, candidate) else acc
countWater :: STArray s Int Int -> Int -> Int -> Int -> ST s Int
countWater ground from to step =
    do this <- readArray ground from
       liftM fst $ flip execStateT (0, this) $ forM_ [from + step, from + 2 * step .. to] $ \pos -> do
         (acc, this) <- get
         that <- lift $ readArray ground pos
         let addition = if that >= this then 0 else this - that
         put (acc + addition, that + addition)
allWater :: STArray s Int Int -> ST s Int
allWater ground =
    do (from, to) <- getBounds ground
       peak <- findPeak ground
       before <- countWater ground from peak 1
       after <- countWater ground to peak (-1)
       return $ before + after
water :: [Int] -> Int
water = runWithList allWater
К тому гисту есть коммент с коротким хаскельным решением, но оно работает за квадратичное время.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.