Re[13]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 11:42
Оценка:
Здравствуйте, THESERG, Вы писали:

THE>все мужики, женатые, около 25-30 лет


THE>Здравствуйте, __kot2, Вы писали:


__>>Здравствуйте, THESERG, Вы писали:

THE>>>нет, китаец
__>>а народ наш примерно какого возраста был? интересно, кого они набирают все-таки, недавних выпускников (22), наш средний класс (лет 25), руководящий состав (около 30) или же, как тут где-то отмечалось, там хватает дядек и под 40?

Не все женатые и есть меньше 25 =) Но в большей массе возможно
Re[3]: MSFT, Bing. Interview event.
От: Константин Л. Франция  
Дата: 09.08.11 12:47
Оценка:
Здравствуйте, THESERG, Вы писали:

[]

THE>killer question — реализация regexp match на листочке бумаги (просят сразу C/C++ код). Без предварительной подготовки


аее. китаец спрашивал. причем под конец интервью был забавный момент. он мне сказал, что * — жадная, т.е.

a*b
матчит
aoe2b1eb

когда я подкорректировал алгоритм, он начал менять условие, и она вдруг стала не жадной.
вероятность, что я просто не понял его английского — 10%.
он был совсем не френдли, все время ерзал и, как мне показалось, не был настроен на нормальное общение

моё мнение — за 45 минут а бумаге вменяемое решение написать очень трудно

THE>реализовать такое за менее чем 45 минут имхо нереально. Это видимо просто нужно было задрачивать

THE>при подготовке к интервью. Я сразу выбрал недостаточно сильный алгоритм, у меня код даже не смотрели — "It doesn't work!" и баста!

[]
Re[4]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 12:53
Оценка:
КЛ>аее. китаец спрашивал. причем под конец интервью был забавный момент. он мне сказал, что * — жадная, т.е.
=) да да, доброжелательности не чувствовалось...
Re[12]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 13:55
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, BulatZiganshin, Вы писали:

BZ>>работать должно быстрее, но я бы с подозрением отнёсся к человеку, который даже на интервью занимается premature optimization
__>работа у меня такая — оптимизация. целыми днями только ей, родимой, и занимаюсь. голова уже по другому работать не хочет.

Расскажите, как ваш алгоритм будет работать на на строках / паттернах вида

caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabz
c*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab*z


Мне кажется, что эта "оптимизация" все равно будет работать за O(mn) (при этом еще и жрать много памяти).
Re[13]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:03
Оценка:
tlp>Расскажите, как ваш алгоритм будет работать на на строках / паттернах вида

tlp>

tlp>caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabz
tlp>c*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab*z


tlp>Мне кажется, что эта "оптимизация" все равно будет работать за O(mn) (при этом еще и жрать много памяти).


Фиг знает, что хотел автор. Но O(mn) можно получить по времени и O(n) памяти, для двумерного дп хранить строчку предыдущего результата только.
Re[14]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:08
Оценка:
Здравствуйте, kuzmaprutkov2, Вы писали:


tlp>>Расскажите, как ваш алгоритм будет работать на на строках / паттернах вида


tlp>>

tlp>>caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabz
tlp>>c*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab*z


tlp>>Мне кажется, что эта "оптимизация" все равно будет работать за O(mn) (при этом еще и жрать много памяти).


K>Фиг знает, что хотел автор. Но O(mn) можно получить по времени и O(n) памяти, для двумерного дп хранить строчку предыдущего результата только.


Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?
Re[15]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:10
Оценка:
Здравствуйте, tlp, Вы писали:

tlp>>>Мне кажется, что эта "оптимизация" все равно будет работать за O(mn) (при этом еще и жрать много памяти).


K>>Фиг знает, что хотел автор. Но O(mn) можно получить по времени и O(n) памяти, для двумерного дп хранить строчку предыдущего результата только.


tlp>Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?


Возможно — нет, если опишите как делать за O(n) строки — то понятно дело круто.
Re[16]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:12
Оценка:
Здравствуйте, kuzmaprutkov2, Вы писали:

