vscel激光器求解代码........这段代码不知道是C++还是什么的

约瑟夫问题的Python和C++求解方法
作者:prehistoric
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了约瑟夫问题的Python和C++求解方法,通过其示例我们也可以看出如今写法最简洁的编程语言和最复杂的语言之间的对比:D 需要的朋友可以参考下
么是约瑟夫问题?
约瑟夫问题是一个有趣的数学游戏,游戏规则如下:
1、N个人围成一个圈,编号从1开始,依次到N。
2、编号为M的游戏参与者开始报数,报数从1开始,后面的人报数接龙,直到K为止,报数为K的人将出局。
3、出局者的下一个玩家接着从1开始报数,如此循环,直到剩下一个玩家时游戏结束,这个玩家就是游戏获胜者。
那么问题来了,哪个编号是游戏获胜者呢?
下面通过简单的几行python代码来解决这个问题:
#!/usr/bin/env python
# Joseph Problem
def joseph(total, begins, count):
queue = range(1, total + 1)
death = (begins + count - 2) % len(queue)
for times in range(total - 1):
print 'out: ', queue[death]
del queue[death]
death = (death + count -1) % len(queue)
print 'survivor: ', queue[0]
joseph()函数中,参数total即上面提到的N,begins即M,count及K,每次循环报数out一个编号,最后剩下的survivor便是游戏获胜者。
而C++的通常实现方法如下:
#include &iostream&
void main()
int N=0,C=0;
cout&&"Please enter the number of people:N=";
cout&&"Please enter:C=";
int i=0,j=0,n=N,s=0;
int *a=new int [N];
for (i=0;i&N;i++)
while(0!=n)
cout&&j+1&&"-&";
cout&&j+1&&
j=(j+1)%N;
delete []a;
这是C++语言常见的机试题目,以下程序实现从控制台输入人数N,C并将剔除出队列的人员编号按顺序输出到控制台上。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具跪求“区间求解算法”实现的VB或C++代码啊?
跪求“区间求解算法”实现的VB或C++代码啊?
09-09-10 &匿名提问
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
首先程序定义两个字符串k1和k2;这里他给出了一个Text1变量,应该是一个全局变量,在程序之前已经定义了。首先定义code为一个字符串,将Text1里面的文字用LCase()函数将大写字母转换成小写字母。加密的过程开始,为那一个循环过程。在这个循环里 设定i的区间是1到code的长度每个循环开始时候,将code中每一个字母取出来,赋值到s变量里面。然后判断如果s不是空字符时候,将n赋值为s中的字母与字母a的一个&距离&(这里说不知道你明白不,你好好理解一下吧)。假如i,即s里面的那个字母在code中是第几位的位数,不是2的倍数,那么就将在decode里面加入k1字符串中的第n个字母。假如i是2的倍数的话,就在decode加入k2字符串里面的第n个字母。在刚才判断s是否为空字符时候,假如得到的s是为空字符,即跳入以下过程、。假如i不是2的倍数,空格那个字母变为k1的第27个字母即p,就加入k2的第27个字母即z。最后将decode赋值给text2。其实这个程序很简单,定义两个字符串,分别是27个字母,等于是26个字母加空格,再把顺序掉乱。然后根据需要加密的字符串来分别去每一个字母,根据字母的位置来确定取k1或者k2对应的那个掩码字母。
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
下面的内容摘自 再读内核存储管理(5):buddy算法。另外楼主也可以参考下《Linux Buddy系统算法源码解析》:blog.csdn/tq02h2a/archive//3516263.aspx简单buddy代码请见附件。1.1    buddy算法buddy算法是用来做内存管理的经典算法,目的是为了解决内存的外碎片。避免外碎片的方法有两种:1,利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。2,开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割。内核选择第二种避免方法。buddy算法将所有空闲页框分组为11个块链表,每个块链表的每个块元素分别包含1,2,4,8,16,32,64,128,256,512,1024个连续的页框,每个块的第一个页框的物理地址是该块大小的整数倍。如,大小为16个页框的块,其起始地址是16*2^12(一个页框的大小为4k,16个页框的大小为16*4K,1k=次方,4k=2的12次方)的倍数。例,假设要请求一个128个页框的块,算法先检查128个页框的链表是否有空闲块,如果没有则查256个页框的链表,有则将256个页框的块分裂两份,一份使用,一份插入128个页框的链表。如果还没有,就查512个页框的链表,有的话就分裂为128,128,256,一个128使用,剩余两个插入对应链表。如果在512还没查到,则返回出错信号。回收过程相反,内核试图把大小为b的空闲伙伴合并为一个大小为2b的单独快,满足以下条件的两个块称为伙伴:1,两个块具有相同的大小,记做b;2,它们的物理地址是连续的,3,第一个块的第一个页框的物理地址是2*b*2^12的倍数,该算法迭代,如果成功合并所释放的块,会试图合并2b的块来形成更大的块。 1.1.1   内存回收buddy算法的内存回收由__free_page和free_page两个宏及两个回收函数完成。其定义为:#define __free_page(page) __free_pages((page), 0)#define free_page(addr) free_pages((addr),0)extern void FASTCALL(__free_pages(struct page *page, unsigned int order));extern void FASTCALL(free_pages(unsigned long addr, unsigned int order));1.1.1.1             __free_pages与free_pages这两个函数的实现为:fastcall void __free_pages(struct page *page, unsigned int order){     if (put_page_testzero(page)) {         if (order == 0)              free_hot_page(page);         else              __free_pages_ok(page, order);     }}fastcall void free_pages(unsigned long addr, unsigned int order){     if (addr != 0) {         VM_BUG_ON(!virt_addr_valid((void *)addr));         __free_pages(virt_to_page((void *)addr), order);     }}从这两个函数的实现可以看出,它们只是接收的参数不同而已,最后的处理方法则是一样的。free_pages函数接收一个绝对地址做为参数,而__free_pages函数则直接接收page这个结构体的指针做为参数。这其中put_page_testzero函数用于将page-&_count减一并判断其是否为0,如果为0则说明此页已经没有用户使用,此时就释放这个页。从这里还可以看出,当order为0时,此函数试图先将内存页放到所谓的热高速缓存中,否则就将其回收到指定阶数的链表中。1.1.1.2             __free_pages_ok这个函数位于mm/page_alloc.c:static void __free_pages_ok(struct page *page, unsigned int order){             int reserved = 0;
    // 判断是否应该释放这些连续的页,通常reserved为0     for (i = 0 ; i & (1 && order) ; ++i)         reserved += free_pages_check(page + i);     if (reserved)        
    if (!PageHighMem(page)) // 恒为true         debug_check_no_locks_freed(page_address(page),PAGE_SIZE&&order); // 空语句     arch_free_page(page, order);     // 空语句     kernel_map_pages(page, 1 && order, 0);    // 空语句
    local_irq_save(flags);     __count_vm_events(PGFREE, 1 && order);    // 空语句     free_one_page(page_zone(page), page, order);     local_irq_restore(flags);}很简单,就是调用free_one_page函数进行释放工作。1.1.1.3             free_one_pagestatic void free_one_page(struct zone *zone, struct page *page, int order){     spin_lock(&zone-&lock);     zone-&all_unreclaimable = 0;     zone-&pages_scanned = 0;     __free_one_page(page, zone, order);     spin_unlock(&zone-&lock);}简单调用__free_one_page函数,继续跟踪。1.1.1.4             __free_one_page/* * Freeing function for a buddy system allocator. * * The concept of a buddy system is to maintain direct-mapped table * (containing bit values) for memory blocks of various &orders&. * The bottom level table contains the map for the smallest allocatable * units of memory (here, pages), and each level above it describes * pairs of units from the levels below, hence, &buddies&. * At a high level, all that happens here is marking the table entry * at the bottom level available, and propagating the changes upward * as necessary, plus some accounting needed to play nicely with other * parts of the VM system. * At each level, we keep a list of pages, which are heads of continuous * free pages of length of (1 && order) and marked with PG_buddy. Page's * order is recorded in page_private(page) field. * So when we are allocating or freeing one, we can derive the state of the * other. That is, if we allocate a small block, and both were  
