我目前正在编写一个程序,需要比较可变大小的ArrayList中的每个文件.现在,我这样做的方式是通过嵌套的代码循环:
if(tempList.size()>1){
for(int i=0;i<=tempList.size()-1;i++)
//Nested loops. I should feel dirty?
for(int j=i+1;j<=tempList.size()-1;j++){
//*Gets sorted.
System.out.println(checkBytes(tempList.get(i), tempList.get(j)));
}
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些关于嵌套循环必要性的不同意见,我想知道是否有人有更高效的替代方案.
乍看之下,无论哪种方式都需要进行每次比较,因此性能应该相当稳定,但我还是有点确信有一种更清洁的方法可以做到这一点.有什么指针吗?
编辑::为清晰起见,这只是功能的一部分.这些文件已根据长度进行比较并放入存储桶中 - 在浏览完集合的映射后,找到一个长度大于1的存储桶,它会运行它.所以 - 这些都是相同大小的文件.在我得到字节之前,我将进行校验和比较,但是现在我只是想清理循环.
此外,圣母这个网站反应迅速.多谢你们.
EDIT2 ::对不起,为了进一步说明:文件处理部分我有一个很好的把握,我认为 - 首先,我按长度进行比较和排序,然后通过校验和,然后按字节 - 我的问题是如何正确处理需要有效地比较ArrayList中的所有文件,假设它们都需要进行比较.如果一个嵌套循环就足够了,那很酷,我只想检查这是一个合适的方法,按惯例.
我是Python的初学者,尝试过几个程序.我有类似Python中的以下WHILE循环结构(不完全相同).
IDLE 2.6.4
>>> a=0
>>> b=0
>>> while a < 4:
a=a+1
while b < 4:
b=b+1
print a, b
1 1
1 2
1 3
1 4
Run Code Online (Sandbox Code Playgroud)
我期待外循环遍历1,2,3和4.我知道我可以用这样的FOR循环来做这个
>>> for a in range(1,5):
for b in range(1,5):
print a,b
1 1
1 2
.. ..
.. .. // Other lines omitted for brevity
4 4
Run Code Online (Sandbox Code Playgroud)
但是,WHILE循环有什么问题?我想我错过了一些显而易见的事情,但无法理解.
答案: 纠正的WHILE循环..
>>> a=0
>>> b=0
>>> while a < 4:
a=a+1
b=0
while b<4:
b=b+1
print a,b
1 1
.. .. …Run Code Online (Sandbox Code Playgroud) 我记得变量是Javascript中的函数作用域.但是,如果我在循环中重新定义局部变量,行为如何.一个常见的用例是嵌套循环.在下面的代码中,如果我将j更改为i,则外部for循环在一次迭代后终止,因为外部作用域中的i值与内部for循环相同.由于我使用var,我期待(类似于其他语言)它在内部fo循环中被重新定义.这是否意味着在JS中,没有办法在函数范围内重新声明和使用局部变量.
for (var i = 0, len = x.length; i < len; i++) {
...
for (var j = 0, len = y.length; j < len; j++) {
...
}
}
Run Code Online (Sandbox Code Playgroud) 我想查看按部门分组的一些联系信息(姓名,电子邮件,...),但我无法通过Handlebars实现.
X部门
Y部门
我不知道我提前有多少个部门.因此,在我的控制器中,我尝试在Ember.Map中加载信息,其中部门是其键,而带有联系人信息的数组是每个部门的值.它是这样的:
map = Ember.Map.create();
// Load data from server into map
// m = {'Department X': [{name:'x1','email':'emailx1',...},{...}], 'Department Y':[....], ...}
{{#each department in map}}
{{department}}
{{#each contact in map.keys}}
{{contact.name}} | {{contact.email}}
{{#each}}
{{#each}}
Run Code Online (Sandbox Code Playgroud)
抛出一个错误,说"EmberCollectionView的内容必须实现Ember.Array.你传递了[object Object]".是否可以通过嵌套数据实现suh任务?欢迎任何帮助.谢谢.
for(i=0; i<n; i++)
{
a[i]=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
a=3;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个三重嵌套循环.我的书指出运行时间是:O(N)+ O(N ^ 2)= O(N ^ 2)
不应该是O(N ^ 3)?所有3个循环都相互依赖.它将运行N*N*N次.
我是java的新手,所以在嵌套循环中有一段代码我不明白...
for(int i=0; i<3; i++){
for(int j=1; j<3; j++){
System.out.println(i + "" + j);
}
}
Run Code Online (Sandbox Code Playgroud)
它将运行: 01,02,11,12,21,22
但是当我改变这个:
int j=1;
for(int i=0; i<3; i++){
for(; j<3; j++){
System.out.println(i + "" + j);
}
}
Run Code Online (Sandbox Code Playgroud)
它变成这样: 01,02
任何人都可以向我解释一下吗?
我正在尝试编写一个嵌套循环代码来模拟具有 101 行的数据框中的 10 列数据。第一行数据已被指定为起始值。每列应该不同,因为我的矩阵 r 是从随机法线生成的;但是,每列中的结果值完全相同。为循环索引提供一些上下文:
tmax=100; ncol(pop_sims) = 12 (so a total of 10 iterations, 3-12); ncol(r) = 10
for (i in 1:tmax){
for (j in 3:ncol(pop_sims)){
for(k in 1:ncol(r)){
if (pop_sims[i,j]*exp(r[i,k]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(r[i,k])}
}}}
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激。
更新:我没有使用多个循环,而是省略了矩阵 r 的使用并简化了我的循环。
for (i in 1:tmax){
for (j in 1:10){
if (pop_sims[i,j]*exp(r[i,j]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(rnorm(1,mean=0.02, sd=0.1))}
}}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试解决ProjectEuler问题,除了速度之外,我已经解决了所有问题.我几乎可以肯定程序执行速度这么慢的原因是由于嵌套循环.我会喜欢一些关于如何提高速度的建议.我是一名新手程序员,所以我不熟悉很多更高级的方法/主题.
public class Problem12 {
public static void main(String[] args) {
int num;
for (int i = 1; i < 15000; i++) {
num = i * (i + 1) / 2;
int counter = 0;
for (int x = 1; x <= num; x++) {
if (num % x == 0) {
counter++;
}
}
System.out.println("[" + i + "] - " + num + " is divisible by " + counter + " numbers."); …Run Code Online (Sandbox Code Playgroud) 我正在为此片段找出在big-O方面的一个紧要关头:
for(int i = 1 ; i <= n ; i++) {
for(int j = 1; j <= i*i ; j++) {
if (j% i == 0){
for(int k = 0 ; k<j ; k++ )
sum++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们从最内层循环开始,在最坏的情况下它将运行k = n ^ 2次,占O(N ^ 2)。每次j = m * i时,if语句为true,其中m为任意常数。由于j从1到i ^ 2,这将在m = {1,2,...,i}时发生,这意味着i次为真,并且我最多为n,因此最坏的情况将是是m = {1,2,...,n} = n次。如果i = n,则第二个循环的最坏情况为O(N ^ 2)。外循环的最坏情况复杂度为O(N)。
我认为这将通过以下方式组合:内部循环的O(N ^ 2)*第二循环的O(N ^ 2)*外循环的O(N)在最坏的情况下会产生O( N ^ 5)
但是,if语句保证我们只会到达内循环n次,而不是n ^ 2。但是无论如何,我们仍然需要遍历外部循环n * n ^ 2次。if测试是否会影响代码段的最坏情况下的时间复杂度?
编辑:将j校正为i ^ …
如何输出:
ID: 0001
Name: Mike
Birthday: London 21/05/1989
Hobby: Reading
Run Code Online (Sandbox Code Playgroud)
我的下面的代码是未定义的,我希望数组城市+日期在生日时在一起.
我的代码不是,请查看下面的代码:
var input = [
["0001", "Mike", "London", "21/05/1989", "Reading"],
["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
["0003", "John", "Kansas", "25/12/1965", "Cooking"],
["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
];
var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];
for(var i = 0 ; i <= input.length ; i++){
for(var j = 0 ; j <= input.length ; j++){
for(var i = 0 ; i <= data.length; i++){
console.log(data[i] …Run Code Online (Sandbox Code Playgroud)nested-loops ×10
java ×4
for-loop ×3
loops ×3
javascript ×2
arrays ×1
big-o ×1
c ×1
ember.js ×1
nested ×1
performance ×1
python ×1
r ×1
while-loop ×1