zoukankan      html  css  js  c++  java
  • 算法笔记

    ===================笛卡尔积:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    //淘宝商城的商品的sku标识码用到笛卡尔积,将商品的所有种类特性拼接成唯一的id,比如衣服的 商标+尺寸+颜色+款式构成唯一标识;
    namespace 笛卡尔积
    {
    class Program
    {
    static void Main(string[] args)
    {
    ColContainer colCon = new ColContainer();
    List<Collection> licon = new List<Collection>();
    //颜色种类
    Collection coll = new Collection();
    List<string> li = new List<string>();
    li.Add("red");
    li.Add("green");
    li.Add("yellow");
    coll.str = li;
    licon.Add(coll);
    //型号种类
    coll = new Collection();
    li = new List<string>();
    li.Add("2.4");
    li.Add("2.5");
    li.Add("2.6");
    coll.str = li;
    licon.Add(coll);
    colCon.list = licon;
    //可以无限制添加特性集合;
    //开始拼接
    //定义拼接后的集合容器
    List<string> listResult = new List<string>();
    foreach (var lii in colCon.list)//遍历每个种类
    {
    //定义临时集合
    List<string> listTem = new List<string>();
    foreach (var liChild in lii.str)//遍历每个种类的所有特性
    {
    if (listResult.Count == 0)
    {
    listTem.Add(liChild);
    }
    else
    {
    foreach (var str in listResult)
    {
    listTem.Add(str + "_" + liChild);
    }
    }
    }
    listResult.Clear();
    listResult.AddRange(listTem);
    }
    //listResult是最终结果
    for (int i = 0; i < listResult.Count; i++)
    {
    Console.WriteLine(listResult[i]);
    }
    Console.Read();
    }
    }
    //集合(模拟商品的特性,比如多种颜色、多种型号)
    public class Collection
    {
    public List<string> str { get; set; }
    }
    //存放多个集合
    public class ColContainer
    {
    public List<Collection> list{get;set;}
    }
    }


    ====================冒泡排序:

    ----------冒泡排序:

    public static void Sort(int[] array)
    {
    int i, j; // 循环变量
    int temp; // 临时变量
    for (i = 0; i < array.Length - 1; i++)
    {
    for (j = 0; j < array.Length - 1 - i; j++)
    {
    if (array[j] > array[j + 1])
    {s
    // 交换元素
    temp = array[j];
    array[j] = array[j + 1];
    array[j + 1] = temp;
    }
    }
    }
    }


    --------------

    3.
    一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。

    答:public class MainClass
    { public static void Main()
    { Console.WriteLine(Foo(30)); }
    public static int Foo(int i) {
    if (i <= 0)
    return 0;
    else if(i > 0 && i <= 2)
    return 1;
    else return Foo(i -1) + Foo(i - 2); } }

    ====

    首先排序的方法有很多种:插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等

    =========

    排序:插入排序、选择排序、交换排序(快速排序,冒泡排序)

    查找算法:顺序查找 二分查找(折半查找) 二叉排序树查找 哈希表法(散列表) 二叉排序树查找 分块查找

    ======

    1、如果它的左子树不空,那么左子树上的所有结点值均小于它的根结点值;
    2、如果它的右子树不空,那么右子树上的所有结点值均大于它的根结点值;
    3、它的左右子树也分别为二叉查找树。

    ======

    平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,

    就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态


    ===========一致性哈希:

    2.我们采用一致性哈希:

    1.假如我们有三台服务器a,b,c
    2.引入虚拟节点,a变成了a1到a100 100台
    b变成了b1到b100 100台
    c变成了c1到c100 100台

    3.然后我们将300个点均匀的打乱到一个圆环上,360度的圆环上均匀分布着abc各100个点,
    按照顺时针方向,转移命中。当将key通过一定算法得到一个度数后,获取圆上的点上的机器
    宕机后,转移到顺时针下一个方向上的机器,这样我们就实现了,如果一台机器当掉,我们
    在不影响其他机器上的数据的同时,又将命中坏掉的机器上的数据均匀转移到了其他服务器上。
    很有意思。(比如c坏掉之后,100个点,会均匀按照顺时针转移,所以a和b各承担本应该命中c的一半)

    ====实现一致性哈希:
    1.我们需要将字符串转成一个整数的过程,crc32()函数可以实现,转化为(0-2)的32次方 数字;
    2.我们将服务器地址ip+端口也用crc32()得到整数;放到list中,并从小到大排序
    (增加虚拟节点,for循环64个,重起64个虚拟名字,添加到lists)必须拿到虚节点,得出实际服务器节点。
    3.通过key,计算crc32,判断落到哪个点上。遍历list,知道小于一个节点,则,就选择对应的机器。
    4.如果宕机一台机器,算出64个虚拟节点的crc32值,从list中删除即可。

  • 相关阅读:
    Windows OS上安装运行Apache Kafka教程
    CSS3 transition属性
    CSS3新增UI样式
    css3响应式布局
    CSS3弹性盒模型
    CSS3
    移动端开发的那点事儿
    git开源项目协作
    移动端(IOS)iframe监听不到 onscroll 事件
    Javascript高级程序设计读书笔记(第10章 DOM)
  • 原文地址:https://www.cnblogs.com/guozefeng/p/6907462.html
Copyright © 2011-2022 走看看