K>Здравствуйте, tlp, Вы писали:


tlp>>>>Мне кажется, что эта "оптимизация" все равно будет работать за O(mn) (при этом еще и жрать много памяти).


K>>>Фиг знает, что хотел автор. Но O(mn) можно получить по времени и O(n) памяти, для двумерного дп хранить строчку предыдущего результата только.


tlp>>Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?


K>Возможно — нет, если опишите как делать за O(n) строки — то понятно дело круто.


Каждый раз встречая *, есть возможности: 1) заюзать звезду за букву 2) проскипать звезду и заюзать символ следующий за звездой.
Как сделать O(n) буду рад узнать решение.
Re[16]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:13
Оценка:
Здравствуйте, kuzmaprutkov2, Вы писали:

K>Возможно — нет, если опишите как делать за O(n) строки — то понятно дело круто.


Не совсем за O(n), еще нужно время на построение автомата, оно зависиит от длины и конфигурации паттерна, но обычно одним автоматом матчится много строк, так что им можно принебречь.

Построение ДКА по паттернам у того же Кормена описано, тайны не составляет. Думаю, на собеседовании достаточно было бы рассказать про сам способ и показать на примере, как строить ДКА, а не писать код (он может быть довольно громоздким).
Re[7]: MSFT, Bing. Interview event.
От: 0xC0DE  
Дата: 09.08.11 14:22
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, __kot2, Вы писали:


THE>>>нет-нет, простенький, как для файлов, и спец. символов — только звёздочка

__>>есть, как мне кажется достаточно простой вариант реализации с временем О(длина имени файла). это вариант с бегущими указателями. начиная с одного такого он двигается вперед по регэкспу, застревая на звездочке и, порождая новые бегущие указатели с этого места в случае дальнейшего совпадения.

BZ>а ты пробовал его реализовать? мне кажется, что без рекурсии ты звёздочку не реализуешь, "порождение указателей" — это видимо способ переложить рекурсию в кучу?


В детстве на олимпиаде решал задачу такого плана: есть две маски (по типу файловых — с * и ?). Определить, есть ли строка, подходящая под обе. Решил без рекурсии, сам потом удивлялся, насколько с ней все проще.
Re[15]: MSFT, Bing. Interview event.
От: BulatZiganshin  
Дата: 09.08.11 14:22
Оценка:
Здравствуйте, tlp, Вы писали:

tlp>Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?


конечный автомат будет делать ровно то же самое, что и обычное решение. просто это суперкомпиляция кода match() для конкретного паттерна. ну а учитывая, что паттерн и так представлен очень эффективной структурой данных — строкой — никакого выигрыша не будет вообще
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:25
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, tlp, Вы писали:


tlp>>Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?


BZ>конечный автомат будет делать ровно то же самое, что и обычное решение. просто это суперкомпиляция кода match() для конкретного паттерна. ну а учитывая, что паттерн и так представлен очень эффективной структурой данных — строкой — никакого выигрыша не будет вообще


Не понял, что такое "обычное решение". То, что тут приводили, работает за O(mn). Если автомат построить заранее, то он будет матчить строку за O(n).
Re[17]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:28
Оценка:
Здравствуйте, tlp, Вы писали:

tlp>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>Здравствуйте, tlp, Вы писали:


tlp>>>Смысл это делать, если можно постоить конечный автомат и найти матчинг за O(длины строки)?


BZ>>конечный автомат будет делать ровно то же самое, что и обычное решение. просто это суперкомпиляция кода match() для конкретного паттерна. ну а учитывая, что паттерн и так представлен очень эффективной структурой данных — строкой — никакого выигрыша не будет вообще


tlp>Не понял, что такое "обычное решение". То, что тут приводили, работает за O(mn). Если автомат построить заранее, то он будет матчить строку за O(n).


На входе буковка из слова и в регэкспе *. В какое состояние переходит автомат?
Re[17]: MSFT, Bing. Interview event.
От: BulatZiganshin  
Дата: 09.08.11 14:28
Оценка:
Здравствуйте, tlp, Вы писали:

