aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Jesus <adbjesus@gmail.com>2016-09-16 09:25:34 +0100
committerAlexandre Jesus <adbjesus@gmail.com>2016-09-16 09:25:34 +0100
commitd3878228d84dd2296cd85d914f27087d3cae2835 (patch)
tree8ed40e3d77fe3cb906baf1414da46c0a168226aa
parent37f41a284d633babeb152dbc0bf0248058fc25c9 (diff)
downloadlibuknapsack-d3878228d84dd2296cd85d914f27087d3cae2835.tar.gz
libuknapsack-d3878228d84dd2296cd85d914f27087d3cae2835.zip
Add pseudo-random shuffler
-rw-r--r--include/common.h1
-rw-r--r--src/common.c11
-rw-r--r--src/main/dfs.c7
3 files changed, 18 insertions, 1 deletions
diff --git a/include/common.h b/include/common.h
index c61ac4d..9332e6e 100644
--- a/include/common.h
+++ b/include/common.h
@@ -15,5 +15,6 @@ struct front_item * new_front_item(double, double, struct front_item *, struct
double dist_items(struct item *, struct item *);
int len_front(struct front_item *);
int cmp_items_ratio(const void * a, const void * b);
+int cmp_items_random(const void * a, const void * b);
#endif
diff --git a/src/common.c b/src/common.c
index 7d9e01d..ee98bba 100644
--- a/src/common.c
+++ b/src/common.c
@@ -5,6 +5,8 @@
#include "structs.h"
#include "common.h"
+#define RAND_MAX 1
+
struct data * input(char fp[]){
int i,j;
FILE *f;
@@ -36,6 +38,15 @@ int cmp_items_ratio(const void * a, const void * b){
return -1;
}
+int cmp_items_random(const void *a, const void *b) {
+ struct item c = *(struct item *)a;
+ struct item d = *(struct item *)b;
+ if(rand() > 0.5){
+ return 1;
+ }
+ return -1;
+}
+
void print_data(struct data * d){
int i;
printf("### PRINTING DATA - BEGINNING ###\n");
diff --git a/src/main/dfs.c b/src/main/dfs.c
index ca796c5..f28f8ab 100644
--- a/src/main/dfs.c
+++ b/src/main/dfs.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <time.h>
+#include <stdlib.h>
#include "common.h"
#include "structs.h"
#include "dfs.h"
@@ -16,12 +17,16 @@ int main(int argc, char * argv[]){
d = input(argv[1]);
+ /* srand() and qsort data */
+ srand(time(NULL));
+ qsort(d->items, d->N, sizeof(struct item), cmp_items_random);
+
clock_t t = clock();
b = dfs(d);
t = clock() - t;
printf("%f,%d\n",((float)t)/CLOCKS_PER_SEC,len_front(b));
-
+
print_front(b);
free_front(b);