Karim Belabas on Thu, 30 Sep 2004 15:47:05 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: sorting problems |
* John Cremona [2004-09-30 11:01]: > I'm having trouble searching for an element in a (sorted) vector/list of > positive integers in GP. Using vecsort I can sort the vector and keep > the associated permutation; but the only searching function is > setsearch() which requires the list to be a set. It converts the object > being searched for into a string but not the list itself. If you > convert the list into a set then another permutation is applied (since > lexicographical order is not the same as numerical order!) but not > recorded... > > trivial example: 3<12 but "12"<"3" : > > (09:32) gp > a=[12,3] > %122 = [12, 3] > (09:40) gp > ia=vecsort(a,,1) > %123 = [2, 1] > (09:40) gp > sa=vecextract(a,ia) > %125 = [3, 12] > (09:41) gp > setsearch(sa,12) > %126 = 0 > (09:41) gp > setsearch(Set(sa),12) > %127 = 1 > (09:41) gp > Set(sa) > %128 = ["12", "3"] > (09:41) gp > setsearch(Set(sa),3) > %130 = 2 > > All I need in the end is: given a (large) vector [x_1,x_2,...,x_n] of > (unsorted) integers, I want to be able to ask of any integer x if x=x_i > for some i and of so which....surely a common task! You may build your list using a combination of setsearch / listinsert: \\ to insert an object x in list L: x = Str(x); j = setsearch(L, x, 1); if (!j, listinsert(L, x)); Or something like this (untested). Karim. -- Karim Belabas Tel: (+33) (0)1 69 15 57 48 Dep. de Mathematiques, Bat. 425 Fax: (+33) (0)1 69 15 60 19 Universite Paris-Sud http://www.math.u-psud.fr/~belabas/ F-91405 Orsay (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]