BZ>>конечный автомат будет делать ровно то же самое, что и обычное решение. просто это суперкомпиляция кода match() для конкретного паттерна. ну а учитывая, что паттерн и так представлен очень эффективной структурой данных — строкой — никакого выигрыша не будет вообще


tlp>Не понял, что такое "обычное решение". То, что тут приводили, работает за O(mn).


да, оно

tlp>Если автомат построить заранее, то он будет матчить строку за O(n).


пруфлинк? или хотя бы объяснение на пальцах, как он обойдётся без бектрекинга, когда в паттерне много '*'?
Люди, я люблю вас! Будьте бдительны!!!
Re[18]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:29
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, tlp, Вы писали:


BZ>>>конечный автомат будет делать ровно то же самое, что и обычное решение. просто это суперкомпиляция кода match() для конкретного паттерна. ну а учитывая, что паттерн и так представлен очень эффективной структурой данных — строкой — никакого выигрыша не будет вообще


tlp>>Не понял, что такое "обычное решение". То, что тут приводили, работает за O(mn).


BZ>да, оно


tlp>>Если автомат построить заранее, то он будет матчить строку за O(n).


BZ>пруфлинк? или хотя бы объяснение на пальцах, как он обойдётся без бектрекинга, когда в паттерне много '*'?


Без бэктрекинга — двухмерное ДП =) вроде уже писал, но O(nm).
Re[19]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:32
Оценка:
Здравствуйте, kuzmaprutkov2, Вы писали:

Блин, народ, вы чего? Ну почитайте это или это. Или исходники GNU grep хотя бы.
Re[18]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:33
Оценка:
Здравствуйте, kuzmaprutkov2, Вы писали:

K>На входе буковка из слова и в регэкспе *. В какое состояние переходит автомат?


Автомат для регекспа "*" состоит из одного допускающего состояния, по всем входным символам он переходит в него же.
Re[19]: MSFT, Bing. Interview event.
От: kuzmaprutkov2  
Дата: 09.08.11 14:40
Оценка:
Здравствуйте, tlp, Вы писали:

tlp>Здравствуйте, kuzmaprutkov2, Вы писали:


K>>На входе буковка из слова и в регэкспе *. В какое состояние переходит автомат?


tlp>Автомат для регекспа "*" состоит из одного допускающего состояния, по всем входным символам он переходит в него же.


Не совсем то имел ввиду. Сейчас поясню.
str = abbbc
reg = a*bc

Вот такой простой в общем случае пример. "а" первая сматчилась с "а" из reg, потом b and * в какое состояние будет переходить автомат(Варианта 2 собственно поглотить букву или проскипать. D примере abbb a*bbb нужно например проскипать).
Re[18]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 14:41
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

tlp>>Если автомат построить заранее, то он будет матчить строку за O(n).


BZ>пруфлинк? или хотя бы объяснение на пальцах, как он обойдётся без бектрекинга, когда в паттерне много '*'?


Обьяснение на паольцах сводится к тому, что нужно строить не НКА (где нужен бэктрекинг), а ДКА (где он, очевидно, не нужен)

Можно прочитать и посмотреть на примеры тут
Re[20]: MSFT, Bing. Interview event.
От: tlp  
Дата: 09.08.11 15:00
Оценка: 25 (3)
Здравствуйте, kuzmaprutkov2, Вы писали:

K>Не совсем то имел ввиду. Сейчас поясню.

K>str = abbbc
K>reg = a*bc

автомат с вот такой таблицей переходов:

g(1, a) = 2 (из состояния 1 по a переходим в состояние 2)

g(2, [все, кроме b]) = 2
g(2, b) = 3

g(3, b) = 3
g(3, c) = 4
g(3, [все, кроме с и b]) = 2

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

начальное состояние — 1
допускающее состояние — 4

для строки abbbc будут состояния

a b b b c
1 2 3 3 3 4

Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.