1
Name:
Anonymous
2013-10-01 2:22
Given 10000000 random 8bit signed integers, create the fastest program to sum them.
Assembly not allowed. Time is counted only at the process of summation.
5
Name:
Anonymous
2013-10-01 16:18
enterprise-level C, this should run in O(log(n))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 10000000
#define MAX 128
int sum(int* arr, int len)
{
if(len == 2)
return (arr[0] + arr[1]);
else if(len == 1)
return arr[0];
else
{
int len1 = (len / 2), len2 = (len / 2) + (len % 2);
int* arr1 = (int*) malloc(sizeof(int) * len1);
int* arr2 = (int*) malloc(sizeof(int) * len2);
memcpy(arr1, arr, sizeof(int) * len1);
memcpy(arr2, (arr + len1), sizeof(int) * len2);
int toReturn = sum(arr1, len1) + sum(arr2, len2);
free(arr1);
free(arr2);
return toReturn;
}
}
int main()
{
int* arr = (int*) malloc(sizeof(int) * LENGTH);
for(int i = 0; i < LENGTH; i++)
arr[i] = rand() % MAX;
printf("Sum is: %d", sum(arr, LENGTH));
free(arr);
return 0;
}