由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道题(10)
相关主题
F家的一道题。看起来好像很凶残的样子。求大家给思路给想法。。囧问一个word ladder的题目
如何让python dictionary sorting 的速度变得很快? (转载)LeetCode: Word Ladder
问两道google题leetcode 的two sum
算法面试题google 电面
google电面杯具,贡献题目问一个Google老题
转划单词题的优解问个snapchat的面经题
一道G家店面题编程习惯问题
10分钟前的F家电二面面经(必挂)有没有用hash table做dictionary (word) sorting的C代码?
相关话题的讨论汇总
话题: dict话题: prob10话题: sorted话题: string话题: skipped
进入JobHunting版参与讨论
1 (共1页)
f*********d
发帖数: 140
1
继续问题,跪求大牛帮忙扫:)
Given a dictionary and a string, write a program to output the valid words
while minimizing the numbers of skipped characters. The substring that
consists of a valid word in the dictionary may swap the characters. For
example, Given a dictionary d = window, cat and a string “iwndowdcta”, the
output is “window cat”. In this case, there is only one number of skipped
character which is ’d’.
多维背包?但是这个维度(#of alphas in language)还是太高了吧。有其它好的解法吗?
a********m
发帖数: 15480
2
每个词都可以用一个长度#的数组表示,然后把字典建成一个#维数组。最后背包部分
还算可以接受吧,少于#维恐怕难。
f*********d
发帖数: 140
3
借这题再问大牛一个相关的问题,如果维度不确定的dp,比如说依赖于输入,那在实现
上好做吗? 具体一点的等价问题,如果知道是26维dp,可以避免写26层的循环吗?也
许借助递归可以很好的实现,记忆化dp? 请大牛confirm一下!

【在 a********m 的大作中提到】
: 每个词都可以用一个长度#的数组表示,然后把字典建成一个#维数组。最后背包部分
: 还算可以接受吧,少于#维恐怕难。

b**m
发帖数: 1466
4
如果我没理解错的话,
可以简化为shortest path 问题。
不过这种题我得想20分钟才能想出思路来。
p*u
发帖数: 136
5
感觉这是个网络流问题。
假设词典有n个单词,每个单词最后在string中出现的次数为f[i],根据26个字母,可
以列26个不等式,比如例子中w的不等式为:
2 * f[0] + 0 * f[1] <= 2
目标方程:z = len(string) - f[0] * len(dict[0]) - f[1] * len(dict[1]) - ...
求z的最小值,用网络流的方法就可以了。

the
skipped
吗?

【在 f*********d 的大作中提到】
: 继续问题,跪求大牛帮忙扫:)
: Given a dictionary and a string, write a program to output the valid words
: while minimizing the numbers of skipped characters. The substring that
: consists of a valid word in the dictionary may swap the characters. For
: example, Given a dictionary d = window, cat and a string “iwndowdcta”, the
: output is “window cat”. In this case, there is only one number of skipped
: character which is ’d’.
: 多维背包?但是这个维度(#of alphas in language)还是太高了吧。有其它好的解法吗?

a********m
发帖数: 15480
6
赞。

【在 p*u 的大作中提到】
: 感觉这是个网络流问题。
: 假设词典有n个单词,每个单词最后在string中出现的次数为f[i],根据26个字母,可
: 以列26个不等式,比如例子中w的不等式为:
: 2 * f[0] + 0 * f[1] <= 2
: 目标方程:z = len(string) - f[0] * len(dict[0]) - f[1] * len(dict[1]) - ...
: 求z的最小值,用网络流的方法就可以了。
:
: the
: skipped
: 吗?

a********m
发帖数: 15480
7
多维背包记得不需要那么多循环。实现上应该区别不大,递归应该是要用到。不过这题
写起来恐怕挺麻烦的。

【在 f*********d 的大作中提到】
: 借这题再问大牛一个相关的问题,如果维度不确定的dp,比如说依赖于输入,那在实现
: 上好做吗? 具体一点的等价问题,如果知道是26维dp,可以避免写26层的循环吗?也
: 许借助递归可以很好的实现,记忆化dp? 请大牛confirm一下!

t****a
发帖数: 1212
8
可以用DP来做。计算复杂度大约为n^3*len(dict)
假设输入字符串s长度为n,f为求解的函数,那么
f(s, dict) = match_dict(s, dict) 当s可以直接匹配上dict里的某字符串(通过排序
后比较), match_dict返回dict中匹配上的字符串
f(s, dict) = (max the words length) [f(subs(s, 0, i), dict), f(subs(s, i, n)
, dict)], i=1..n-1 当s不能直接找到dict里的匹配
f(s, dict) = nil 当s为空
clojure程序如下
(defn gen-sorted-dict [dict]
(reduce merge (for [w dict]
{(sort w) w})))
(defn match-dict [s sorted-dict]
(sorted-dict (sort s)))
(def prob10-sub
(memoize
(fn [s sorted-dict]
(when (not (empty? s))
(if-let [mw (match-dict s sorted-dict)]
[mw]
(let [mws (for [i (range 1 (count s))
:let [s1 (subs s 0 i)
m1 (prob10-sub s1 sorted-dict)
s2 (subs s i)
m2 (prob10-sub s2 sorted-dict)
m12 (concat m1 m2)]
:when (not (empty? m12))]
m12)]
(first (sort-by #(reduce + (map count %)) > mws))))))))
(defn prob10 [s dict]
(prob10-sub s (gen-sorted-dict dict)))
(prob10 "iwndowdcta" ["window" "cat"]) ;("window" "cat")
(prob10 "iwndowdctatc" ["windowdc" "cat"]) ;("windowdc" "cat")
c*****n
发帖数: 83
9
用二维 DP 做:
Define f_k(i) the number of skipped characters with string s[i,i+k).
Starting from k = 1 initializing f_1(i) = 0 if s[i] is in dict, f_1(i) = 1
otherwise; then calculate f_{k}(i) recursively by
f_{k+1}(i) = min_{h=1}^{k} {f_h(i) + f_{k+1-h}(i+h)} if s[i,i+k+1) is NOT in
dict; otherwise f_{k+1}(i) = 0;
up to k = len(s)
如何判断 s[i,i+k) is in Dict? One-pass preprocessing
Sol(1): the signatures of all words in Dict: the frequencies of letters in
that word, 然后按这个 signature 排序。
Sol(2): Hash table all words
c********e
发帖数: 186
10
觉得一维dp就可以了
F(0) = 0;
string s, length N
i=1, 2, ..., N
F(i) = Min_j (F(j-1)+ isDict(s(j-1,i)) ? 0 : i-j+1 ) where j = i,...,1
s(j-1,i) includes chars [j-1, i)

in

【在 c*****n 的大作中提到】
: 用二维 DP 做:
: Define f_k(i) the number of skipped characters with string s[i,i+k).
: Starting from k = 1 initializing f_1(i) = 0 if s[i] is in dict, f_1(i) = 1
: otherwise; then calculate f_{k}(i) recursively by
: f_{k+1}(i) = min_{h=1}^{k} {f_h(i) + f_{k+1-h}(i+h)} if s[i,i+k+1) is NOT in
: dict; otherwise f_{k+1}(i) = 0;
: up to k = len(s)
: 如何判断 s[i,i+k) is in Dict? One-pass preprocessing
: Sol(1): the signatures of all words in Dict: the frequencies of letters in
: that word, 然后按这个 signature 排序。

1 (共1页)
进入JobHunting版参与讨论
相关主题
有没有用hash table做dictionary (word) sorting的C代码?google电面杯具,贡献题目
帮忙看道题:[leetcode] word break转划单词题的优解
G家面经求指点--beanbun--G--dictionary一道G家店面题
M家一道题10分钟前的F家电二面面经(必挂)
F家的一道题。看起来好像很凶残的样子。求大家给思路给想法。。囧问一个word ladder的题目
如何让python dictionary sorting 的速度变得很快? (转载)LeetCode: Word Ladder
问两道google题leetcode 的two sum
算法面试题google 电面
相关话题的讨论汇总
话题: dict话题: prob10话题: sorted话题: string话题: skipped