change some permutation files
This commit is contained in:
+24
-21
@@ -1,35 +1,35 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NAME_TEST=is_good
|
|
||||||
CC=gcc
|
CC=gcc
|
||||||
ROOT_DIR=$(PWD)
|
TOOLDIR=$(PWD)/../ytools_t
|
||||||
INCLUDE_DIR=$(ROOT_DIR)/src
|
|
||||||
CFLAGS=-I$(INCLUDE_DIR) -I../include_ytest/include
|
INCLUDE_DIR=$(TOOLDIR)/src
|
||||||
LDFLAGS=-L$(PWD)/.. -lytest
|
CFLAGS=-I$(INCLUDE_DIR) -I./src
|
||||||
|
|
||||||
#SRC_DIR=$(ROOT_DIR)/src
|
#SRC_DIR=$(ROOT_DIR)/src
|
||||||
#SRC=$(wildcard */*/*.c)
|
#SRC=$(wildcard */*/*.c)
|
||||||
SRC=$(wildcard **/**/*.c)
|
|
||||||
OBJ=$(SRC:.c=.o)
|
|
||||||
#HEADS=$(OBJS:.o=.h)
|
#HEADS=$(OBJS:.o=.h)
|
||||||
TEST_DIR=$(PWD)
|
|
||||||
EXECSRC=$(NAME_TEST).c
|
|
||||||
EXEC=launch_$(NAME_TEST)_m
|
|
||||||
PERMSRC=src/permutation_t/permutation_t.c
|
PERMSRC=src/permutation_t/permutation_t.c
|
||||||
PERMSRC_O=$(PERMSRC:.c=.o)
|
PERMSRC_O=$(PERMSRC:.c=.o)
|
||||||
|
|
||||||
SETTSRC=src/set_theoric_t/set_theoric_t.c
|
SETTSRC=src/set_theoric_t/set_theoric_t.c
|
||||||
SETTSRC_O=$(SETTSRC:.c=.o)
|
SETTSRC_O=$(SETTSRC:.c=.o)
|
||||||
TOOLSRC=../ytools_t/src/tools_t/tools_t.c
|
|
||||||
TOOLSRC_O=$(TOOLSRC:.c=.o)
|
|
||||||
|
|
||||||
LIB_YTEST=$(PWD)/../libytest.so
|
|
||||||
|
|
||||||
all: $(EXEC) $(LIB_YTEST)
|
TOOLSRC_O=$(TOOLDIR)/src/tools_t/tools_t.o
|
||||||
|
#TOOLSRC=$(TOOLDIR)/src/tools_t/tools_t.c
|
||||||
|
#TOOLSRC_O=$(TOOLSRC:.c=.o)
|
||||||
|
|
||||||
|
SRC=$(wildcard **/**/*.c)
|
||||||
|
OBJ=$(SRC:.c=.o) #$(TOOLSRC_O)
|
||||||
|
|
||||||
|
TOPTARGETS := all clean
|
||||||
|
DEP=$(TOOLDIR)
|
||||||
|
|
||||||
|
$(TOPTARGETS): $(DEP)
|
||||||
|
|
||||||
|
all: $(PERMSRC_O)
|
||||||
|
|
||||||
$(EXEC): $(EXECSRC) $(OBJ)
|
|
||||||
$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
|
|
||||||
|
|
||||||
$(PERMSRC_O): $(PERMSRC) $(SETTSRC_O)
|
$(PERMSRC_O): $(PERMSRC) $(SETTSRC_O)
|
||||||
$(CC) -o $@ -c $< $(CFLAGS)
|
$(CC) -o $@ -c $< $(CFLAGS)
|
||||||
@@ -37,8 +37,11 @@ $(PERMSRC_O): $(PERMSRC) $(SETTSRC_O)
|
|||||||
$(SETTSRC_O) : $(SETTSRC) $(TOOLSRC_O)
|
$(SETTSRC_O) : $(SETTSRC) $(TOOLSRC_O)
|
||||||
$(CC) -o $@ -c $< $(CFLAGS)
|
$(CC) -o $@ -c $< $(CFLAGS)
|
||||||
|
|
||||||
$(TOOLSRC_O): $(TOOLSRC)
|
$(DEP):
|
||||||
$(CC) -o $@ -c $< $(CFLAGS)
|
$(MAKE) -C $@ $(MAKECMDGOALS)
|
||||||
|
|
||||||
|
#$(TOOLSRC_O): $(TOOLSRC)
|
||||||
|
# $(CC) -o $@ -c $< $(CFLAGS)
|
||||||
|
|
||||||
.PHONY: clean mrproper
|
.PHONY: clean mrproper
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,130 @@ int sign(long int a){
|
|||||||
return ss;\
|
return ss;\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
|
\
|
||||||
|
/*complexité sz*sz/2 */\
|
||||||
|
size_t TabToPlaceAlgo_##type(const PERMUTATION_##type *p){\
|
||||||
|
size_t sz = p->size;\
|
||||||
|
PERMUTATION_TYPE_SIZE_T *t_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(p);\
|
||||||
|
size_t *tb= t_p->perm;\
|
||||||
|
size_t pl;\
|
||||||
|
size_t* tPlace = calloc(sz,sizeof(size_t));\
|
||||||
|
for (long int i = sz - 1; i >= 0; i--) {\
|
||||||
|
pl = 0;\
|
||||||
|
for (size_t j = i + 1; j < sz; j++) {\
|
||||||
|
if (tb[j] < tb[i]) {\
|
||||||
|
pl++;\
|
||||||
|
}\
|
||||||
|
if (pl == tb[i]) break;\
|
||||||
|
}\
|
||||||
|
tPlace[tb[i]] = pl;\
|
||||||
|
}\
|
||||||
|
size_t q = 0;\
|
||||||
|
for (size_t i = 0; i < sz;i++) {\
|
||||||
|
q = (i + 1) * q + tPlace[i];\
|
||||||
|
}\
|
||||||
|
return q;\
|
||||||
|
}\
|
||||||
|
/*complexité sz*sz/2 */\
|
||||||
|
size_t TabToPlaceOpt1_##type(const PERMUTATION_##type *p){\
|
||||||
|
size_t sz = p->size;\
|
||||||
|
PERMUTATION_TYPE_SIZE_T *t_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(p);\
|
||||||
|
size_t *tb= t_p->perm;\
|
||||||
|
size_t mx;\
|
||||||
|
size_t* tPlace = malloc(sz*sizeof(size_t));\
|
||||||
|
for (long int i = sz - 1; i >= 0; i--) {\
|
||||||
|
if (i == sz - 1) {\
|
||||||
|
mx = tb[i];\
|
||||||
|
tPlace[mx] = 0;\
|
||||||
|
}\
|
||||||
|
else if (mx > tb[i]) {\
|
||||||
|
size_t pli = 0; /* si c est le plus à droite 0 si pas de superieur à lui, on incremente si on trouve plus petit*/\
|
||||||
|
for (size_t j = sz - 1; j > i; j--) {\
|
||||||
|
if (tb[i] > tb[j]) {\
|
||||||
|
pli++;\
|
||||||
|
}\
|
||||||
|
else if (tb[i] == tb[j]) {\
|
||||||
|
PRINT_DEBUG_("%s\n","something wrong here, tb[i]==tb[j]");\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
tPlace[tb[i]] = pli;\
|
||||||
|
}\
|
||||||
|
else if (mx < tb[i]) {\
|
||||||
|
mx = tb[i];\
|
||||||
|
tPlace[mx] = sz - 1 - i;\
|
||||||
|
}\
|
||||||
|
else {\
|
||||||
|
PRINT_DEBUG_("%s\n","something wrong here, tb[i]==mx");\
|
||||||
|
\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
size_t q = 0;\
|
||||||
|
for (long int i = 0; i < sz; i++) {\
|
||||||
|
q = (i + 1) * q + tPlace[i];\
|
||||||
|
}\
|
||||||
|
return q;\
|
||||||
|
}\
|
||||||
|
/* complexité sz*(sz+1)*/\
|
||||||
|
size_t TabToPlaceNotab_##type(const PERMUTATION_##type *p){\
|
||||||
|
size_t sz = p->size;\
|
||||||
|
PERMUTATION_TYPE_SIZE_T *t_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(p);\
|
||||||
|
size_t *tb= t_p->perm;\
|
||||||
|
size_t mx = sz - 1;\
|
||||||
|
size_t q = 0;\
|
||||||
|
size_t pl;\
|
||||||
|
for (long int i = 0; i < sz; i++) {\
|
||||||
|
size_t j;\
|
||||||
|
for (j = 0; j < sz;j++) {\
|
||||||
|
if (tb[j] == i) break;\
|
||||||
|
}\
|
||||||
|
pl = 0;\
|
||||||
|
j++;\
|
||||||
|
for (;j < sz;j++) {\
|
||||||
|
if (tb[j] < i) {\
|
||||||
|
pl++;\
|
||||||
|
}\
|
||||||
|
if (pl == i) break;\
|
||||||
|
}\
|
||||||
|
q = (i + 1) * q + pl;\
|
||||||
|
}\
|
||||||
|
return q;\
|
||||||
|
}\
|
||||||
|
/*complexité sz*sz/2 */\
|
||||||
|
PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\
|
||||||
|
size_t sz = p->size;\
|
||||||
|
PERMUTATION_TYPE_SIZE_T *t_p = CREATE_PERMUTATION_TYPE_SIZE_T(sz);\
|
||||||
|
size_t *tb= t_p->perm;\
|
||||||
|
size_t a = pl;\
|
||||||
|
size_t pltbi;\
|
||||||
|
size_t size = 1;\
|
||||||
|
for (long int i = 0;i < sz;i++) tb[i] = 0;\
|
||||||
|
\
|
||||||
|
for (long int i = sz - 1; i >= 0; i--) {\
|
||||||
|
pltbi = a % (i + 1);\
|
||||||
|
a /= (i + 1);\
|
||||||
|
if (i == sz - 1) {\
|
||||||
|
tb[sz - 1 - pltbi] = i;\
|
||||||
|
}\
|
||||||
|
else {\
|
||||||
|
size_t lt = 0, j = sz - 1;\
|
||||||
|
while (lt < pltbi && j >= 0) {\
|
||||||
|
if (tb[j--] < i) {\
|
||||||
|
lt++;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
while (tb[j] > i) {\
|
||||||
|
j--;\
|
||||||
|
}\
|
||||||
|
tb[j] = i;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
\
|
||||||
|
for (long int i = 0;i < sz;i++) p->perm[i] = p->perm[tb[i]];\
|
||||||
|
return t_p;\
|
||||||
|
}\
|
||||||
|
\
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,10 @@
|
|||||||
PERMUTATION_##type * CREATE_PERMUTATION_##type(size_t size);\
|
PERMUTATION_##type * CREATE_PERMUTATION_##type(size_t size);\
|
||||||
PERMUTATION_TYPE_SIZE_T * TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(const PERMUTATION_##type *p );\
|
PERMUTATION_TYPE_SIZE_T * TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(const PERMUTATION_##type *p );\
|
||||||
bool IS_PERMUTATION_##type(const PERMUTATION_##type *p );\
|
bool IS_PERMUTATION_##type(const PERMUTATION_##type *p );\
|
||||||
|
size_t TabToPlaceAlgo_##type(const PERMUTATION_##type *p);\
|
||||||
|
size_t TabToPlaceOpt1_##type(const PERMUTATION_##type *p);\
|
||||||
|
size_t TabToPlaceNotab_##type(const PERMUTATION_##type *p);\
|
||||||
|
PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl);\
|
||||||
|
|
||||||
GENERATE_PERMUTATION(TYPE_SIZE_T)
|
GENERATE_PERMUTATION(TYPE_SIZE_T)
|
||||||
GENERATE_PERMUTATION(TYPE_CHAR)
|
GENERATE_PERMUTATION(TYPE_CHAR)
|
||||||
|
|||||||
Reference in New Issue
Block a user