* free, the remainder of the region must be split into blocks.  
* If a block is freed, and its buddy is also free, then this * triggers coalescing into a block of larger size.             * * -- wli */ static inline void __free_one_page(struct page *page,         struct zone *zone, unsigned int order){     unsigned long page_     int order_size = 1 &&
    if (unlikely(PageCompound(page)))         destroy_compound_page(page, order);
    page_idx = page_to_pfn(page) & ((1 && MAX_ORDER) - 1);
    VM_BUG_ON(page_idx & (order_size - 1));     VM_BUG_ON(bad_range(zone, page));
    __mod_zone_page_state(zone, NR_FREE_PAGES, order_size);     while (order & MAX_ORDER-1) {         unsigned long combined_         struct free_area *         struct page *
        buddy = __page_find_buddy(page, page_idx, order);         if (!page_is_buddy(page, buddy, order))                      /* Move the buddy up one level. */
        list_del(&buddy-&lru);         area = zone-&free_area +         area-&nr_free--;         rmv_page_order(buddy);         combined_idx = __find_combined_index(page_idx, order);         page = page + (combined_idx - page_idx);         page_idx = combined_         order++;     }     set_page_order(page, order);     list_add(&page-&lru, &zone-&free_area[order].free_list);     zone-&free_area[order].nr_free++;}这个注释中已经很清楚地说明了buddy算法的核心,它就是将内存分成不同大小的块,每个块都由数量不等的页组成。最小的块只有一个页,其次是2个页、4个页、8个页…组成的块。最多由1024个页组成。在上述函数中,while循环尽可能地将页面放在更大的块中,在查找到最大的块后,将这个内存块放到相应的块链表中。1.1.2   查找buddy页在buddy算法中,每一页都有一个buddy页与之相对应,使用__page_find_buddy函数可以找到指定页面对应的buddy页面:/* * Locate the struct page for both the matching buddy in our * pair (buddy1) and the combined O(n+1) page they form (page). * * 1) Any buddy B1 will have an order O twin B2 which satisfies * the following equation: *     B2 = B1 ^ (1 && O) * For example, if the starting buddy (buddy2) is #8 its order * 1 buddy is #10: *     B2 = 8 ^ (1 && 1) = 8 ^ 2 = 10 * * 2) Any buddy B will have an order O+1 parent P which * satisfies the following equation: *     P = B & ~(1 && O) * * Assumption: *_mem_map is contiguous at least up to MAX_ORDER */static inline struct page *__page_find_buddy(struct page *page, unsigned long page_idx, unsigned int order){     unsigned long buddy_idx = page_idx ^ (1 && order);
    return page + (buddy_idx - page_idx);} 1.1.3   确认两个页面是否互为buddy要确认两个指定的页面是否互为buddy,可以使用page_is_buddy函数:/* * This function checks whether a page is free && is the buddy * we can do coalesce a page and its buddy if * (a) the buddy is not in a hole && * (b) the buddy is in the buddy system && * (c) a page and its buddy have the same order && * (d) a page and its buddy are in the same zone. * * For recording whether a page is in the buddy system, we use PG_buddy. * Setting, clearing, and testing PG_buddy is serialized by zone-&lock. * * For recording page's order, we use page_private(page). */static inline int page_is_buddy(struct page *page, struct page *buddy,                                     int order){     if (!pfn_valid_within(page_to_pfn(buddy)))     // 恒为false         return 0;
    if (page_zone_id(page) != page_zone_id(buddy))         return 0;
    if (PageBuddy(buddy) && page_order(buddy) == order) {         BUG_ON(page_count(buddy) != 0);         return 1;     }     return 0;}在这里PageBuddy用于判断一个页面是否带有PG_buddy标记。注意:在初始化的时候,所有的页面都只有PG_reserved标记。#define PageBuddy(page)     test_bit(PG_buddy, &(page)-&flags)&BR/&附件:&a href=&/browse/download.php?path=/52/60/22/..c&filename=buddy.c& target=&_blank&&buddy.c&/a&
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
下面的内容摘自 再读内核存储管理(5):buddy算法。另外楼主也可以参考下《Linux Buddy系统算法源码解析》:blog.csdn/tq02h2a/archive//3516263.aspx简单buddy代码请见附件。1.1    buddy算法buddy算法是用来做内存管理的经典算法,目的是为了解决内存的外碎片。避免外碎片的方法有两种:1,利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。2,开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割。内核选择第二种避免方法。buddy算法将所有空闲页框分组为11个块链表,每个块链表的每个块元素分别包含1,2,4,8,16,32,64,128,256,512,1024个连续的页框,每个块的第一个页框的物理地址是该块大小的整数倍。如,大小为16个页框的块,其起始地址是16*2^12(一个页框的大小为4k,16个页框的大小为16*4K,1k=次方,4k=2的12次方)的倍数。例,假设要请求一个128个页框的块,算法先检查128个页框的链表是否有空闲块,如果没有则查256个页框的链表,有则将256个页框的块分裂两份,一份使用,一份插入128个页框的链表。如果还没有,就查512个页框的链表,有的话就分裂为128,128,256,一个128使用,剩余两个插入对应链表。如果在512还没查到,则返回出错信号。回收过程相反,内核试图把大小为b的空闲伙伴合并为一个大小为2b的单独快,满足以下条件的两个块称为伙伴:1,两个块具有相同的大小,记做b;2,它们的物理地址是连续的,3,第一个块的第一个页框的物理地址是2*b*2^12的倍数,该算法迭代,如果成功合并所释放的块,会试图合并2b的块来形成更大的块。 1.1.1   内存回收buddy算法的内存回收由__free_page和free_page两个宏及两个回收函数完成。其定义为:#define __free_page(page) __free_pages((page), 0)#define free_page(addr) free_pages((addr),0)extern void FASTCALL(__free_pages(struct page *page, unsigned int order));extern void FASTCALL(free_pages(unsigned long addr, unsigned int order));1.1.1.1             __free_pages与free_pages这两个函数的实现为:fastcall void __free_pages(struct page *page, unsigned int order){     if (put_page_testzero(page)) {         if (order == 0)              free_hot_page(page);         else              __free_pages_ok(page, order);     }}fastcall void free_pages(unsigned long addr, unsigned int order){     if (addr != 0) {         VM_BUG_ON(!virt_addr_valid((void *)addr));         __free_pages(virt_to_page((void *)addr), order);     }}从这两个函数的实现可以看出,它们只是接收的参数不同而已,最后的处理方法则是一样的。free_pages函数接收一个绝对地址做为参数,而__free_pages函数则直接接收page这个结构体的指针做为参数。这其中put_page_testzero函数用于将page-&_count减一并判断其是否为0,如果为0则说明此页已经没有用户使用,此时就释放这个页。从这里还可以看出,当order为0时,此函数试图先将内存页放到所谓的热高速缓存中,否则就将其回收到指定阶数的链表中。1.1.1.2             __free_pages_ok这个函数位于mm/page_alloc.c:static void __free_pages_ok(struct page *page, unsigned int order){             int reserved = 0;
    // 判断是否应该释放这些连续的页,通常reserved为0     for (i = 0 ; i  (1  order) ; ++i)         reserved += free_pages_check(page + i);     if (reserved)        
    if (!PageHighMem(page)) // 恒为true         debug_check_no_locks_freed(page_address(page),PAGE_SIZEorder); // 空语句     arch_free_page(page, order);     // 空语句     kernel_map_pages(page, 1  order, 0);    // 空语句
    local_irq_save(flags);     __count_vm_events(PGFREE, 1  order);    // 空语句     free_one_page(page_zone(page), page, order);     local_irq_restore(flags);}很简单,就是调用free_one_page函数进行释放工作。1.1.1.3             free_one_pagestatic void free_one_page(struct zone *zone, struct page *page, int order){     spin_lock(&zone-&lock);     zone-&all_unreclaimable = 0;     zone-&pages_scanned = 0;     __free_one_page(page, zone, order);     spin_unlock(&zone-&lock);}简单调用__free_one_page函数,继续跟踪。1.1.1.4             __free_one_page/* * Freeing function for a buddy system allocator. * * The concept of a buddy system is to maintain direct-mapped table * (containing bit values) for memory blocks of various &orders&. * The bottom level table contains the map for the smallest allocatable * units of memory (here, pages), and each level above it describes * pairs of units from the levels below, hence, &buddies&. * At a high level, all that happens here is marking the table entry * at the bottom level available, and propagating the changes upward * as necessary, plus some accounting needed to play nicely with other * parts of the VM system. * At each level, we keep a list of pages, which are heads of continuous * free pages of length of (1  order) and marked with PG_buddy. Page's * order is recorded in page_private(page) field. * So when we are allocating or freeing one, we can derive the state of the * other. That is, if we allocate a small block, and both were  
