Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #29759

Re: Condition fullfilled to early "sometimes"

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

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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