Beispiel #1
0
        /// <summary>
        /// Retrieves a list of sequences matching the given criteria. This operation does not support pagination.
        /// </summary>
        /// <param name="query">Search query.</param>
        /// <param name="token">Optional cancellation token.</param>
        /// <returns>List of assets matching given criteria.</returns>
        public async Task <IEnumerable <Sequence> > SearchAsync(SequenceSearch query, CancellationToken token = default)
        {
            if (query is null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            var req = Oryx.Cognite.Sequences.search <IEnumerable <Sequence> >(query);

            return(await RunAsync(req, token).ConfigureAwait(false));
        }
        void Search()
        {
            List <SearchResult> tempResults      = new List <SearchResult>();
            List <SearchResult> tempDecoyResults = new List <SearchResult>();

            ISearch <string> oneSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS1ToleranceBy, SearchingParameters.Access.MS1Tolerance);
            PrecursorMatch precursorMatcher = new PrecursorMatch(oneSearcher);

            precursorMatcher.Init(peptides, glycanBuilder.GlycanMaps());

            ISearch <string> twoSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS1ToleranceBy, SearchingParameters.Access.MS1Tolerance);
            PrecursorMatch decoyPrecursorMatcher = new PrecursorMatch(twoSearcher);

            decoyPrecursorMatcher.Init(decoyPeptides, glycanBuilder.GlycanMaps());

            ISearch <string> moreSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS2ToleranceBy, SearchingParameters.Access.MSMSTolerance);
            SequenceSearch sequenceSearcher = new SequenceSearch(moreSearcher);

            ISearch <int> extraSearcher = new BucketSearch <int>(
                SearchingParameters.Access.MS2ToleranceBy, SearchingParameters.Access.MSMSTolerance);
            GlycanSearch glycanSearcher = new GlycanSearch(extraSearcher, glycanBuilder.GlycanMaps(),
                                                           SearchingParameters.Access.ComplexInclude,
                                                           SearchingParameters.Access.HybridInclude,
                                                           SearchingParameters.Access.MannoseInclude);

            SearchAnalyzer searchAnalyzer = new SearchAnalyzer();

            SearchTask task;

            while ((task = TryGetTask()) != null)
            {
                ISpectrum spectrum = task.Spectrum;
                //precursor match
                var pre_results = precursorMatcher.Match(task.PrecursorMZ, task.Charge);
                if (pre_results.Count > 0)
                {
                    // spectrum search
                    var peptide_results = sequenceSearcher.Search(spectrum.GetPeaks(), task.Charge, pre_results);
                    if (peptide_results.Count > 0)
                    {
                        var glycan_results = glycanSearcher.Search(spectrum.GetPeaks(), task.Charge, pre_results);
                        if (glycan_results.Count > 0)
                        {
                            var targets = searchAnalyzer.Analyze(spectrum.GetScanNum(), spectrum.GetPeaks(), peptide_results, glycan_results);
                            targets = searchAnalyzer.Filter(targets, glycanBuilder.GlycanMaps(),
                                                            task.PrecursorMZ, task.Charge);
                            tempResults.AddRange(targets);
                        }
                    }
                }


                var decoy_results = decoyPrecursorMatcher.Match(task.PrecursorMZ, task.Charge);
                if (decoy_results.Count > 0)
                {
                    // spectrum search
                    var peptide_results = sequenceSearcher.Search(spectrum.GetPeaks(), task.Charge, decoy_results);
                    if (peptide_results.Count > 0)
                    {
                        var glycan_results = glycanSearcher.Search(spectrum.GetPeaks(), task.Charge, decoy_results);
                        if (glycan_results.Count > 0)
                        {
                            var decoys = searchAnalyzer.Analyze(spectrum.GetScanNum(), spectrum.GetPeaks(), peptide_results, glycan_results);
                            decoys = searchAnalyzer.Filter(decoys, glycanBuilder.GlycanMaps(),
                                                           task.PrecursorMZ, task.Charge);
                            tempDecoyResults.AddRange(decoys);
                        }
                    }
                }

                searchCounter.Add(taskSize);
            }

            UpdateTask(tempResults, tempDecoyResults);
        }
