- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个需要枚举算法的程序,我是这样工作的:
#include <stdio.h>
void show (int subs[], int k) {
int i;
for (i=1; i<=k; i++)
printf("%i ", subs[i]);
puts("");
}
void enumerate (int n) {
int subs[n+1], k = 0;
*subs = 0;
while (1) {
if (subs[k] < n) {
subs[k+1] = subs[k] + 1;
k++;
} else {
subs[k-1] += 1;
k--;
}
if (k == 0) break;
show (subs, k);
}
}
int main(void) {
enumerate(4);
return 0;
}
它应该是 O(2N) 调用 show(subs, k)
。最初,我认为这不会有任何问题,但我错了。实际上我的程序需要:
2 secs for n=25
4 secs for n=26
9 secs for n=27
18 secs for n=28
...
如您所见,它的时间增长得非常快。我的程序也进行了快速排序,而不是 show
,它根据我的逻辑调用了另一个函数,但这并不重要。
但由于我必须更快地完成,我开始分析我的问题...
我说过,如果在序列 1 2 4 5
(范围长度为 4)中找到我想要的解决方案,则范围长度小于该值的所有序列对我的逻辑来说都是毫无值(value)的。
然后,我尝试编写上面显示的 enumerate
函数,使范围更大的序列首先出现,因为如果我得到这个,我可以在找到时简单地破坏 enumerate 函数所需的值。
但经过大约两个小时的努力,我发现自己有 4 个内循环 (!!) 并且顺序错误。
各位忍者能帮帮我吗?提前致谢。
如果你运行 enumerate(3)
你会得到:
1
1 2
1 2 3
1 3
2
2 3
3
我想要的,首先是更大的射程长度,所以:
1 2 3
1 2
1 3
2 3
1
2
3
最佳答案
首先,输出的大小像 2<sup>n</sup>
一样增长, 不是 n<sup>2</sup>
.因此你的表现问题。重新排序可能会有所帮助,但重新思考您的算法可能会有更多帮助。
但话虽如此,这里有一个解决方案:
#include <stdio.h>
void show (int subs[], int k) {
int i;
for (i=1; i<=k; i++)
printf("%i ", subs[i]);
puts("");
}
void enumerate (int n) {
int subs[n+1], k = n, l = 0;
*subs = 0;
// Populate subs with longest possible sequence.
for (int i = 0; i < n + 1; i++) {
subs[i] = i;
}
while (0 < k) {
show(subs, k);
// Find first increasible spot
l = 0;
for (int i = k; 0 < i; i--) {
if (subs[i] + k - i < n) {
l = i;
break;
}
}
if (0 < l) {
// Create our increasing sequence
subs[l]++;
for (int i = l+1; i <= n; i++) {
subs[i] = subs[i-1] + 1;
}
}
else {
// Make k shorter and reset the sequence.
k = k-1;
for (int i = 0; i < n + 1; i++) {
subs[i] = i;
}
}
}
}
int main(void) {
enumerate(4);
return 0;
}
关于更改枚举算法以首先显示更大的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008958/
我正在 Java 上开发 Tic Tac Toe 游戏(eclipse)。在我的计算机上,我的对话框非常小。我一直在努力把它做得更大。我没有任何运气。我希望这里有人能引导我走向正确的方向。下面的代码是
出于辅助功能的目的,我需要使所有可滚动控件(列表、 ListView )的滚动条更宽,滚动条箭头更大。 如何从可滚动控件(例如:TListView)获取滚动条( handle )? 如何使滚动条和箭头
在我的 flutter 应用程序中,我想制作一个圆圈作为这样的背景: 最佳答案 问题主要是当屏幕处于横向时,除非它覆盖整个屏幕,否则你不能在那里放置一个圆圈。 ClipRect 还有另一种方法,如果这
如何在列表中找到最接近的值,这将返回更高的值?示例:[3,7,12,19] 的列表,如果我的值为 8,我如何获得最接近(更大)的值 12?我想要 dart 中的这个逻辑。 最佳答案 只需过滤 List
我是一个绝对的 HTML 和 javascript 初学者,我很确定,这真的很容易实现。我生成了以下 IFRAME: document.write("");Das aktuelle Wetter in
我有点知道为什么压缩 DES 文件时它更大,但谁能给我正确的理由或链接,我似乎找不到任何原因? 谢谢:) 最佳答案 经过适当加密的密文在压缩程序看来非常像一系列随机数。如果没有以明文形式出现的模式,压
假设我有两个表,其中一个(我们称之为 person)有一个名为 type 的字段,该字段存储链接到另一个表的整数(我们称之为types 带有一个名为 id 的字段。什么会更能提高性能? 一个更大的查询
我有一个ListView,它使用GridView来显示DataTable,并且当新行添加到DataTable
我在只出现在 Firefox 中的导航菜单上遇到了一个奇怪的问题(在 IE7、8、9、10 和 Chrome 中工作正常)。菜单上的链接显示为 block ,但它们在 Firefox 中计算得比任何其
我正在使用 javax.mail 并获取邮件收件箱文件夹中的邮件计数。使用https://outlook.office.com/ Folder folderInbox = store.getFolde
我想让地球字形图标更大,以便它覆盖页面的大部分(它是矢量图像)。它不在按钮或任何东西中;它只是一个人。有没有办法做到这一点? 最佳答案 增加 glyphicon 的 font-size
我定制了一个看起来像这样的搜索栏 问题是很难捕获 slider 。所以我想做的是增加拇指的碰撞箱以使其更容易。我尝试了一些东西,但总是弄乱了搜索栏的外观。我有什么想法可以做到这一点吗? 布局.xml
我有一个问题:下载到 Documents 文件夹中的音乐比以前长 2 倍,而且体积更大。比特率也有问题(增加/减少 2 倍)。图片保存得很好,但任何音乐都有问题。也许我需要手动设置音频比特率,但我还没
为什么 div 区域仍然比图像 css 大? /image/WHDU3.jpg 如何设置 div 区域以适合图像? 最佳答案 IMG - 是行内元素,因此
我发现在对文本文件进行排序时非常困惑。不同的算法/应用程序会产生不同的结果,例如,比较两个字符串 str1=";P" 和 str2="-_-" 仅供引用,这里给出了这些字符串中每个字符的 ASCII:
我有一个应用程序已经在 Play 商店中存在多年,我刚刚构建了一个更新。该更新利用了 numberpicker,它的 min-sdk 为 11,并且在 v4 支持库中不适用。我倾向于发布我的新版本并在
你能告诉我如何强制 CSS 使 line-through 属性比元素 width 宽吗? 例如 50 结果看起来像现在如何使线条比元素更宽更明显? 赞 最佳答案 你可以使用 ,这是一种很俗气的方式 &
我想制作一个比应有的大得多的虚拟 Win32 EXE 文件。所以默认情况下,样板 Win32 EXE 文件为 80 KB。我想要一个 5 MB 的空间来测试其他一些实用程序。 第一个想法是添加资源,但
我有一个 UIView,里面有一个更大的 UIImageView。有没有办法隐藏超出 View 大小的内容? CGRect baseFrame = CGRectMake(100, 100, 300,
当我改变缓冲区的大小时,我得到了无法从 BufferedReader 解释的奇怪结果。 我曾强烈期望性能会随着缓冲区大小的增加而逐渐增加, yield 递减设置相当快,此后性能或多或少会持平。但看起来
我是一名优秀的程序员,十分优秀!