亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bipartitematcher.cs

?? 是用c#編寫的
?? CS
字號:
/*
 * Hungarian method matching for maximizing total weights of bipartite grapth
 * Author: Dao Ngoc Thanh , thanh.dao@gmx.net
 * Copyright (c) 2005 Dao Ngoc Thanh
*/

using System;

namespace WordsMatching
{
    /// <summary>
    /// SS
    /// </summary>
    /// 

    public class BipartiteMatcher 
    {
        private string[] _leftTokens, _rightTokens;
        private float[][] _costMatrix;
        private float[] _leftLabel, _rightLabel;
        private int[] _previous, _incoming, _outgoing;

        private bool[] _leftVisited, _rightVisited;
        int leftLen, rightLen;
        bool _errorOccured = false;
        const int ROUND_LEN = 3;

        public BipartiteMatcher(string[] left, string[] right, float[][] simMatrix)
        {
            if (left == null || right == null || simMatrix == null)
            {
                _errorOccured = true;
                return;
            }

            _leftTokens = left;
            _rightTokens = right;

            if (_leftTokens.Length > _rightTokens.Length)
            {
                _costMatrix = Transpose(simMatrix);

                string[] temp = _leftTokens;
                _leftTokens = _rightTokens;
                _rightTokens = temp;
            }
            else
                _costMatrix = (float[][])simMatrix.Clone();



            MyInit();

            Make_Matching();
        }

        public static float[][] Transpose(float[][] matrix)
        {
            if (matrix == null)
                return null;
            int m = matrix.Length;
            int n = matrix[0].Length;
            float[][] transMatrix = new float[n][];

            for (int i = 0; i < n; i++)
                transMatrix[i] = new float[m];

            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n; j++)
                    transMatrix[j][i] = matrix[i][j];
            }