* free, the remainder of the region must be split into blocks.  
* If a block is freed, and its buddy is also free, then this * triggers coalescing into a block of larger size.             * * -- wli */ static inline void __free_one_page(struct page *page,         struct zone *zone, unsigned int order){     unsigned long page_     int order_size = 1  
    if (unlikely(PageCompound(page)))         destroy_compound_page(page, order);
    page_idx = page_to_pfn(page) & ((1  MAX_ORDER) - 1);
    VM_BUG_ON(page_idx & (order_size - 1));     VM_BUG_ON(bad_range(zone, page));
    __mod_zone_page_state(zone, NR_FREE_PAGES, order_size);     while (order  MAX_ORDER-1) {         unsigned long combined_         struct free_area *         struct page *
        buddy = __page_find_buddy(page, page_idx, order);         if (!page_is_buddy(page, buddy, order))                      /* Move the buddy up one level. */
        list_del(&buddy-&lru);         area = zone-&free_area +         area-&nr_free--;         rmv_page_order(buddy);         combined_idx = __find_combined_index(page_idx, order);         page = page + (combined_idx - page_idx);         page_idx = combined_         order++;     }     set_page_order(page, order);     list_add(&page-&lru, &zone-&free_area[order].free_list);     zone-&free_area[order].nr_free++;}这个注释中已经很清楚地说明了buddy算法的核心,它就是将内存分成不同大小的块,每个块都由数量不等的页组成。最小的块只有一个页,其次是2个页、4个页、8个页…组成的块。最多由1024个页组成。在上述函数中,while循环尽可能地将页面放在更大的块中,在查找到最大的块后,将这个内存块放到相应的块链表中。1.1.2   查找buddy页在buddy算法中,每一页都有一个buddy页与之相对应,使用__page_find_buddy函数可以找到指定页面对应的buddy页面:/* * Locate the struct page for both the matching buddy in our * pair (buddy1) and the combined O(n+1) page they form (page). * * 1) Any buddy B1 will have an order O twin B2 which satisfies * the following equation: *     B2 = B1 ^ (1  O) * For example, if the starting buddy (buddy2) is #8 its order * 1 buddy is #10: *     B2 = 8 ^ (1  1) = 8 ^ 2 = 10 * * 2) Any buddy B will have an order O+1 parent P which * satisfies the following equation: *     P = B & ~(1  O) * * Assumption: *_mem_map is contiguous at least up to MAX_ORDER */static inline struct page *__page_find_buddy(struct page *page, unsigned long page_idx, unsigned int order){     unsigned long buddy_idx = page_idx ^ (1  order);
    return page + (buddy_idx - page_idx);} 1.1.3   确认两个页面是否互为buddy要确认两个指定的页面是否互为buddy,可以使用page_is_buddy函数:/* * This function checks whether a page is free && is the buddy * we can do coalesce a page and its buddy if * (a) the buddy is not in a hole && * (b) the buddy is in the buddy system && * (c) a page and its buddy have the same order && * (d) a page and its buddy are in the same zone. * * For recording whether a page is in the buddy system, we use PG_buddy. * Setting, clearing, and testing PG_buddy is serialized by zone-&lock. * * For recording page's order, we use page_private(page). */static inline int page_is_buddy(struct page *page, struct page *buddy,                                     int order){     if (!pfn_valid_within(page_to_pfn(buddy)))     // 恒为false         return 0;
    if (page_zone_id(page) != page_zone_id(buddy))         return 0;
    if (PageBuddy(buddy) && page_order(buddy) == order) {         BUG_ON(page_count(buddy) != 0);         return 1;     }     return 0;}在这里PageBuddy用于判断一个页面是否带有PG_buddy标记。注意:在初始化的时候,所有的页面都只有PG_reserved标记。#define PageBuddy(page)     test_bit(PG_buddy, &(page)-&flags)&BR/&附件:&a href=&/browse/download.php?path=/52/60/22/..c&filename=buddy.c& target=&_blank&&buddy.c&/a&
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
C++程序设计。算法与数据结构。windows程序设计(这本书太老了,只有电子版的了)。参照着vc程序设计(主要讲mfc)看。windows程序设计(方艳红 版)。windows核心编程。然后了解网络和数据库编程等。想成为编程高手,算法与数据结构最重要,这部分是活的。先用VC++ 学语法~vb执行效率太底,Delphi用的0是帕司卡语言,C++ Builder也不错~
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
寻找《从番职出发》?k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){                maxNumber *= 2;            }            var resultArr = [];            for(var i=0;i&maxNi++){                var str = toBasicStr(i);                var tempArr = [];                for(var j=0;j&str.j++){                    if(str[j] == &1&){tempArr.push(arr[arr.length - str.length + j]);}                }                var sum = sumArr(tempArr);                if(sum &= RANGE_MAX && sum &= RANGE_MIN){resultArr.push(tempArr)}            }            return resultA        }        var result = getAllGroup([5.6,18.7,23.5,39,13.2,14.9,13.7,10.1,9.2,9.9,16.5,17.3,20.8,20.2,17]);        for(var i=0;i&result.i++){            document.write(result[i] + &&br/&&);        }
请登录后再发表评论!
寻找《从番职出发》?k4me的算法基本上已经是最简单的了,比我想的优化了10多倍,我按照他的算法把自己代码整理了一下,贴出来大家指正var RANGE_MAX = 55;        var RANGE_MIN = 50;        function sumArr(arr){            var sum = 0;            for(var i=0;i&arr.i++){                sum+=arr[i];            }                    }        function toBasicStr(num){            return num.toString(2)        }        function getAllGroup(arr){            var maxNumber = 1;            for(var i=1;i&arr.i++){         &#1}

我要回帖

更多关于 cplex求解tsp问题代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信