我试图解决Cormem的算法导论第3版(第405页)中的动态编程问题,该问题如下:
回文是一些字母表上的非空字符串,它向前和向后读取相同的字符串.回文的实例是长度为1的所有字符串,
civic
,racecar
,和aibohphobia
(回文的恐惧).给出一个有效的算法来找到作为给定输入字符串的子序列的最长回文.例如,给定输入
character
,您的算法应该返回carac
.
好吧,我可以通过两种方式解决它:
第一解决方案
字符串的最长回文子序列(LPS)只是其自身及其反向的最长公共子序列.(我在解决了另一个要求序列的最长增加子序列的相关问题后构建了这个解决方案).由于它只是一个LCS变体,它还需要O(n²)时间和O(n²)存储器.
二解决方案:
第二个解决方案稍微详细一点,但也遵循一般的LCS模板.它来自以下重现:
lps(s[i..j]) =
s[i] + lps(s[i+1]..[j-1]) + s[j], if s[i] == s[j];
max(lps(s[i+1..j]), lps(s[i..j-1])) otherwise
Run Code Online (Sandbox Code Playgroud)
用于计算lps长度的伪代码如下:
compute-lps(s, n):
// palindromes with length 1
for i = 1 to n:
c[i, i] = 1
// palindromes with length up to 2
for i = 1 to n-1:
c[i, i+1] = (s[i] == s[i+1]) ? 2 : 1
// …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用C++ for Windows(MinGW)和Linux(g ++)编写跨平台代码.我习惯在Linux中将64位整数定义为"long",但当我移动到MinGW时,sizeof(long)返回4个字节.然后我发现我可以使用"long long"或"__INT64"在MinGW中定义64位整数.我有两个问题:
1.-为Windows和Linux定义64位整数的最便携方式是什么?我目前正在使用#ifdef,但我不知道这是否是最好的方法:
#ifdef LINUX
#define INT64 long
#elif WIN32
#define INT64 long long
#endif
Run Code Online (Sandbox Code Playgroud)
2.- 我应该在MinGW中使用"long long"还是"__INT64"?为什么?
作为该主板的众多用户,我想开发一款采用Google App Engine作为后端服务器的Android应用.我需要用户使用他/她的Google帐户登录并将图像上传到GAE服务器.这是我到目前为止所做的:
首先,我发现这个网站有关Android,GAE和C2DM消息.我努力遵循教程,学习开发Android应用程序以及如何在GAE中创建Java服务器,但事实证明C2DM现已弃用!
然后我开始学习使用OAuth授权的Java后端和一个名为Cloud Endpoints的GAE"实验"功能,该功能可以让我在处理Android + Google App Engine时更轻松.
我的问题是:哪个是连接Android和GAE的最佳方式,具有授权和blobstore上传功能?使用OAuth + Cloud Endpoints,C2DM消息传递或我未提及的任何其他接口技术?
是否有使用 Boost Geometry 对多边形(笛卡尔)进行矩阵变换的示例?我正在用简单的 std::vectors 定义矩阵。
另外,我只能找到 1 个matrix_transformers
使用示例,ublas
但对于简单的矩阵变换来说太复杂了。如果这是唯一的办法,虽然,我会坚持下去,但它会是巨大的,有其他的选择,广告做这个用std::vector
的,而不是ublas::matrix
。
algorithm ×1
android ×1
boost ×1
c++ ×1
c++11 ×1
int64 ×1
java ×1
long-integer ×1
mingw ×1
palindrome ×1