我很快就会遇到一个有趣的问题,我已经开始考虑算法。我想得越多,我就越害怕,因为我认为它会扩展得非常可怕 (O(n^4)),除非我变得聪明。我很难在这件事上变得聪明。这是问题的简化描述。
我有 N 个多边形(其中 N 可以是巨大的 >10,000,000),它们存储为 M 个顶点的列表(其中 M 的数量级为 100)。我需要做的是为每个多边形创建一个在其他多边形之间共享的任何顶点的列表(将多边形视为感兴趣的周围区域,有时是区域但彼此相对)。我看到这样的东西
Polygon i | Vertex | Polygon j | Vertex
1 1 2 2
1 2 2 3
1 5 3 1
1 6 3 2
1 7 3 3
Run Code Online (Sandbox Code Playgroud)
这意味着多边形 1 中的顶点 1 与多边形 2 中的顶点 2 相同,多边形 1 中的顶点 2 与多边形 2 中的顶点 3 相同。同样,多边形 1 中的顶点 5 与多边形中的顶点 1 相同3....
为简单起见,我们可以假设多边形从不重叠,它们最接近的是在边缘处接触,并且所有顶点都是整数(以使相等性易于测试)。
我现在唯一能做的就是对于每个多边形,我必须遍历所有多边形和顶点,给我一个 O(N^2*M^2) 的缩放比例,这在我的情况下会非常糟糕。我可以拥有非常大的多边形文件,因此我什至无法将其全部存储在 RAM 中,因此这意味着要多次读取该文件。
到目前为止,这是我的伪代码
for i=1 to N
Pi=Polygon(i)
for j = …Run Code Online (Sandbox Code Playgroud) 我有一个C++静态库,支持x32和x64平台.
我的问题是:我应该根据哪个平台命名.lib文件?
即MyLib32.lib vs MyLib64.lib
英特尔Math库和TBB使用文件夹名称来处理此问题,以区分2个库.
即x32\Math.lib vs x64\Math.lib
有没有比其他更好的方式?
我认为明确命名lib以对应于预期的平台应该更好?这样我们就不依赖于文件夹名称而且lib是自我记录的.
这是从UserVoice剪下的代码,以便将他们的标签粘贴在我的网站上(这不是特定于UserVoice,但是,我一直看到这种事情):
<script type="text/javascript">
var uservoiceJsHost = ("https:" == document.location.protocol) ? "https://uservoice.com" : "http://cdn.uservoice.com";
document.write(unescape("%3Cscript src='" + uservoiceJsHost + "/javascripts/widgets/tab.js' type='text/javascript'%3E%3C/script%3E"))
</script>
<script type="text/javascript">
UserVoice.Tab.show({
key: 'wikipediamaze',
host: 'wikipediamaze.uservoice.com',
forum: 'general',
alignment: 'right', /* 'left', 'right' */
background_color: '#94C97B',
text_color: 'white', /* 'white', 'black' */
hover_color: '#7AA1C5',
lang: 'en' /* 'en', 'de', 'nl', 'es', 'fr' */
})
</script>
Run Code Online (Sandbox Code Playgroud)
如何将这些都塞进一个脚本标签并放入一个单独的文件?任何时候我尝试这样做,它都行不通.谷歌广告做同样的事情.为什么有2个单独的脚本声明?
为什么最优先级/堆队列实现为0是最高优先级?我假设我错过了一些关键的数学原理.当我最近实现自己的优先级队列时,如果优先级随着整数值的增加而编写插入函数似乎更容易,但显然比我聪明的人认为应该采用另一种方式.
有任何想法吗?
我在16位显示器上有一系列原始rgb数据,尺寸为320*480.阵列大小为320*480*4 = 6144000.
我想知道如何在不降低图像质量的情况下缩小(80*120)?
我找到了关于在2D数组中缩放图像的链接,但是如何将其应用于我的16位显示数组呢?它不是2D数组(因为它有16位颜色).
谢谢.
好的,我让DataContractSerializer使用我的对象图.有关更多信息,请参阅我之前的问题
但是,我的一个字段_UserPropertyDefinitions的定义如下所示.它定义了此用户可以添加到数据结构中的对象的自定义属性列表.字符串是标识属性的唯一键,Type是属性的类型,它始终是一个主要类型,如Bool,Int,String等.
每个对象都有一个对应的Dictionary(String key,Object value)集合,用于存储为任何"用户属性"设置的值.
[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;
Run Code Online (Sandbox Code Playgroud)
当此属性为空集合时,我的对象图序列化很好,但是当我向此集合添加自定义属性时,在尝试使用DataContractSerializer进行序列化时会出现以下异常.
输入数据合约名称为'RuntimeType:http://schemas.datacontract.org/2004/07/System '的'System.RuntimeType' 不是预期的.将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.
如果我删除此字段的DataMember属性,我可以序列化/反序列化而不会获得异常,但当然我放弃了我在此字段中创建的设置.
如何在MS Access VBA中的单独线程上创建运行的进程?我想创建一个只会等待消息的进程.
我有一个问题,这很可能是一个简单的问题,但对我来说,问题仍然存在问题.我在Win32/C++中使用Listbox,当从列表框中获取所选文本时,返回的字符串只是垃圾.它是结构或类似的句柄?
下面是代码和我得到的一个例子.
std::string Listbox::GetSelected() {
int index = -1;
int count = 0;
count = SendMessage(control, LB_GETSELCOUNT, 0, 0);
if(count > 0) {
index = SendMessage(control, LB_GETSEL, 0, 0);
}
return GetString(index);
}
std::string Listbox::GetString(int index) {
int count = 0;
int length = 0;
char * text;
if(index >= 0) {
count = GetItemCount();
if(index < count) {
length = SendMessage(control, LB_GETTEXTLEN, (WPARAM)index, 0);
text = new char[length + 1];
SendMessage(control, LB_GETTEXT, (WPARAM)index, (LPARAM)text);
}
}
std::string s(text);
delete[] …Run Code Online (Sandbox Code Playgroud) 我想出了如何启动一个过程.但我现在的问题是控制台窗口(在这种情况下是7z)弹出最前面阻挡我的视线并移除我的焦点打断我的句子或每隔几秒钟做一次.它非常烦人,我如何防止这种情况发生.我认为CreateNoWindow解决了这个问题,但它没有.
注意:有时控制台需要用户输入(替换文件或不替换).所以完全隐藏它可能是个问题.
这是我目前的代码.
void doSomething(...)
{
myProcess.StartInfo.FileName = ...;
myProcess.StartInfo.Arguments = ...;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
myProcess.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以让DataContractSerializer吐出格式化的XML而不是一个长字符串?我不想以任何方式更改标签或内容,只是让它添加换行符和缩进以使XML更具可读性?
<tagA>
<tagB>This is</tagB>
<tagC>Much</tagC>
<tagD>
<tagE>easier to read</tagE>
</tagD>
</tagA>
<tagA><tagB>This is</tagB><tagC>Much</tagC><tagD><tagE>harder to read</tagE></tagD></tagA>
Run Code Online (Sandbox Code Playgroud)