我对动态编程的经验很少.我用它来解决DNA对齐问题,基本背包问题和简单的寻路问题.我明白他们是如何工作的,但这并不是我觉得非常舒服的东西.
我有一个问题,让我想起0-1动态编程,但差异让我失望,我不确定我是否仍然可以使用这种技术,或者我是否必须采取递归方法.
假设我有一个项目列表,每个项目都有不同的值,权重和成本.每个项目可能不止一个.
假设我必须选择最有价值的那些项目的组合,但仍然在重量和成本的限制范围内.到目前为止,我已经用2个约束描述了背包问题.但这就是区别:
所选项目的值会根据我在组合中的数量而变化.
假设每个项目都有一个与之相关的功能,它告诉我这些项目的组合对我来说是多么值得.它是一个基本的线性函数,例如value_of_item = -3(该项的数量)+50
所以,如果我在一个组合中有一个项目,那么它对我的价值是47.如果我有两个,那么他们每个人的价值仅为44.
如果我为此使用动态编程表,那么对于每个单元格,我必须回溯以查看该项目是否已经在当前组合中,使得DP无意义.但也许有一种方法可以重新构建问题所以我可以利用DP.
希望这是有道理的.
另一种方法是生成每个项目组合,在成本和重量的限制内,计算每个组合的价值,选择最有价值的组合.对于1000个项目的列表,这将是一个昂贵的搜索,这是我将反复计算的东西.我想找到一种方法来利用DP的优势.
我有一个让我想起Voronoi的问题,但是我希望我的变化能让我避免使用Voronoi算法,并且更快地写一些东西.
这是我在Paint中制作的可怕图像来说明我的问题:
说我有一张地图区域.每个点代表一个商店.每个方块代表一个社区.voronoi图显示了最接近每个商店的区域.
如果其中一个区域占据了一个广场,那么整个广场都属于那个商店.
是否有可能确定哪个方块属于哪个商店,而无需计算中间voronoi图?似乎,因为这就像voronoi图的非常粗略的近似,应该有一个超快的快捷方式来生成它.
我已经完成了以下代码,但我找不到有什么问题.该函数getsxnremem()使用字符串获取字符串,len使用fgets()空终止符覆盖换行符(如果有的话),然后重新调整内存大小以适应字符串.无论如何,这是个主意.
以下代码有时会起作用,有时会崩溃.我过去经常发生这种情况,我经常发现问题,但这次我花了太长时间.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned getsxnremem(char **str, unsigned len){
unsigned l, flag = 1;
free(*str);
char *buff;
if ((*str = malloc(len)) == NULL) return 0;
if(fgets(*str, len, stdin) == NULL) { free(*str); return 0; }
l = strlen(*str);
if (l && ((*str)[l-1] == '\n')) { *(str)[l-1] = '\0'; flag = 0; }
if ((buff = realloc(*str, l + flag)) == NULL){ free(*str); return 0; }
*str = buff;
return (l …Run Code Online (Sandbox Code Playgroud) 我有一个类似的问题,询问什么语言最适合这项任务,而Perl就是答案.但我仍然很好奇如何解决这个问题.
我想给这个程序一个大文本文件,里面装满了从小说,报纸,网页上摘取的德文文本样本.我想要一个文本文件中所有单词的频率列表,按最常见的单词排序.我需要列出3000个最常见的德语单词.
如果这只是一个ASCII问题,那么这对我来说就是孩子的游戏.在整个早上读完Unicode之后,我真的很惊讶雷区是什么.
怎么在C中完成?
我有一个朋友在Python中放了一些东西,但他仍然是初学者,他的代码在1.4 MB文本文件上花了大约30分钟.
这是我发生的事情的一个例子.第一段代码不起作用.
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
inventory[0] = &thing; // Fail.
int main(void){
// Code goes here.
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码将起作用.
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
int main(void){
inventory[0] = &thing; // Works.
}
Run Code Online (Sandbox Code Playgroud)
我知道我不能在函数之外调用函数,但我可以在函数之外分配全局变量.这看起来像是一项任务.那么为什么它不起作用呢?
编辑:当我点击"发布"时,我想我意识到了答案.您可以在函数外部的声明中指定值,但前提是它只是声明.这就是答案,不是吗?
当我在 TMUX 窗格内打开 vim 时,该窗格充满了我无法识别的代码。如果我只运行 vim,我会得到:
^[[38;2;165;42;42m 1
^[[38;2;0;0;255m~
Run Code Online (Sandbox Code Playgroud)
如果我用 vim 打开文件,我会得到类似这样的信息(顶部窗格):

对于 vim 和 TMUX 来说都是新事物。我该如何解决这个问题?