Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #29759
| Newsgroups | comp.lang.javascript |
|---|---|
| Date | 2016-03-02 01:42 -0800 |
| References | <6ed0a1f8-d173-4de6-aff6-3590b34072d4@googlegroups.com> <65c8fd95-aefc-452e-ba2b-c4a94b1e7e1d@googlegroups.com> <87si0ajtuk.fsf@bsb.me.uk> |
| Message-ID | <ffb4af7a-98b4-4552-b607-39d47d3be797@googlegroups.com> (permalink) |
| Subject | Re: Condition fullfilled to early "sometimes" |
| From | jonas.thornvall@gmail.com |
Den tisdag 1 mars 2016 kl. 12:55:22 UTC+1 skrev Ben Bacarisse:
> jonas.thornvall@gmail.com writes:
>
> > Den tisdag 1 mars 2016 kl. 06:31:39 UTC+1 skrev jonas.t...@gmail.com:
> >> I've been looking at the code for two days so i am a bit crosseyed.
> >> If anyone could help me set the condition so the loop catch the last
> >> pair/pairs, it is kind of weird that it succeed sometimes and break
> >> to early and report fail others.
> >>
> >> I would be very greatful if anyone can see why it break to early
> >> when return fail. Although a succes of uniform network is possible.
> >>
> >> It is a minor bug due to some condition that i just not get.
>
> How do you know it's minor?
>
> >> http://jt.node365.se/mydebug1.html
> >
> > The program creates search for uniform networks, that is x nodes each
> > with y links. Only a subset of permutations possible "easiest found
> > out with pen and paper". So to the left is the node and to the right
> > the nodes it links to.
>
> If you'd like to learn about this topic, the words to search for are
> "regular graphs with degree y". Even more specifically I suspect you want to
> generate connected regular graphs with some known degree.
>
> <snip>
> > And here is the actual function doing it.
> >
> > function createLinks()
> > {
> > var i = 0;
> > var j = 0;
> >
> > while(i < nodes)
> > {
> > // This see so that links already generated accounted for if one link than j
> > j = arr[i].nodelinks.length;
> > stupid = nodes - 1;
>
> More "global" variables. Why give yourself the trouble? What's so hard
> about a var or a let?
>
> > temparr = new Array();
> > while(j < links)
> > {
> > dublett = false;
> > // Onlygenerate random values bigger than "i" else all links exhausted
> > if(i == 0)
> > {
> > aLink = Math.floor(Math.random() * (nodes - 1));
> > aLink ++ ;
> > }
> > else
> > {
> > aLink = Math.floor(Math.random() * (stupid - i)) + i + 1;
> > }
>
> That "if" and the variable "stupid" are pointless. Just write
>
> Math.floor(Math.random() * (nodes - 1 - i)) + i + 1;
>
> But this can be simplified too, especially if you consider the next line:
>
> > if (aLink == nodes)aLink -- ;
>
> which suggests the random selection of aLink is not being done
> correctly. "Fixing" a previous mistake like this is not a good
> idea. For one thing it will skew your random samples.
>
> > if (temparr[0] == null)
> > {
> > temparr[0] = aLink;
> > }
> > for(k = 0; k < arr[i].nodelinks.length; k ++ )
> > {
> > if(aLink == arr[i].nodelinks[k])
> > {
> > dublett = true;
> > }
> > }
> > inmylist = false;
> > var t = 0;
> > for(var m = 0; m < temparr.length; m ++ )
> > {
> > if(temparr[m] == aLink)
> > {
> > inmylist = true;
> > }
> > }
> > if (inmylist == false)
> > {
> > temparr[temparr.length] = aLink;
> >
> > }
> > else
> > {
> > inmylist = false
> > }
> > scope = (nodes - 1) - i;
> > if (temparr.length >= scope)
> > {
> > myboolean = false;
> > return myboolean;
> > }
> >
> > if(dublett == false && arr[aLink].nroflinks < links)
> > {
> > arr[i].nodelinks[arr[i].nodelinks.length] = aLink;
> > arr[aLink].nodelinks[arr[aLink].nodelinks.length] = i;
> > arr[i].nroflinks ++ ;
> > arr[aLink].nroflinks ++ ;
> > j ++ ;
>
> Arrays support push(). And I think the only reason you need the object
> to track the number of links is because you are using globals and don't
> know how to empty the array between executions of this function.
>
> > }
> > }
> > i ++ ;
> > }
> > myboolean = true;
> > return myboolean;
> > }
>
> --
> Ben.
http://jt.node365.se/mydebug3.html
I think this is quite good and i did a speed improvement.
More suggestions.
<HTML><BODY onLoad=init();>
<form name="network" onsubmit="init(); return false;" onSubmit>
Links:<input name="linkval" value="3" size="7" type="text"><br>
Multiple:<input name="lmult" value="3" size="3" type="text"><br>
Nodes: <input name="nodeval" value="" size="5" type="text" disabled><br>
<input type=submit name="network" value="NEW NETWORK"><br>
<textarea name="output" rows="100" cols="60"></textarea>
</form>
</BODY></HTML>
<script type="text/javascript">
function init()
{
links = document.network.linkval.value * 1;
multiple = document.network.lmult.value * 1;
nodes = (links * multiple) + 1;
document.network.nodeval.value = nodes;
arr = new Array();
myboolean = false;
// while(myboolean == false)
// {
createarr();
myboolean = createLinks();
// }
for (var z = 0; z < nodes; z ++ )
{
document.network.output.value += z + "'st NODE Links-> "+arr[z].nodelinks+"\n";
}
}
function createarr()
{
for(k = 0; k < nodes; k ++ )
{
arr[k] =
{
nodelinks : [], nroflinks : 0
}
;
}
}
function createLinks()
{
document.network.output.value = "";
var i = 0;
var j = 0;
var newnode = false;
// document.network.output.value += "[***START NODE***->0 \n";
while(i < nodes - 1)
{
// if(i < nodes - 1) document.network.output.value += "LINKS TO NODE -> " + arr[i].nodelinks + "\n\n";
j = arr[i].nodelinks.length;
temparr = new Array();
while(j < links)
{
dublett = false;
// Only have to generate random values that is bigger than "i" otherwise node full / exhausted
aLink = Math.floor(Math.random() * (nodes - 1 - i)) + i + 1;
if (temparr[0] == null)
{
temparr[0] = aLink;
}
for(k = 0; k < arr[i].nodelinks.length; k ++ )
{
if(aLink == arr[i].nodelinks[k])
{
dublett = true;
}
}
// document.network.output.value += i + "]" + " Linked-->" + aLink + " " + dublett + "\n";
if(dublett == false && arr[aLink].nodelinks.length < links)
{
// document.network.output.value += "[ADDED LINK] " + aLink + "\n\n";
arr[i].nodelinks[arr[i].nodelinks.length] = aLink;
arr[aLink].nodelinks[arr[aLink].nodelinks.length] = i;
j ++ ;
newnode = true;
}
if (newnode == false)
{
inmylist = false;
for(var m = 0; m < temparr.length; m ++ )
{
if(temparr[m] == aLink)
{
inmylist = true;
// document.network.output.value += inmylist + "Nothing added to list [" + temparr + "\n";
}
}
if (inmylist == false)
{
temparr[temparr.length] = aLink;
// document.network.output.value += "Added to mylist" + temparr + "\n";
}
scope = (nodes - 1) - i;
// document.network.output.value += "Break if TRUE " + temparr.length + ">=" + scope + "\n";
if (temparr.length == scope)
{
document.network.output.value += "Hurray **failed** generate regular graph \n";
myboolean = false;
return myboolean;
}
}
newnode = false;
}
// document.network.output.value += "***FINISHED NODE*** " + i + " Links =" + arr[i].nodelinks + "\n\n";
i ++ ;
// document.network.output.value += "[***START NODE***-> " + i + " ";
}
if(arr[i].nodelinks.length < links)
{
document.network.output.value += "Hurray **failed** generate regular graph \n";
myboolean = false;
return myboolean;
}
else
{
document.network.output.value += "Hurray **succeded** to generate network!!!\n";
myboolean = true;
return myboolean;
}
}
</script>
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-02-29 21:31 -0800
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-01 01:03 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-01 11:55 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-01 05:28 -0800
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-01 07:49 -0800
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-01 23:24 -0800
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 00:41 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-02 10:43 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 02:57 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-02 11:08 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 05:53 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-02 16:27 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 09:25 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-02 20:22 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 02:59 -0800
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 03:10 -0800
Re: Condition fullfilled to early "sometimes" Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-03-02 12:41 +0000
Re: Condition fullfilled to early "sometimes" jonas.thornvall@gmail.com - 2016-03-02 01:42 -0800
Re: Condition fullfilled to early "sometimes" John Harris <niam@jghnorth.org.uk.invalid> - 2016-03-01 10:47 +0000
csiph-web