// maintains the top k scores for distinct simplified strings
        public void KeepIfWorthy(float score, TableSupplement table)
        {
            if (score <= bestMatchScores[MATCH_QUEUE_SIZE - 1])
                return;

            bool inserted = false;
            for (int i=0; !inserted && i < MATCH_QUEUE_SIZE; i++)
            {
                // insert in the queue if the score is good enough and the simplified string is different
                if (score > bestMatchScores[i] && IsNewTableName(table.GetSemanticName().GetText()))
                {
                    for (int j=0; j < MATCH_QUEUE_SIZE - i - 1; j++)
                    {
                        bestMatchScores[MATCH_QUEUE_SIZE - 1 - j] = bestMatchScores[MATCH_QUEUE_SIZE - 2 - j];
                        bestMatches[MATCH_QUEUE_SIZE - 1 - j] = bestMatches[MATCH_QUEUE_SIZE - 2 - j];
                        bestMatchDatabases[MATCH_QUEUE_SIZE - 1 - j] = bestMatchDatabases[MATCH_QUEUE_SIZE - 2 - j];
                    }
                    bestMatchScores[i] = score;
                    bestMatches[i] = table;
                    bestMatchDatabases[i] = table.GetTableEntity().Database;
                    inserted = true;
                }
            }
        }