2017-09-16 2 views
0

La recherche binaire fonctionne avec des entrées triées. Selon l'algorithme si le nombre d'entrées (n) est pair, alors il recherche d'abord la n/2ième entrée. Si c'est la clé, alors elle est retournée sinon elle vérifie si la clé est inférieure ou supérieure à la position n/2. Si c'est moins, la recherche continue de l'index 1 à n/2 -1, en éliminant la moitié restante. De même, le processus se répète jusqu'à ce que la clé recherchée soit trouvée. En cas de nombre impair d'entrées, la position du milieu est n-1/2. Donc, ma question est de savoir si il y a des entrées en double et nous l'avons trié par ordre croissant comme 11122233. Maintenant, si nous lisons la table de recherche binaire avec la clé = 1 (veuillez ignorer la syntaxe), puis selon l'algorithme,/2 = 4. Mais la 4ème position n'est pas 1, donc la recherche continue de 1 à 4ème position. Maintenant, n/2 = 2ème position qui est 1 et c'est la clé. Donc la recherche s'arrête au 2ème index. Donc, le deuxième index est retourné. Mais en abap avec la recherche binaire read table, la première entrée de 1, c'est-à-dire l'index 1, est renvoyée. Pourquoi ça? S'il vous plaît, expliquez.Pourquoi lire la table avec la recherche binaire renvoie la première entrée en cas d'entrées dupliquées dans SAP ABAP?

+1

Il existe des variantes de recherche binaire. Certains ne s'arrêtent pas quand ils trouvent la clé, mais continuent à s'assurer qu'ils trouvent la première occurrence. [Voir ici] (http://www.ffbit.com/blog/2013/02/26/first-occurrence-binary-search/). Il n'y a pas grand chose à dire à ce sujet. SAP est libre de mettre en œuvre tout ce qui lui semble le plus utile, non? – trincot

+0

D'accord avec le participant précédent. SAP est libre d'implémenter n'importe quelle variante d'algorithme. C'est genre de questions "pourquoi le ciel est bleu?" – Suncatcher

+0

Cela signifie que SAP utilise ce genre de variante de recherche binaire. Mais ce n'est certainement pas une question comme pourquoi le ciel est bleu. – user3757558

Répondre

4

Puisque l'algorithm has been specified and implemented that way:

Lorsque l'addition RECHERCHE BINARY est used, s'il y a hits multiple (due à une key de recherche incomplete ou duplicate entries du table), le premier hit selon l'ordre des lignes dans l'index principal est renvoyé. C'est la rangée avec le numéro de rangée le plus bas.

La raison d'être ce serait que vous préférez une langue à présenter un comportement stable - en ajoutant quelques entrées totalement sans rapport avec la fin de la table ne devrait pas changer ce que l'énoncé READ TABLE localise.