Beispiel #3
0
        public void Test1()
        {
            string path  = @"C:\Users\Rui Zhang\Downloads\ZC_20171218_C16_R1.raw";
            string fasta = @"C:\Users\Rui Zhang\Downloads\haptoglobin.fasta";
            // peptides
            IProteinReader  proteinReader = new FastaReader();
            List <IProtein> proteins      = proteinReader.Read(fasta);
            List <IProtein> decoyProteins = new List <IProtein>();

            foreach (IProtein protein in proteins)
            {
                IProtein p = new BaseProtein();
                p.SetSequence(Reverse(protein.Sequence()));
                decoyProteins.Add(p);
            }

            List <Proteases> proteases = new List <Proteases>()
            {
                Proteases.Trypsin, Proteases.GluC
            };

            HashSet <string> peptides = new HashSet <string>();

            ProteinDigest proteinDigest = new ProteinDigest(2, 5, proteases[0]);

            foreach (IProtein protein in decoyProteins)
            {
                peptides.UnionWith(proteinDigest.Sequences(protein.Sequence(),
                                                           ProteinPTM.ContainsNGlycanSite));
            }

            for (int i = 1; i < proteases.Count; i++)
            {
                proteinDigest.SetProtease(proteases[i]);
                List <string> peptidesList = peptides.ToList();
                foreach (string seq in peptidesList)
                {
                    peptides.UnionWith(proteinDigest.Sequences(seq,
                                                               ProteinPTM.ContainsNGlycanSite));
                }
            }

            Assert.True(peptides.Contains("KDNLTYVGDGETR"));

            // build glycan
            GlycanBuilder glycanBuilder = new GlycanBuilder();

            glycanBuilder.Build();


            // search
            List <SearchResult> searchResults = new List <SearchResult>();

            ThermoRawSpectrumReader reader  = new ThermoRawSpectrumReader();
            LocalMaximaPicking      picking = new LocalMaximaPicking();
            IProcess process = new LocalNeighborPicking();

            reader.Init(path);
            double       searchRange = 2;
            ISpectrum    ms1         = null;
            List <IPeak> majorPeaks  = new List <IPeak>();

            ISearch <string> oneSearcher      = new BucketSearch <string>(ToleranceBy.PPM, 10);
            PrecursorMatch   precursorMatcher = new PrecursorMatch(oneSearcher);

            precursorMatcher.Init(peptides.ToList(), glycanBuilder.GlycanMaps());

            ISearch <string> moreSearcher     = new BucketSearch <string>(ToleranceBy.Dalton, 0.01);
            SequenceSearch   sequenceSearcher = new SequenceSearch(moreSearcher);

            ISearch <int> extraSearcher  = new BucketSearch <int>(ToleranceBy.Dalton, 0.01);
            GlycanSearch  glycanSearcher = new GlycanSearch(extraSearcher, glycanBuilder.GlycanMaps());

            SearchAnalyzer searchAnalyzer = new SearchAnalyzer();

            for (int i = reader.GetFirstScan(); i < reader.GetLastScan(); i++)
            {
                if (reader.GetMSnOrder(i) < 2)
                {
                    ms1        = reader.GetSpectrum(i);
                    majorPeaks = picking.Process(ms1.GetPeaks());
                }
                else
                {
                    double mz = reader.GetPrecursorMass(i, reader.GetMSnOrder(i));
                    if (ms1.GetPeaks()
                        .Where(p => p.GetMZ() > mz - searchRange && p.GetMZ() < mz + searchRange)
                        .Count() == 0)
                    {
                        continue;
                    }

                    Patterson charger = new Patterson();
                    int       charge  = charger.Charge(ms1.GetPeaks(), mz - searchRange, mz + searchRange);

                    // find evelope cluster
                    EnvelopeProcess envelope = new EnvelopeProcess();
                    var             cluster  = envelope.Cluster(majorPeaks, mz, charge);
                    if (cluster.Count == 0)
                    {
                        continue;
                    }

                    // find monopeak
                    Averagine            averagine = new Averagine(AveragineType.GlycoPeptide);
                    BrainCSharp          braincs   = new BrainCSharp();
                    MonoisotopicSearcher searcher  = new MonoisotopicSearcher(averagine, braincs);
                    MonoisotopicScore    result    = searcher.Search(mz, charge, cluster);
                    double precursorMZ             = result.GetMZ();

                    // search
                    ISpectrum ms2 = reader.GetSpectrum(i);
                    ms2 = process.Process(ms2);

                    //precursor match
                    var pre_results = precursorMatcher.Match(precursorMZ, charge);
                    if (pre_results.Count == 0)
                    {
                        continue;
                    }

                    // spectrum search
                    var peptide_results = sequenceSearcher.Search(ms2.GetPeaks(), charge, pre_results);
                    if (peptide_results.Count == 0)
                    {
                        continue;
                    }

                    var glycan_results = glycanSearcher.Search(ms2.GetPeaks(), charge, pre_results);
                    if (glycan_results.Count == 0)
                    {
                        continue;
                    }

                    var temp_results = searchAnalyzer.Analyze(i, ms2.GetPeaks(), peptide_results, glycan_results);
                    break;
                }
            }
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            int[]      arr_bs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            BubbleSort bs     = new BubbleSort();

            Console.WriteLine("冒泡排序:");
            bs.MyBulleSort(arr_bs);

            /*result
             *  7 26 22 32 28 38 23 24 53 27 54 33 78
             *  7 22 26 28 32 23 24 38 27 53 33 54 78
             *  7 22 26 28 23 24 32 27 38 33 53 54 78
             *  7 22 26 23 24 28 27 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  程序的运行时间:0.0242318 秒
             */

            int[]     arr_qs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            QuickSort qs     = new QuickSort();

            Console.WriteLine("快速排序:");
            qs.MyQuickSort(arr_qs, 0, arr_qs.Length - 1);

            /*result
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 24 23 22 26 28 38 32 53 54 27 78 33
             *  7 22 23 24 26 28 38 32 53 54 27 78 33
             *  7 22 23 24 26 28 38 32 53 54 27 78 33
             *  7 22 23 24 26 27 28 32 53 54 38 78 33
             *  7 22 23 24 26 27 28 32 53 54 38 78 33
             *  7 22 23 24 26 27 28 32 33 38 53 78 54
             *  7 22 23 24 26 27 28 32 33 38 53 78 54
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]         arr_ins = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            InsertionSort ins     = new InsertionSort();

            Console.WriteLine("插入排序:");
            ins.MyInsertionSort(arr_ins);

            /*result
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 22 26 53 32 28 38 23 24 54 27 78 33
             *  7 22 26 32 53 28 38 23 24 54 27 78 33
             *  7 22 26 28 32 53 38 23 24 54 27 78 33
             *  7 22 26 28 32 38 53 23 24 54 27 78 33
             *  7 22 23 26 28 32 38 53 24 54 27 78 33
             *  7 22 23 24 26 28 32 38 53 54 27 78 33
             *  7 22 23 24 26 28 32 38 53 54 27 78 33
             *  7 22 23 24 26 27 28 32 38 53 54 78 33
             *  7 22 23 24 26 27 28 32 38 53 54 78 33
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]     arr_shs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            ShellSort shs     = new ShellSort();

            Console.WriteLine("希尔排序:");
            shs.MyShellSort(arr_shs);

            /*result
             *  gap=13
             *  本轮结果:
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  gap=4
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 26 38 22 32 28 53 23 24 54 27 78 33
             *  7 26 38 22 32 28 53 23 24 54 27 78 33
             *  7 26 38 22 24 28 53 23 32 54 27 78 33
             *  7 26 38 22 24 28 53 23 32 54 27 78 33
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  本轮结果:
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  gap=1
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  7 26 27 22 24 28 38 23 32 54 53 78 33
             *  7 22 26 27 24 28 38 23 32 54 53 78 33
             *  7 22 24 26 27 28 38 23 32 54 53 78 33
             *  7 22 24 26 27 28 38 23 32 54 53 78 33
             *  7 22 24 26 27 28 38 23 32 54 53 78 33
             *  7 22 23 24 26 27 28 38 32 54 53 78 33
             *  7 22 23 24 26 27 28 32 38 54 53 78 33
             *  7 22 23 24 26 27 28 32 38 54 53 78 33
             *  7 22 23 24 26 27 28 32 38 53 54 78 33
             *  7 22 23 24 26 27 28 32 38 53 54 78 33
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  本轮结果:
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]         arr_ses = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            SelectionSort ses     = new SelectionSort();

            Console.WriteLine("选择排序:");
            ses.MySelectionSort(arr_ses);

            /*result
             *  7 26 53 22 32 28 38 23 24 54 27 78 33
             *  7 22 53 26 32 28 38 23 24 54 27 78 33
             *  7 22 23 53 32 28 38 26 24 54 27 78 33
             *  7 22 23 24 53 32 38 28 26 54 27 78 33
             *  7 22 23 24 26 53 38 32 28 54 27 78 33
             *  7 22 23 24 26 27 53 38 32 54 28 78 33
             *  7 22 23 24 26 27 28 53 38 54 32 78 33
             *  7 22 23 24 26 27 28 32 53 54 38 78 33
             *  7 22 23 24 26 27 28 32 33 54 53 78 38
             *  7 22 23 24 26 27 28 32 33 38 54 78 53
             *  7 22 23 24 26 27 28 32 33 38 53 78 54
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]    arr_hs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            HeapSort hs     = new HeapSort();

            Console.WriteLine("堆排序:");
            hs.MyHeapSort(arr_hs);

            /*result
             *  33 54 7 24 26 53 38 23 22 32 27 28 78
             *  28 33 53 24 32 7 38 23 22 26 27 54 78
             *  27 33 28 24 32 7 38 23 22 26 53 54 78
             *  26 33 27 24 32 7 28 23 22 38 53 54 78
             *  22 26 28 24 32 7 27 23 33 38 53 54 78
             *  23 22 28 24 26 7 27 32 33 38 53 54 78
             *  27 26 23 24 22 7 28 32 33 38 53 54 78
             *  7 26 23 24 22 27 28 32 33 38 53 54 78
             *  22 7 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]     arr_ms = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            MergeSort ms     = new MergeSort();

            Console.WriteLine("归并排序:");
            ms.MyMergeSort(arr_ms);

            /*result
             *  26 53
             *  7 26 53
             *  28 32
             *  22 28 32
             *  7 22 26 28 32 53
             *  23 24
             *  23 24 38
             *  27 54
             *  33 78
             *  27 33 54 78
             *  23 24 27 33 38 54 78
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]        arr_cs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            CountingSort cs     = new CountingSort();

            Console.WriteLine("计数排序1:");
            cs.MyCountingSort(arr_cs);

            /*result
             *  数组最小值:7
             *  数组最大值:78
             *  每个元素个数统计:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
             *  每个元素值及比它值小的所有元素的个数统计:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 4 5 6 7 7 7 7 8 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */
            int[] arr_cs2 = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            Console.WriteLine("计数排序2:");
            cs.MyCountingSort2(arr_cs2);

            /*result
             *  数组最小值:7
             *  数组最大值:78
             *  每个元素个数统计:0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
             *  7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]      arr_bus = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            BucketSort bus     = new BucketSort();

            Console.WriteLine("桶排序:");
            bus.MyBucketSort(arr_bus);

            /*result
             *  平方根:2 5 7 4 5 5 6 4 4 7 5 8 5
             *  数组最小值:2
             *  数组最大值:8
             *  桶内元素:
             *  7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  22 23 24 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  26 32 28 27 33 -1 -1 -1 -1 -1 -1 -1 -1
             *  38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  53 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  第2个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 7
             *  第4个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 22 23 24
             *  第5个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 26 27 28 32 33
             *  第6个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 38
             *  第7个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 53 54
             *  第8个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 78
             *  排序结果:7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            int[]     arr_rs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 };
            RadixSort rs     = new RadixSort();

            Console.WriteLine("基数排序:");
            rs.MyRadixSort(arr_rs);

            /*result
             *  桶内:22 32 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  53 23 33 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  24 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  26 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  7 27 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  28 38 78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  桶外:22 32 53 23 33 24 54 26 7 27 28 38 78
             *  桶内:7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  22 23 24 26 27 28 -1 -1 -1 -1 -1 -1 -1
             *  32 33 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  53 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
             *  桶外:7 22 23 24 26 27 28 32 33 38 53 54 78
             */

            Console.WriteLine("");
            Console.WriteLine("");
            int[] arr_s = { 7, 22, 23, 24, 26, 27, 28, 32, 33, 38, 53, 54, 78 };
            int   index;

            SequenceSearch ss = new SequenceSearch();

            Console.WriteLine("顺序查找:");
            index = ss.MySequenceSearch(arr_s, 53);
            Console.WriteLine("查找成功: " + index);
            index = ss.MySequenceSearch(arr_s, 52);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  比较第11次
             *  查找成功: 10
             *  比较第13次
             *  查找失败: -1
             */

            BinarySearch bis = new BinarySearch();

            Console.WriteLine("二分查找1:");
            index = bis.MyBinarySearch(arr_s, 53);
            Console.WriteLine("查找成功: " + index);
            index = bis.MyBinarySearch(arr_s, 52);
            Console.WriteLine("查找失败: " + index);
            Console.WriteLine("二分查找2:");
            index = bis.MyBinarySearch2(arr_s, 53, 0, arr_s.Length - 1);
            Console.WriteLine("查找成功: " + index);
            index = bis.MyBinarySearch2(arr_s, 52, 0, arr_s.Length - 1);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  low-high:7-12
             *  low-high:10-12
             *  low-high:10-10
             *  mid:10
             *  查找成功: 10
             *  low-high:7-12
             *  low-high:10-12
             *  low-high:10-10
             *  low-high:10-9
             *  查找失败: -1
             */

            InterpolationSearch ints = new InterpolationSearch();

            Console.WriteLine("插值查找1:");
            index = ints.MyInterpolationSearch(arr_s, 53);
            Console.WriteLine("查找成功: " + index);
            index = ints.MyInterpolationSearch(arr_s, 52);
            Console.WriteLine("查找失败: " + index);
            index = ints.MyInterpolationSearch2(arr_s, 53, 0, arr_s.Length - 1);
            Console.WriteLine("查找成功: " + index);
            index = ints.MyInterpolationSearch2(arr_s, 52, 0, arr_s.Length - 1);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  low-high:8-12
             *  low-high:10-12
             *  mid:10
             *  查找成功: 10
             *  low-high:8-12
             *  low-high:10-12
             *  low-high:10-9
             *  查找失败: -1
             */

            FibonacciSearch fs = new FibonacciSearch();

            Console.WriteLine("斐波那契查找1:");
            index = fs.MyFibonacciSearch(arr_s, 53);
            Console.WriteLine("查找成功: " + index);
            index = fs.MyFibonacciSearch(arr_s, 52);
            Console.WriteLine("查找失败: " + index);
            Console.WriteLine("斐波那契查找2:");
            index = fs.MyFibonacciSearch2(arr_s, 53);
            Console.WriteLine("查找成功: " + index);
            index = fs.MyFibonacciSearch(arr_s, 52);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  斐波那契数列:0 1 1 2 3 5 8 13 21
             *  扩展后的数组:7 22 23 24 26 27 28 32 33 38 53 54 78 78 78 78 78 78 78 78
             *  low-high-k:0-11-7
             *  low-high-k:8-11-5
             *  mid-k:10-5
             *  查找成功: 10
             *  斐波那契数列:0 1 1 2 3 5 8 13 21
             *  扩展后的数组:7 22 23 24 26 27 28 32 33 38 53 54 78 78 78 78 78 78 78 78
             *  low-high-k:0-11-7
             *  low-high-k:8-11-5
             *  low-high-k:8-9-4
             *  low-high-k:10-9-2
             *  查找失败: -1
             */

            BlockSearch bls = new BlockSearch();

            Console.WriteLine("分块查找:");
            index = bls.MyBlockSearch(arr_s, 53, 4);
            Console.WriteLine("查找成功: " + index);
            index = bls.MyBlockSearch(arr_s, 52, 4);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  序列数组:
             *  7 22 23 24
             *  26 27 28 32
             *  33 38 53 54
             *  78
             *  最小值最大值:
             *  7 26 33 78 24 32 54 78
             *  low-high:2-3
             *  mid:2
             *  查找成功: 10
             *
             *  序列数组:
             *  7 22 23 24
             *  26 27 28 32
             *  33 38 53 54
             *  78
             *  最小值最大值:
             *  7 26 33 78 24 32 54 78
             *  low-high:2-3
             *  low-high:2-1
             *  查找失败: -1
             */

            int[]            arr_bts = { 32, 24, 54, 22, 27, 38, 78, 7, 23, 26, 28, 33, 53 };
            BinaryTreeSearch bts     = new BinaryTreeSearch();

            Console.WriteLine("二叉树查找1:");
            index = bts.MyBinaryTreeSearch(arr_bts, 53);
            Console.WriteLine("查找成功: " + index);
            index = bts.MyBinaryTreeSearch(arr_bts, 52);
            Console.WriteLine("查找失败: " + index);
            Console.WriteLine("二叉树查找2:");
            index = bts.MyBinaryTreeSearch2(arr_bts, 53, 0, 0);
            Console.WriteLine("查找成功: " + index);
            index = bts.MyBinaryTreeSearch2(arr_bts, 52, 0, 0);
            Console.WriteLine("查找失败: " + index);

            /*result
             *  第1次比较:i-0 arr[i]-32
             *  第2次比较:i-2 arr[i]-54
             *  第3次比较:i-5 arr[i]-38
             *  第4次比较:i-12 arr[i]-53
             *  查找成功: 12
             *  第1次比较:i-0 arr[i]-32
             *  第2次比较:i-2 arr[i]-54
             *  第3次比较:i-5 arr[i]-38
             *  第4次比较:i-12 arr[i]-53
             *  查找失败: -1
             */

            Console.ReadKey();
        }