F is faster than f, for me:

   F=: < (~.m) {~ ((}.m) {./. l)&I.

Note that this assumes that m and l are in sorted order and that pip
'0.0.0.0' is not the second element of m (but I think the code already
makes these assumptions).

And G is faster than F, for me:

   G=: 2 | (,(~.}.m) ,.~ (}.m) {./. l) I. ]

   (f -: F) ips
1
   (f -: G) ips
1

-- 
Raul

On Wed, Dec 14, 2011 at 5:14 AM, Alexander Epifanov <[email protected]> wrote:
> Hello again,
> Here my optimized version with ints, its 1.5 faster then float solution.
> http://dl.dropbox.com/u/34917039/ip.j
>
> The main thing: it is much faster than K!
>
> Could you let me know, is it possible to optimize time of "f" function?
> I tryed to represent IP like 4 ints: 192 168 1 1, but this solution
> works much slower.
>
> ips.txt: file with ip addresses
> ipr.txt: file with ip ranges: ip,ip
>
> And the other thing I cannot understand:
>   5?5
> 4 1 0 2 3
>   10?5
> |domain error
> |   10    ?5
> ???
>
> Thank you,
>
> On Fri, Dec 9, 2011 at 10:53 PM, Alexander Epifanov <[email protected]> wrote:
>> Hello,
>>
>> On Fri, Dec 9, 2011 at 3:11 PM, Raul Miller <[email protected]> wrote:
>>> On Fri, Dec 9, 2011 at 7:50 AM, Alexander Epifanov <[email protected]>wrote:
>>>
>>>> Hello,
>>>>
>>>> I made my first application on J.
>>>> I was surprised that it works faster than K:
>>>>
>>>> pip =: 256 #. x:@:".;._2@:,&'.'
>>>> ips =: pip"1 (_1&}.;._2 (1!:1<'ips.txt'))
>>>> iprs =: |:pip;._1 "1 (','&,)"1 (_1&}.;._2 (1!:1<'ipr.txt'))
>>>> i =: /:{.iprs
>>>> l =: i{{.iprs
>>>> r =: i{{:iprs
>>>> m =: 0,(>./ @: {.&r)"0 (1+i.#l)
>>>> f =: <: m {~ I.~&l
>>>> 6!:2 'f"1 ips'
>>>>
>>>> But I suppose that it could be better:
>>>> 1) It uses x:, but IP address could fill int, I found that J does not
>>>> support unsigned int (K also).
>>>> But unfortunately, I cannot find the way in J how to convert 4 numbers
>>>> into signed int i J.
>>>>
>>>
>>> Why are you concerned about data representation type?  This works fine:
>>>
>>>   pip =: 256 #. ".;._2@:,&'.'
>>>
>>>
>> Yes, it works, but 3!:0 pip'192.168.1.1' - float, But I suppose that
>> int would be faster, I would like to compare.
>>
>>>>
>>>> 2) How is it possible to change m =: 0,(>./ @: {.&r)"0 (1+i.#l)
>>>> without right brackets? I expected something like ... "0 @: 1 + i.#l,
>>>> but it does not work. I think that "0 +&1 i.#l is not best solution.
>>>>
>>>
>>> I do not have any ipr.txt so I do not know what domain m is intended for.
>>>  I could guess, but right now I do not understand your question.
>>>
>>>
>>>> 3) ips =: pip"1 (_1&}.;._2 (1!:1<'ips.txt')) is very slow, in pip
>>>> function, is it possible to make it faster?
>>>>
>>>
>>> Getting rid of x: should make pip faster.  I also suspect you want
>>> something like this:
>>>
>>>   ips=: pip;._2 (1!:1 <'ips.txt') -. CR
>> Thanks! it works twice faster.
>>>
>>> Or:
>>>
>>>   ips=: 256 #. 0&".;._2 ' ' (I.@e.&('.',CR)@])} 1!:1<'ips.txt'
>>>
>>>
>>>> 4) I cannot find in VOC is I. binary search or something like that?
>>>>
>>>
>>> Typically, yes.
>>>
>>> --
>>> Raul
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>>
>>
>> --
>> Regards,
>>   Alexander.
>
>
>
> --
> Regards,
>   Alexander.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to