            return transMatrix;
        }


        private void MyInit()
        {
            Initialize();

            _leftVisited = new bool[leftLen + 1];
            _rightVisited = new bool[rightLen + 1];
            _previous = new int[(leftLen + rightLen) + 2];

        }

        private void Initialize()
        {
            leftLen = _leftTokens.Length - 1;
            rightLen = _rightTokens.Length - 1;

            _leftLabel = new float[leftLen + 1];
            _rightLabel = new float[rightLen + 1];
            for (int i = 0; i < _leftLabel.Length; i++) _leftLabel[i] = 0;
            for (int i = 0; i < _rightLabel.Length; i++) _rightLabel[i] = 0;


            for (int i = 0; i <= leftLen; i++)
            {
                float maxLeft = float.MinValue;
                for (int j = 0; j <= rightLen; j++)
                {
                    _costMatrix[i][j] = (float)Math.Round(_costMatrix[i][j], 2);
                    if (_costMatrix[i][j] > maxLeft) maxLeft = _costMatrix[i][j];
                }

                _leftLabel[i] = maxLeft;
            }

        }

        private void Flush()
        {
            for (int i = 0; i < _previous.Length; i++) _previous[i] = -1;
            for (int i = 0; i < _leftVisited.Length; i++) _leftVisited[i] = false;
            for (int i = 0; i < _rightVisited.Length; i++) _rightVisited[i] = false;
        }

        bool stop = false;
        bool FindPath(int source)
        {
            Flush();
            stop = false;
            Walk(source);
            return stop;

        }

        void Increase_MapPairs(int prev_i, int prev_j)
        {
            int[] tempOut = (int[])_outgoing.Clone();
            int i, j, k;
            i = prev_i; j = prev_j;
            _outgoing[i] = j; _incoming[j] = i;
            if (_previous[i] != -1)
            {
                do
                {
                    j = tempOut[i];
                    k = _previous[i];
                    _outgoing[k] = j; _incoming[j] = k;
                    i = k;
                } while (_previous[i] != -1);
            }
        }


        void Walk(int i)
        {
            _leftVisited[i] = true;

            for (int j = 0; j <= rightLen; j++)
                if (stop) return;
                else
                {
                    float tmp = (float)Math.Round(_leftLabel[i] + _rightLabel[j], 2);
                    if (!_rightVisited[j] && (tmp == _costMatrix[i][j]))
                    {
                        if (_incoming[j] == -1)
                        {
                            stop = true;
                            Increase_MapPairs(i, j);
                            return;
                        }
                        else
                        {
                            int k = _incoming[j];
                            _rightVisited[j] = true;
                            _previous[k] = i;
                            Walk(k);
                        }
                    }
                }
        }

        float GetMinDeviation()
        {
            float min = float.MaxValue;

            for (int i = 0; i <= leftLen; i++)
                if (_leftVisited[i])
                {
                    for (int j = 0; j <= rightLen; j++)
                        if (!_rightVisited[j])
                        {
                            float tmp = (float)Math.Round(_leftLabel[i] + _rightLabel[j], 2);
                            if (tmp - _costMatrix[i][j] < min)
                                min = tmp - _costMatrix[i][j];
                        }
                }

            return min;
        }

        void Relabels()
        {
            float dev = GetMinDeviation();

            for (int k = 0; k <= leftLen; k++)
                if (_leftVisited[k])
                {
                    _leftLabel[k] -= dev;
                    _leftLabel[k] = (float)Math.Round(_leftLabel[k], 2);
                }
            for (int k = 0; k <= rightLen; k++)
                if (_rightVisited[k])
                {
                    _rightLabel[k] += dev;
                    _rightLabel[k] = (float)Math.Round(_rightLabel[k], 2);
                }
        }

        void Make_Matching()
        {
            _outgoing = new int[leftLen + 1];
            _incoming = new int[rightLen + 1];
            for (int i = 0; i < _outgoing.Length; i++) _outgoing[i] = -1;
            for (int i = 0; i < _incoming.Length; i++) _incoming[i] = -1;

            for (int k = 0; k <= leftLen; k++)
                if (_outgoing[k] == -1)
                {
                    bool found = false;
                    do
                    {
                        found = FindPath(k);
                        if (!found) Relabels();

                    } while (!found);
                }
        }


        public float[] GetMapPairWeights()
        {
            float[] selWeights = new float[leftLen + 1];
            for (int i = 0; i <= leftLen; i++)
                if (_outgoing[i] != -1)
                {
                    selWeights[i] = _costMatrix[i][_outgoing[i]];
                }

            return selWeights;
        }


        public int[] GetMapPairs()
        {
            return _outgoing;
        }

        public float GetScore()
        {
            float dis = 0;

            float maxLen = rightLen + 1;
            if (maxLen > 0)
                return dis / maxLen;
            else
                return 1.0F;
        }


        public float Score
        {
            get
            {
                if (_errorOccured) return 0;
                else
                    return GetScore();
            }
        }

    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a4yy欧美一区二区三区| 久久99久久久久| 91在线看国产| 亚洲靠逼com| 欧美午夜电影网| 五月天久久比比资源色| 91精品国产aⅴ一区二区| 免费成人性网站| 久久精品一区四区| 99精品国产热久久91蜜凸| 亚洲精品免费播放| 欧美日韩一区不卡| 激情伊人五月天久久综合| 欧美精彩视频一区二区三区| av不卡免费电影| 亚洲图片自拍偷拍| 精品三级在线看| 成人精品一区二区三区中文字幕| 17c精品麻豆一区二区免费| 色婷婷久久一区二区三区麻豆| 亚洲国产成人av好男人在线观看| 欧美一级高清片| 国产成人精品亚洲午夜麻豆| 亚洲欧美日韩久久精品| 在线不卡的av| 成人免费视频免费观看| 丝袜诱惑制服诱惑色一区在线观看| 欧美一区二区网站| 成人18视频日本| 日韩黄色免费电影| 久久综合狠狠综合久久激情| 色婷婷一区二区三区四区| 麻豆精品蜜桃视频网站| 中文字幕中文在线不卡住| 欧美人与禽zozo性伦| 久久99精品视频| 亚洲裸体xxx| 久久亚洲私人国产精品va媚药| 在线一区二区三区四区| 国产经典欧美精品| 日韩中文欧美在线| 1000部国产精品成人观看| 日韩欧美在线网站| 欧美在线一区二区三区| 国产综合久久久久久久久久久久| 亚洲精品国产a久久久久久| 亚洲精品一区二区三区四区高清| 欧美日韩中文另类| 成人黄色777网| 国内精品久久久久影院薰衣草| 亚洲综合网站在线观看| 久久久久久久久久看片| 3d动漫精品啪啪1区2区免费| 色综合久久久久网| 国产 日韩 欧美大片| 久久精品72免费观看| 午夜精品久久久久久久久久| 成人欧美一区二区三区白人| 国产午夜精品久久久久久久| 日韩欧美综合在线| 欧美久久婷婷综合色| 日本高清不卡一区| 972aa.com艺术欧美| 国产福利91精品| 国产一区二区三区香蕉| 久久99精品国产91久久来源| 亚洲大片精品永久免费| 一区二区久久久久久| 一区在线观看免费| 亚洲国产高清在线观看视频| 国产亚洲综合在线| 久久久青草青青国产亚洲免观| 91精品国产综合久久久久久| 欧美性一区二区| 欧美亚日韩国产aⅴ精品中极品| jizz一区二区| 91香蕉视频mp4| 99久久99久久免费精品蜜臀| 成人永久aaa| 成人h版在线观看| 成人成人成人在线视频| 高清成人在线观看| 成人av动漫在线| 91丨porny丨最新| 色综合久久久久| 欧美专区亚洲专区| 欧美亚洲免费在线一区| 在线精品视频一区二区三四| 日本韩国精品在线| 色婷婷av一区二区三区软件| 欧美在线free| 欧美一区二区三区在线电影| 精品精品欲导航| 国产色产综合产在线视频| 国产精品全国免费观看高清| 亚洲三级电影网站| 午夜久久久久久| 精品一区二区免费视频| 国产激情视频一区二区在线观看| 国产凹凸在线观看一区二区| 99久久综合精品| 色综合欧美在线| 91麻豆精品国产自产在线| 亚洲女人的天堂| 天堂在线一区二区| 国产毛片精品视频| 99久久精品一区二区| 欧美午夜精品一区二区三区 | 亚洲精品国产精品乱码不99| 亚洲综合精品自拍| 美国av一区二区| 成人午夜电影久久影院| 91黄视频在线| 日韩精品一区二区三区在线| 中文字幕精品一区| 亚洲国产精品久久久男人的天堂| 久草中文综合在线| 日本韩国欧美一区二区三区| 日韩免费在线观看| 1000部国产精品成人观看| 丝袜美腿亚洲综合| www.欧美日韩| 日韩欧美成人一区| 国产精品国产馆在线真实露脸 | 丰满少妇在线播放bd日韩电影| 不卡的av电影| 欧美一区二区成人6969| 中文子幕无线码一区tr| 亚洲v日本v欧美v久久精品| 国产大陆精品国产| 欧美日本一区二区在线观看| 国产精品网曝门| 免费av成人在线| av亚洲精华国产精华精| 欧美mv日韩mv国产| 亚洲国产中文字幕| www.欧美精品一二区| 久久综合九色综合97婷婷女人| 高清不卡一区二区| 欧美sm极限捆绑bd| 午夜精品一区在线观看| 91亚洲永久精品| 久久品道一品道久久精品| 天天av天天翘天天综合网| av激情成人网| 国产丝袜欧美中文另类| 美女视频一区在线观看| 在线观看日产精品| 亚洲欧美在线视频观看| 国产高清不卡一区二区| 日韩欧美国产午夜精品| 午夜视频久久久久久| 99久久伊人精品| 日本一区二区在线不卡| 精品亚洲成a人| 91精品国产综合久久久久久| 亚洲一二三四久久| 91麻豆成人久久精品二区三区| 国产日韩欧美精品一区| 精品综合久久久久久8888| 91精品国产麻豆国产自产在线 | 国产精品嫩草影院av蜜臀| 国产一区二区剧情av在线| 日韩欧美一级二级三级| 免费观看日韩电影| 日韩欧美一区二区在线视频| 午夜精品久久久久久久99水蜜桃 | 丝袜亚洲另类欧美综合| 欧美三级中文字幕在线观看| 亚洲综合在线第一页| 色综合久久99| 亚洲欧美日韩系列| 91色乱码一区二区三区| 中文字幕一区三区| 暴力调教一区二区三区| 国产精品毛片高清在线完整版| 国产不卡免费视频| 中文字幕一区二区视频| 成人av综合一区| 一区二区三区欧美在线观看| 欧美制服丝袜第一页| 亚洲成a人v欧美综合天堂| 欧美另类久久久品| 欧美亚洲高清一区二区三区不卡| 一区二区三区精品视频在线| 欧美日韩精品一区视频| 青青青爽久久午夜综合久久午夜| 欧美成人高清电影在线| 国产成人精品综合在线观看| 中文字幕制服丝袜一区二区三区 | 欧美电影影音先锋| 蜜桃视频一区二区| 精品1区2区在线观看| 成人午夜电影小说| 亚洲人成网站在线| 欧美日韩黄色影视| 日韩va亚洲va欧美va久久| 久久综合九色综合欧美98| 成年人国产精品| 五月婷婷另类国产|