2010-12-08 5 views
0

Comment serais-je capable de trouver si au moins la moitié de mes objets dans un tableau retournent vrai (sur une fonction) en utilisant un algorithme de division et de conquête? Les objets n'ont pas de valeur énumérable, donc l'objet A n'est pas plus grand que l'objet B.Diviser et Conquer - Comparer

Pour clarifier, comparer tous les objets les uns aux autres en utilisant cette fonction. Donc funct (Obj a, Obj b) renvoie vrai ou faux selon certains critères. Ils peuvent être groupés ensemble, nous voulons juste savoir si au moins la moitié des objets comparés est vrai.

+0

sont ceux qui renvoient true pour cette fonction agglutinées? –

+0

Pour clarifier, comparer tous les objets les uns aux autres en utilisant cette fonction. Donc funct (Obj a, Obj b) renvoie vrai ou faux selon certains critères. Ils peuvent être groupés ensemble, nous voulons juste savoir si au moins la moitié des objets comparés est vrai. – blahhhhhh

+1

Souhaitez-vous prendre toutes les paires d'éléments à comparer ou est-ce que tous les éléments du tableau sont comparés à une valeur connue, par ex. si le tableau était ints et que vous vouliez savoir si la moitié était à un seul chiffre? –

Répondre

0

Dépend beaucoup de choses:

Combien d'objets sont là? Sont-ils commandés? Quelle langue utilisez-vous? Sur quelle machine est-ce que cela fonctionne?

Je dirais que si vous avez beaucoup d'éléments, commandés au hasard, sur une machine dont les processus bénéficieraient de l'enfilage, créez quelques threads et attribuez à chacun un morceau de données pour travailler avec. Une fois que vous obtenez le nombre de passes ou échoue plus de la moitié du nombre d'objets, vous avez votre réponse.

+0

Il y a n nombre d'objets. Taille toujours différente. Ils ne sont pas commandés et n'ont donc aucune valeur de commande. Peu importe la langue ou la machine. – blahhhhhh

1

Pourquoi voudriez-vous utiliser diviser pour régner? Répondre à votre question semble être O (n) lors de l'utilisation de l'algorithme trivial 'itérer et compter' ... et vous ne pouvez pas connaître la moitié des objets retournera vrai en utilisant un algorithme vérifiant moins de O (n/2) objets, qui est le même que O (n).

EDIT: OK, l'édition montre que ce n'est pas un prédicat que vous appliquez. Donc, ma réponse ne s'applique pas. Je ne comprends toujours pas comment vous définissez réellement 'la moitié de l'objet retourne vrai'. Ils reviennent vrai par rapport à quoi? Ce que nous avons est n**2 paires (peut-être moins, on ne sait pas si un objet peut être comparé à lui-même). Voulez-vous dire que la moitié des paires n**2 retournent vrai lorsque la fonction de comparaison est appliquée?

Si donc un raisonnement très semblable à la précédente vous conclure êtes condamné et ne peut faire mieux que O(n**2)

+0

Exemple: donné (a, b, c, d) si une fonction FUNCTION (a, b) = true. Ensuite, au moins la moitié des objets sont retournés vrais. – blahhhhhh

+0

Les objets retournés étant toutes les paires possibles? – kriss

+0

Si oui, encore une fois vous êtes condamné, pas de division et de conquête ici. Mais il peut y avoir une certaine paralelisation possible comme suggéré une autre affiche. – kriss